2016-07-13 48 views
6

Jak zapewne wiecie, rozszerzenie mcrypt zostanie wycofane na php 7.1.Zastępowanie mcrypt_encrypt z openssl_encrypt

Używam do zachowania "starej" aplikacji, którą chcę przenieść w końcu do tej wersji, więc przeprowadziłem testy i zweryfikowałem, że nie mogę już uzyskać 100% zasięgu, ponieważ istnieje kod, który wykorzystuje Poniższy kod:

$key = 'sA*(DH'; 

// initialization vector 
$iv = md5(md5($key)); 
$output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string,  MCRYPT_MODE_CBC, $iv)); 

próbowałem portu ten kawałek kodu openssl_encrypt przy użyciu tego kodu

$key = md5('sA*(DH'); 
$iv = md5($key); 
echo base64_encode(openssl_encrypt($data, "aes-256-cbc", $key, OPENSSL_RAW_DATA, $iv)); 

ale mam 2 problemy z tym:

  1. długościach IV powinna wynosić 16 znaków (i md5 daje mi 32), więc dostać ostrzeżenie PHP
  2. Wyjście to nie to samo (nawet jeśli obciąć do 16 znaków)

ktoś miał podobne problemy (lub wiesz, jak to naprawić?)

BTW: Używam dev master wersji PHP (ma być 7.1.0 alpha 3).

Odpowiedz

1

Powinieneś naprawdę przestać używać md5 do czegokolwiek.

$iv = openssl_random_pseudo_bytes(16); 
$key = substr(hash('sha256', 'sA*(DH'), 0, 32) 

mcrypt_encrypt i openssl_encrypt nie będzie takie samo wyjście crypttext podano ten sam tekst jawny i klucz.

również mcrypt jest przestarzałe w PHP 7.1, nie usuwa ... więc można zaktualizować do 7.1 bez zmiany od mcrypt do openssl ... ale jest to dobry pomysł, aby usunąć mcrypt w ogóle.

+0

Dzięki za odpowiedź, ale oryginalny kod nie jest mój i naprawdę nie używam md5 w rzeczywistości. Spróbuję tego, dzięki. –