2016-11-01 183 views
-3

目前我使用openssl_encrypt加密數據並返回base64值。我必須使用AES加密鹽。如何使用AES和salt代替Base64加密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加密結果,只有結果。

目前,您沒有按照我所概述的內容進行操作,這就是爲什麼您應該花時間使用一個負責加密的庫,以便您不會推出自己的不安全實現。我是故意不發佈此加密所需的代碼,因爲擔心有人會使用它,而不是我鏈接的庫。如果您不知道自己在做什麼,請始終使用其他人制作的圖書館。