Hi, Thanks for the hint.
Just a small note to let you know that my code to decrypt a string will return a string with filled with null characters at the end. You should trim() it. Also, anybody knows how to detect if the PHP build is linked with 2.2 or 2.4? I would like my crypt / decrypt functions to detect which mcrypt version is used dynamically, so the same code could run with both versions without modifications. Right now the only way I found is to check whether the MCRYPT_RIJNDAEL_128 constant (or any other cipher type constants) is a number or a string (these constants are strings under 2.4.x and numbers under 2.2.x). Any better way of doing this? I've checked the php info functions, they can tell if a certain extension is present but this is not very helpful.. Thank you, Cedric On May 3, 2002 02:29 am, Tom Rogers wrote: > Hi > Thanks for that info, was just what I needed :) > You can also create $iv with this: > > $iv = pack("a".mcrypt_enc_get_iv_size($td),$iv); > > I use base64_encode() and base64_decode() to store the result and send via > the web. > Tom > > At 01:02 PM 3/05/2002, Cédric Veilleux wrote: > >Hi, > > > > I had an hard time converting my code from mcrypt 2.2.x to 2.4.x. > > There is a > >big lack of info about the difference between the two and I could not find > >anything to help me make the move. > > > > My problem was not getting things to work with either version of > > mcrypt, > >there are plenty of examples available for both versions. My problem was > >getting libmcrypt 2.4.x decrypting the data previously encrypted by 2.2.x. > > > > Here's some general info for anyone interested. I would have been > > very > >pleased to find this will searching the archive and I didn't, so I am > > doing it for anybody else facing the same problem. > > > >1) PHP linked with libmcrypt 2.2.x is not too picky about Initialization > >Vectors, but with 2.4.x, it will give a warning message if you don't > > specify one with some of the functions or simply wont work with others. > > Check my example code below to see what I did. > > > >2) PHP will segfault if you use a key size with the wrong lenght with > > 2.4.x and it won't with 2.2.x. Be very careful about the lenght of your > > key in 2.4.x, what worked previously might not work now. > > > > > >Decryption under libmcrypt 2.2.x: > >----- > >$clear_text = mcrypt_cbc ($cipher, $key, hex2bin($crypted_text), > >MCRYPT_DECRYPT); > >----- > > > >Encryption under libmcrypt 2.2.x: > >----- > >$crypted_text = bin2hex(mcrypt_cbc ($cipher, $key, $clear_text, > >MCRYPT_ENCRYPT)); > >----- > > > > > >The following code is what I had to do to get a similar (compatible) > >behaviour > >under libmcrypt 2.4.x. Note that I create an initialization vector filled > >with "\0" characters, which is, I believe, the default behavior with > >libmcrypt 2.2.x. The PHP manual somewhere recommends to use "0" if you do > > not want to use an initialization vector. This did not work for me, as > > this is not the default 2.2.x behavior. I think the manual should be > > modified as it greatly confiused me. > > > >Encryption under libmcrypt 2.4.x: > >----- > >$td = mcrypt_module_open ($cipher, "", MCRYPT_MODE_CBC, ""); > >$i = 0; > >while ($i < mcrypt_enc_get_iv_size ($td)) { > > $iv .= "\0"; > > $i++; > >} > >mcrypt_generic_init ($td, $key, $iv); > >$crypted_text = bin2hex(mcrypt_generic($td, $plain_text)); > >mcrypt_generic_end ($td); > >----- > > > >Decryption under libmcrypt 2.4.x: > >----- > >$td = mcrypt_module_open ($cipher, "", MCRYPT_MODE_CBC, ""); > >$i = 0; > >while ($i < mcrypt_enc_get_iv_size ($td)) { > > $iv .= "\0"; > > $i++; > >} > >mcrypt_generic_init ($td, $key, $iv); > >$plain_text = mdecrypt_generic($td, hex2bin($crypted_text)); > >mcrypt_generic_end ($td); > >----- > > > > > >In these snippets, $crypted_text is the encrypted data in hexadecimal > > format. This allows data to be stored (in DB's for example) or displayed > > without problems. You need the following function: > > > >function hex2bin($data) { > > $len = strlen($data); > > return pack("H" . $len, $data); > >} > > > > > > > >Hope this can help someone.. > > > > > >Thank you, > > > >Cedric > > > > > >-- > >PHP General Mailing List (http://www.php.net/) > >To unsubscribe, visit: http://www.php.net/unsub.php -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php