gpt4 book ai didi

php - 具有 PKCS7 填充编码数据的 AES 256 具有一半 ECB 和一半 CBC block

转载 作者:可可西里 更新时间:2023-10-31 22:42:13 24 4
gpt4 key购买 nike

我正在尝试解码从服务器返回的 php 中的数据:我知道数据已解码 AES 256 并具有 PKCS7 填充但无法弄清楚它使用哪种 block 模式

这是我的 php 函数:

public function decode($data)
{
//AES decode
$iv = mcrypt_create_iv(GEServerConnection::FBENCRYPT_BLOCK_SIZE, MCRYPT_RAND);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->cryptKey, base64_decode($data), MCRYPT_MODE_ECB, $iv);

//return $data;
$len = strlen($data);
$pad = ord($data[$len - 1]);

return substr($data, 0, - $pad);
}

编码数据示例

3KD+zb/2u5gGEWvOy0Q0nSQE9pbQZmg27iN6WLiO/Af9YjN8MhHOb8TMa5uETaab

当我用 ECB (MCRYPT_MODE_ECB) 解码时,它只解码数据的开头,其余部分不可读

"Please input yo��޸̓��g|��*P�Te���  R�B

当使用 CBC (MCRYPT_MODE_CBC) 模式解码时,它开始不可读

��0�=v������.3ur username and password again"

结果应该是(我在 mac 上使用 objective-c 中的 CommonCryptor 得到的结果):

"Please input your username and password again"

有人知道出了什么问题或如何以正确的方式对其进行解码吗?

最佳答案

请看Wikipedia article .查看 ECB 和 CBC 如何解密。如果使用 ECB 模式,您将正确解密所有文本。看来密码用的是CBC,因为它是用以前的密文+当前密文+解密函数得到的原文。这就是您正确解码第二个 block 的原因。

现在为什么第一个 block 解码错误?这是因为您需要提供正确的初始化向量。它必须与用于加密的相同。我们很幸运知道 ECB 解码了第一个 block ,因为 ECB 不使用初始化向量。

答案很简单:使用初始化向量为零的 CBC(所有字节均为零),因为现在您的随机 IV 将第一个 block 更改为错误的输出。

关于php - 具有 PKCS7 填充编码数据的 AES 256 具有一半 ECB 和一半 CBC block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30695168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com