繁体   English   中英

使用phpseclib进行AES加密

[英]AES encryption using phpseclib

有人可以帮助我进行AES吗? 我已经在加密和解密数据中使用了phpseclib,但是,它似乎无法解密数据。 请参阅下面的代码。 我想解密其他页面上的数据。 提前致谢!

$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);

结果

% NK y 0 k :解密:

更新:

这是否意味着有必要保留一个初始化向量列表以便解密数据?

更新:

我决定使用Lumen Framework。 流明具有内置的加密功能,可处理IV和其他加密技术内容。 谢谢你的帮助!

在两种情况下,您都使用不同的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);

使用随机生成的IV进行加密。 IV不需要是秘密的,因此只需在IV前面加上加密数据即可。 然后,IV可用于解密。

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

您正在使用一个库。 为什么不使用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$encrypted_text的文本。
  2. $method :用于解密的方法。
  3. $key :解密文本的密钥。

例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM