2016-05-31 4 views
2

Ich habe ein Problem mit der openssl_decrypt Funktion.mcrypt_decrypt, openssl_decrypt und 0x06065064 EVP_DecryptFinal Fehler

Beispielcode:

// mcrypt 
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); 

// OpenSSL 
$decrypted = openssl_decrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); 

Die mcrypt_decrypt Funktion funktioniert gut. Aber openssl_decrypt kehrt FALSE und der folgende Fehler:

error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt

Der Schlüssel ist 32 Bytes lang, und die iv 16 Byte.

Weiß jemand, was los ist?

+0

Am besten ist es nicht mcrypt zu verwenden, ist es abandonware, wurde seit Jahren nicht mehr aktualisiert und nicht Standard PKCS # 7 (née PKCS # unterstützt 5) Padding, nur Nicht-Standard-Null-Padding, das nicht einmal mit Binärdaten verwendet werden kann. mcrypt hatte viele ausstehende [Bugs] (https://sourceforge.net/p/mcrypt/bugs/) aus dem Jahr 2003. Stattdessen sollten Sie [defuse] verwenden (https://github.com/defuse/php-encryption). Es wird beibehalten und ist korrekt. – zaph

Antwort

4

Die Lösung des Problems ist OPENSSL_RAW_DATA und OPENSSL_ZERO_PADDING:

$decrypted = openssl_decrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv); 
+0

Absoluter Lebensretter. –

Verwandte Themen