2016-11-15 75 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位。

相关问题