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!
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 thoughoppa_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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With