Я искал ответ, но не смог найти его здесь. Пожалуйста, извините меня, если этот вопрос уже задан.
У меня есть простой шифрование кода и дешифрование строки, строки выглядят одинаково, но при сравнении их с использованием == они не кажутся одинаковыми, поэтому хеши тоже разные.
Вот мой код:
$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
. После запуска расшифрованного вывода через него он должен быть равен.