Ошибка PHP mcrypt_encrypt / mcrypt_decrypt, возвращает другое значение

Я искал ответ, но не смог найти его здесь. Пожалуйста, извините меня, если этот вопрос уже задан.

У меня есть простой шифрование кода и дешифрование строки, строки выглядят одинаково, но при сравнении их с использованием == они не кажутся одинаковыми, поэтому хеши тоже разные.

Вот мой код:

$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"; 

На странице:

rompish rompish NOPE

Пожалуйста, скажите мне, что я делаю неправильно.

Спасибо!

AES всегда шифрует вещи в блоках по 16 байт. По-видимому, mcrypt_encrypt строку с нулевыми байтами, пока она не будет кратной 16. mcrypt_decrypt расшифровывает это, но не имеет информации для удаления дополнения. И вы обманываете себя, потому что отображаемые значения выглядят одинаково, хотя oppa_dec фактически заканчивается 9 нулевыми байтами. Вместо этого используйте разумную схему дополнений. – GregS

Чтобы удалить эти нулевые символы, вы можете использовать функцию rtrim . После запуска расшифрованного вывода через него он должен быть равен.