Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP mcrypt_encrypt/mcrypt_decrypt issue, returns a different value

I was looking for an answer but could not find it here. Please excuse me if this question was already asked.

I have a simple code encrypting and decrypting a string, strings look the same, but when comparing them using == they do not appear to be the same, so hashes are different as well..

Here is my code:

$oppa = "rompish";
$opp_enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, "key", $oppa, MCRYPT_MODE_ECB);
$opp_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, "key", $opp_enc, MCRYPT_MODE_ECB);

echo $oppa."<br />".$opp_dec."<br />";

if ($oppa == $opp_dec) echo "YAY"; else echo "NOPE";

On the page:

rompish rompish NOPE

Please tell me what I am doing wrong.

Thank you!

like image 510
rompish Avatar asked Nov 03 '22 02:11

rompish


1 Answers

AES always encrypts things in blocks of 16 bytes. Apparently mcrypt_encrypt pads the string out with zero bytes until it is a multiple of 16. mcrypt_decrypt dutifully decrypts this but lacks the information to remove the padding. And you are fooling yourself because the displayed values look the same even though oppa_dec actually ends with 9 zero bytes. Use a sensible padding scheme instead. – GregS

To remove these null characters, you can use the rtrim function. After running the decrypted output through that it should be equal.

like image 111
jmc734 Avatar answered Nov 09 '22 13:11

jmc734