2016-11-01 9 views
-3

現在、私はopenssl_encryptを使用してデータを暗号化し、base64値を返します。私は塩でAES暗号化を使用する必要があります。Base64の代わりにAESとsaltを使用してopenssl_encryptで暗号化する方法

塩でAES暗号化を実装する方法を教えてください。ここで


は、私が使用するコードです:

function encrypt_decrypt($action, $string) 
{ 
    $output = false; 

    $encrypt_method = "AES-256-CBC"; 
    $secret_key = 'This is my secret key'; 
    $secret_iv = 'This is my secret iv'; 

    // hash 
    $key = hash('sha256', $secret_key); 

    // iv - encrypt method AES-256-CBC expects 16 bytes 
    $iv = substr(hash('sha256', $secret_iv), 0, 16); 

    if ($action == 'encrypt') { 
     $output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv); 
     $output = base64_encode($output); 
    } else if ($action == 'decrypt') { 
     $output = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv); 
    } 

    return $output; 
} 
+0

暗号化を「塩害」しないでください。あなたの質問は非常に曖昧です。あなたはもっと具体的になりますか? –

答えて

2

は常にそのような目的のためにテストされたライブラリを使用します。 IVを正しく使用していないため、暗号化が脆弱で完全に安全ではありません。

defuse/php-encryptionライブラリを使用して、あなたがしたことを取り除くことを検討してください。

なぜあなたは間違って何をやったかである:

  • 同じIV(初期化ベクトル)が使用されています。
  • 暗号化にははありませんが、それは、初期ベクトルと呼ばれていますし、それあなたが暗号化するたびに異なっている必要があります - あなたのIVは、暗号化が完了したら、あなたは暗号化されたデータを提供しなければなりません常に
  • 同じですおよび IV - 暗号化結果を含むIVが返されず、その結果のみが返されます。

現在のところ、私が概説したことをしていないので、暗号化を扱うライブラリを使用するために時間を費やす必要があります。したがって、安全でない独自の実装を展開しないでください。私はを意図的にこの暗号化に必要なコードを誰かが使用するという恐れから、私がリンクしているライブラリの代わりに使用するように投稿していません。あなたが何をしているのか分からない場合は、常に他の人が作ったライブラリを使用してください。

関連する問題