2016-07-13 34 views
6

Come probabilmente saprete, l'estensione mcrypt sarà deprecata su php 7.1.Sostituire mcrypt_encrypt con openssl_encrypt

Io uso per mantenere un'applicazione "legacy" che voglio migrare alla fine a questa versione così ho eseguito i test e verificato che non posso più ottenere il 100% di copertura, poiché c'è un pezzo di codice che usa il codice seguente:

$key = 'sA*(DH'; 

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

ho cercato di porto questo pezzo di codice per openssl_encrypt utilizzando questo codice

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

Ma ho 2 problemi con questo:

  1. La lunghezza IV dovrebbe essere di 16 caratteri (e MD5 mi dà 32), in modo da ottenere un PHP Warning
  2. L'uscita non è lo stesso (anche se troncare a 16 caratteri)

Chiunque ha avuto problemi simili (o sapete come risolverlo?)

BTW: Sto usando la versione del master di sviluppo di PHP (che dovrebbe essere 7.1.0 alpha 3).

risposta

1

Si dovrebbe davvero uscire dall'abitudine di usare md5 per qualsiasi cosa.

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

mcrypt_encrypt e openssl_encrypt non emette lo stesso crypttext parità testo in chiaro e chiave.

anche, mcrypt è deprecato in PHP 7.1, non è stato rimosso ... in modo da poter aggiornare a 7,1 senza cambiare mcrypt-openssl ... ma è una buona idea per rimuovere mcrypt in generale.

+0

Grazie per la risposta, ma il codice originale non è mio e in realtà non uso realmente md5 per niente. Proviamo questo, grazie. –