2016-11-15 506 views
0

有人可以幫助我使用AES嗎?我使用phpseclib來加密和解密數據,但是,它似乎無法解密數據。看到我的代碼如下。我想解密其他頁面上的數據。提前致謝!使用phpseclib進行AES加密

$base64 = "AAA"; 

$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV(crypt_random_string($cipher->getBlockLength() >> 3)); 
echo $encrypted = $cipher->encrypt($base64); 


$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV(crypt_random_string($cipher->getBlockLength() >> 3)); 
echo 'decrypted:'. $cipher->decrypt($encrypted); 

結果

%NKy0k:解密:

更新:

,這是否意味着這是需要保持的列表初始化矢量爲了解密數據?

更新:

我已經決定使用流明框架。流明有一個內置的加密功能,可以處理IV和其他加密技術。謝謝你的幫助!

回答

-1

您正在使用庫。你爲什麼不使用openssl_encrypt()

加密:

openssl_encrypt($text, $method, $key); 

參數:

  1. $text:文本要加密。
  2. $method:您將用於加密的方法。我主要使用AES-256-ECB
  3. $key:用於加密的密鑰。

實施例:

$data = openssl_encrypt('Hello', 'AES-256-ECB' 'test'); 

解密:

openssl_decrypt($encrypted_text, $method, $key); 

參數:

  1. $encrypted_text:文本加密。
  2. $method:您將用於解密的方法。
  3. $key:解密文本的關鍵。

例子:

openssl_decrypt($data, 'AES-256-ECB', 'test'); 
+0

我已經嘗試過使用它,然後決定使用庫。我遇到了一個錯誤/警告,說我需要一個初始化向量,我不知道它是什麼。 – bwaaaaaa

+0

這裏有一個很好的例子[http://creepergaming.net/encrypt]使用openssl –

+3

@bwaaaaaa這隻意味着你需要休息一下以研究加密。只有正確使用加密和解密才能提供安全性。 – zaph

0

您使用在這兩種情況下不同的IV - 你需要使用相同的IV。試試這個:

$base64 = "AAA"; 
$iv = crypt_random_string($cipher->getBlockLength() >> 3); 

$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV($iv); 
echo $encrypted = $cipher->encrypt($base64); 


$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV($iv); 
echo 'decrypted:'. $cipher->decrypt($encrypted); 
+1

如果我使用astatic IV,會不會有安全問題?感謝您的回覆。 – bwaaaaaa

+0

不要使用靜態IV,因爲如果再次加密相同的消息,加密的數據將是相同的,並泄漏信息。 – zaph

+0

@zaph謝謝!我同意,我也已經完成了我的研究。我還比較了不同的庫/插件,最好是IV是動態的。使其動態化是具有挑戰性的,但更安全。無論如何,我已決定使用流明框架。它具有內置加密功能。所以沒有必要深入挖掘。 – bwaaaaaa

0

使用隨機生成的IV進行加密。 IV不需要保密,所以只需在IV中加密數據前綴即可。然後IV可用於解密。

加密密鑰'QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'是512位(64字節),但只有三個AES密鑰大小:128,192和256位。