2017-12-30 19 views
1

Ich mache clientseitige Verschlüsselung mit Javascript und Server-Seite mit PHP. Beider Seite benutzen wir denselben Schlüssel und IV.AES-Verschlüsselung mit PHP, Javascript und umgekehrt

Php Verschlüsselung:

$string='test data'; 

$output = ''; 
    $encrypt_method = 'AES-256-CBC'; 
    $secret_key  = 'secret key in hex'; 
    $secret_iv  = 'iv in hex'; 
    $key   = hash('sha256',$secret_key); 

$output = openssl_encrypt($string,$encrypt_method,$key,0,$initialization_vector); 

//Encrypted text in php 
$output = base64_encode($output); 

Javascript Encryption Code:

var key = 'secret key in hex'; 
key = CryptoJS.SHA256(key);    
var ivHex = CryptoJS.enc.Hex.parse(' IV in hex ');    
var options = { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv:ivHex}; 
var obj='test data'; 
var encrypted = CryptoJS.AES.encrypt(obj,key ,options); 
var encryptedBase64 = encrypted.toString(); 

//Encrypted text in javascript  
console.log(encryptedBase64); 

Beide unterschiedliche Ausgangs geben. Mache ich etwas falsch?

+0

Stick zu openssl_encrypt(). Beste Methode ist AES-256-CTR und natürlich IV mit 16 Zeichen. – halojoy

Antwort

1
  1. $secret_iv definiert ist, sondern eine undefinierte $initialization_vector in openssl_encrypt() verwendet wird.
  2. Für das vierte Argument möchten Sie nicht 0 übergeben, möchten Sie OPENSSL_RAW_DATA (eine Konstante) übergeben.
  3. Sie übergeben hash('sha256', $secret_key) in PHP aber mit secret_key direkt in Javascript.
    • Hinweis: Ihre Schlüsselableitung (hash('sha256', $some_text_input)) ist sehr schwach. Betrachten Sie stattdessen PBKDF2-SHA256.

Wichtig: AES-CBC ohne HMAC ist anfällig für padding-oracle attacks. Sie sollten always use authenticated encryption.

Ein Beispiel für sichere Verschlüsselung sieht wie this aus. Entschlüsselung ist ein wenig mehr beteiligt.

+1

Gute Antwort. Zukünftige Leser sollten außerdem beachten, dass ab PHP 7.1 AES im GCM-Modus unterstützt wird, was wahrscheinlich besser für neue Arbeiten geeignet ist als der CTR-Modus, da ein HMAC nicht mehr benötigt wird. –

Verwandte Themen