2016-03-31 23 views
1

Ich habe versucht, meine Verschlüsselung von Mcrypt nach openssl zu migrieren, aber die Entschlüsselung bleibt erhalten. Der Code unten zeigt meine Verschlüsselungsfunktion. Ich habe den var_dump in die Verschlüsselungsfunktion gestellt, um zu verifizieren, dass die Entschlüsselung mit identischen Variablen funktioniert, was nicht der Fall ist.openssl_decrypt gibt immer false zurück

ich folgende Änderungen am Code versucht, keine gearbeitet:

  • base64_decode($encrypted)
  • nur aus Neugier base64_encode($encrypted)
  • all diesen Varianten mit Optionen auf: 0 (Standardwert), OPENSSL_RAW_DATA, OPENSSL_ZERO_PADDING

function encryptString($data){ 
    $key = "1A534"; 

    do{ 
     $iv = random_bytes(100); 
    }while(strpos($iv,"|Z|")!==false); 

    $encrypted = openssl_encrypt($data,"aes-256-gcm",$key,false,$iv); 
    var_dump(openssl_decrypt($encrypted,"aes-256-gcm",$key,OPENSSL_RAW_DATA,$iv)); 
    $output = $iv . "|Z|" . $encrypted; 
    $output = base64_encode($output); 
    return $output; 
} 

PHP Version ist 7.0.5-1 + deb.sury.org ~ treuen + 1

OpenSSL Version ist OpenSSL 1.0.2g 1. März 2016

Warum hält openssl_decrypt falsche Rückkehr? Ich habe erfolgreich mit den gleichen Variablen nur die Zeile oben verschlüsselt.

+1

Ich denke, das wird bis PHP 7.1 nicht funktionieren, weil es einen Fehler mit dem Authentifizierungs-Tag gibt. –

+0

Scheint richtig. Keine GCM-Verschlüsselung funktioniert ordnungsgemäß. – Us3r

+0

Ich benutze 7.1 in diesem Szenario, aber immer noch eine falsche zurückgegeben in allen Szenarien. – Dockstar

Antwort

0

Es funktioniert nicht für PHP < 7.1 wie AEAD nicht unterstützt wird.

Sie können the library I created (PHP 5.4+ und 7.0+) verwenden.

Abhängig von der Umgebung, wird es testen und die folgenden Methoden: - OpenSSL auf PHP 7.1, - libCrypto extension, - eine reine PHP-Implementierung.

Beachten Sie, dass die reine PHP-Methode im Vergleich zu den anderen Methoden sehr langsam ist.