używam następującą funkcję do odszyfrowywania danych na moim serwerze:Problem z funkcją PHP mcrypt
function decrypt($key, $text) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
Czytałem dużo o NIE jednak stosując EBC (i wiem, że jest przestarzała tak chciał przejść do CBC. Wystarczy do przełączania trybu..?
function decrypt($key, $text) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_CBC, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_RAND)));
}
nie działa jednak żadne błędy są generowane ale dane zwracane jest nadal szyfrowane
Czego mi brakuje
Zaktualizowany kod - jeszcze z błędami:
$key = "hello";
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
function encrypt($key, $text) {
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv)));
}
function decrypt($key, $text) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($text), MCRYPT_MODE_CBC, $iv));
}
$text = 12345;
echo "Plain Number : " . $text . "<br><br>";
$encrypted = encrypt($key, $text);
echo "AES Number : " . $encrypted . "<br><br>";
echo "Plain Number : ". decrypt($key, $encrypted) . "<br><br>";
to powinno działać - ale zwraca błąd:
blocksize w
blocksize w> Ostrzeżenie: mcrypt_encrypt()
[function.mcrypt-encrypt]: The IV parameter must be as long as the blocksize inblocksize in
blokuje się w
Czy dane dotyczące zwrotu są takie same, jak te, które przekazałeś? Jeśli tak, to coś jest nie tak z funkcją odszyfrowywania. W przeciwnym razie działa normalnie i właśnie użyłeś niewłaściwego klucza/IV i odzyskasz śmieci. –
@Marc B - tak, w rzeczywistości używam szyfrowania i odszyfrowywania na tej samej stronie, nawet w celu upewnienia się, że informacje są dobre, ale pojawiają się błędy. Spróbuję zobaczyć niektóre z poniższych sugestii. – JM4