2016-07-13 17 views
6

Wie ihr wahrscheinlich wisst, wird die Erweiterung mcrypt auf php 7.1 veraltet sein.Ersetzen von mcrypt_encrypt durch openssl_encrypt

Ich benutze, um eine "Legacy" -Anwendung zu pflegen, die ich schließlich auf diese Version migrieren möchte, also habe ich die Tests durchgeführt und überprüft, dass ich nicht 100% der Abdeckung mehr erhalten kann, da es ein Stück Code, der die verwenden folgenden Code:

$key = 'sA*(DH'; 

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

ich habe versucht, in den Hafen dieses Stück Code zu openssl_encrypt diesem Code

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

Aber ich habe 2 Probleme:

  1. sollte die IV Länge 16 Zeichen sein (und md5 gibt mir 32), so dass ich eine PHP-Warnung
  2. Der Ausgang ist es nicht das gleiche

Jeder hatte (auch wenn ich bis 16 Zeichen abgeschnitten) ähnliche Probleme (oder wissen, wie man es repariert?)

BTW: Ich benutze die Dev-Master-Version von PHP (soll 7.1.0 Alpha 3 sein).

Antwort

1

Sie sollten wirklich aus der Angewohnheit der Verwendung von MD5 für alles.

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

mcrypt_encrypt und openssl_encrypt wird die gleiche crypttext nicht ausgegeben denselben Klar- und Schlüssel gegeben.

auch ist mcrypt in PHP veraltet 7.1, nicht entfernt ... so dass Sie auf 7.1 ohne Änderung mcrypt-openssl aktualisieren können ... aber es ist eine gute Idee mcrypt im Allgemeinen zu entfernen.

+0

Danke für die Antwort, aber der ursprüngliche Code ist nicht meins und ich benutze wirklich nicht md5 für nichts wirklich. Ich werde es versuchen, danke. –