Heim  >  Artikel  >  Backend-Entwicklung  >  Warum liefern Mcrypt und OpenSSL unterschiedliche Verschlüsselungsergebnisse für Blowfish-ECB?

Warum liefern Mcrypt und OpenSSL unterschiedliche Verschlüsselungsergebnisse für Blowfish-ECB?

Barbara Streisand
Barbara StreisandOriginal
2024-11-20 19:10:16707Durchsuche

Why Do Mcrypt and OpenSSL Produce Different Encryption Results for Blowfish-ECB?

Mcrypt durch OpenSSL ersetzen

Problem: Migration einer Anwendung von der Verwendung von Mcrypt zu OpenSSL zur Datenverschlüsselung. Der Verschlüsselungscode ist Blowfish und der Modus ist Electronic Code Book (ECB). Die Ausgabe der Openssl_encrypt- und Openssl_decrypt-Funktionen unterscheidet sich jedoch von den MCrypt-Gegenstücken, obwohl sie dieselben Parameter haben.

Ursache:

Die Diskrepanz ergibt sich aus den unterschiedlichen Auffüllalgorithmen, die von verwendet werden Mcrypt und OpenSSL. Mcrypt verwendet PKCS#5-Auffüllung, während OpenSSL PKCS#7-Auffüllung verwendet. PKCS#7-Auffüllung erfordert mindestens 1 Byte Auffüllung, während PKCS#5-Auffüllung eine Auffüllungslänge von 0 Byte zulässt. Darüber hinaus erfordert Mcrypt einen Initialisierungsvektor (IV) für den ECB-Modus, obwohl IV für den ECB-Modus nicht erforderlich ist.

Lösung:

Um das Problem zu beheben, entweder Füllen Sie die Eingabedaten manuell mit Auffüllung im PKCS#7-Stil auf, bevor Sie MCrypt-Funktionen verwenden, oder verschlüsseln Sie die Daten erneut mit dem richtigen Auffüllalgorithmus.

Hier ist eine modifizierte Version des in der Frage bereitgestellten Codes, die PKCS#7-Auffüllung für MCrypt verwendet:

$key = "anotherpassword1";
$str = "does it work 12";

$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $str."", MCRYPT_MODE_ECB);
$dec = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB);
echo(bin2hex($enc).PHP_EOL);
var_dump($dec);

$enc = openssl_encrypt($str, 'bf-ecb', $key, true);
$dec = openssl_decrypt($enc, 'bf-ecb', $key, true);
echo(bin2hex($enc).PHP_EOL);
var_dump($dec);

Durch Hinzufügen von 1 Byte Auffüllung zu den Eingabedaten vor der MCrypt-Verschlüsselung funktionieren die Ausgaben sowohl von Mcrypt als auch von OpenSSL wird passen. Beachten Sie, dass für den ECB-Modus kein IV erforderlich ist und es auch nicht erforderlich ist, einen bereitzustellen.

Das obige ist der detaillierte Inhalt vonWarum liefern Mcrypt und OpenSSL unterschiedliche Verschlüsselungsergebnisse für Blowfish-ECB?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn