PHP Encrypt/Decrypt whith asymetrics keys

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I have generated two keys :
"C:>openssl req -nodes -new -x509 -keyout ben.key -out ben.crt -days
I try to encrypt/decrypt a string like "JOHN" with these asymetrics
keys. With the following code, it works.
I encrypt with the public key which is in the certificate.
I decrypt with the private key.
But why, the crypted message is different every time I start the
echo "---CRYPT---<BR>";
echo "Message : $source<BR>";
$pub_key=fread ($fp,8192);
//echo $pub_key;
openssl_public_encrypt ($source,$sourcecrypt,$pub_key);
echo "Crypted message : ".$sourcecrypt."<BR><BR>";

echo "---DECRYPT---<BR>";
echo "Crypted message : ".$sourcecrypt."<BR>";
$priv_key=fread ($fp,8192);
openssl_private_decrypt ($sourcecrypt,$newsource,$res);
echo "Source decryptée : $newsource<BR><BR>";

Now here is my second question :
In fact I encrypt with a java programm where is my certificate and I
decrypt with a PHP programm like I've just explane before.

public String crypt(String message) {

        //Cert is in LDAP
        Certificate cert =

        PublicKey publicKey = cert.getPublicKey();

            Provider secProvider = Security.getProvider("BC");
            if (secProvider == null) {
                secProvider = new BouncyCastleProvider();
            Cipher encryptCipher = Cipher.getInstance("RSA", secProvider);
            encryptCipher.init(Cipher.ENCRYPT_MODE, publicKey);

            String resultCrypt = new String();
                byte[] messageBytes = message.getBytes();
                byte[] resultCryptBytes = encryptCipher.doFinal(messageBytes);
                resultCrypt  = arr2str(resultCryptBytes);

            return resultCrypt  ;

        }catch(Exception e){
                         //throw ...

Why my programm PHP can't decrypt the message? I use evidently the
correct private key which corresponds with the public key.

Thanks for your answers...

Re: PHP Encrypt/Decrypt whith asymetrics keys

Benoît wrote:

Quoted text here. Click to load it

Sounds like a good thing, particularly with short strings - the system is
applying some reversible modification of the data before encoding to
specifically avoid repetition, e.g. instead of:

$encrypted=encrypt($data, $private_key);

the system is might be doing something like:

$modifier=rand(0,10000) . time();
$data=base64_encode($data) . ":" . base64_encode($modifier);

(actually even I could come up with something better if I spent some time
thinking about it - no doubt the openssl people did already). the data is always recoverable but the encrypted message contains
random junk which is discarded.

Quoted text here. Click to load it
In addition to the reason cited above, openSSL may do all sorts of strange
things to package up the encrypted data.

I would suggest that you start by meking sure you can implement compatable
encryption frm the command line using openSSL.exe (which I suspect will be
straightforward), then try to reproduce the behaviour in Java (I'm sure the
Java newsgroups can better advise you on your Java code).



Site Timeline