Szukałem odpowiedzi, ale nie mogłem jej znaleźć tutaj. Proszę wybaczyć, jeśli to pytanie zostało już zadane.PHP mcrypt_encrypt/mcrypt_decrypt problem, zwraca inną wartość
mam prosty kod szyfrowania i odszyfrowywania ciąg, ciągi wyglądają tak samo, ale porównując je za pomocą == oni nie wydają się być takie same, więc hashe są różne, jak dobrze ..
Tutaj mój kod:
$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";
na stronie:
rompish rompish NOPE
Proszę powiedz mi, co robię źle.
Dziękujemy!
AES zawsze szyfruje rzeczy w blokach po 16 bajtów. Najwyraźniej 'mcrypt_encrypt' umieszcza ciąg znaków na zero bajtów, dopóki nie jest wielokrotnością 16.' mcrypt_decrypt' sumiennie odszyfrowuje to, ale brakuje informacji do usunięcia dopełnienia. I oszukujesz się, ponieważ wyświetlane wartości wyglądają tak samo, chociaż 'oppa_dec' faktycznie kończy się na 9 zerowych bajtach. Zamiast tego użyj rozsądnego schematu dopełnienia. –
To jest odpowiedź, a nie komentarz, GregS (spraw, żeby tak było lub opublikuję to, łącznie z twoim imieniem na końcu: P) –