我有解码AES 256字符串的功能,但它只返回16个字符
bool decrypt_block(unsigned char* cipherText, unsigned char* plainText, unsigned char* key)
{
AES_KEY decKey;
if (AES_set_decrypt_key(key, 256, &decKey) < 0)
return false;
AES_decrypt(cipherText, plainText, &decKey);
return true;
}
Run Code Online (Sandbox Code Playgroud)
decrypt_block( encoded, resultText, ( unsigned char *) "57f4dad48e7a4f7cd171c654226feb5a");
Run Code Online (Sandbox Code Playgroud)
任何的想法
您似乎混淆了密钥长度和块大小.
AES可以使用3种不同的密钥长度:128位,192位和256位.
AES始终使用128位(16字节)的块大小.对于长度超过16个字节的消息,您需要一次解密(或加密)16个字节,并希望每次获得16个字节的输出.(您还需要决定使用哪种模式 - 例如CBC,CTR,ECB等.如果您正在解密其他人提供的文本,那么您已经做出了该决定.如果您自己做出决定,请承担记住,ECB几乎永远不是正确的选择.)如果消息不是16字节长的倍数,你需要填充它以便它.PKCS#7填充是最常见的.
有关更多信息,请参阅有关AES的Wikipedia文章.
AES 是一种分组密码。它加密和解密 128 位(16 字节)的块。AES_decrypt 和 AES_encrypt 一次作用于单个块。因此,您只能获得前 16 个字节。您必须手动解密或加密其他块。
如果您知道模式(如 CBC、ECB 等),则可以调用 AES_decrypt_cbc 等函数。
需要修改代码如下(我只是举个例子):
int len = strlen(ciphertext); //or get cipher text length by any mean.
int i;
for(i=0; i<=len; i+=16)
AES_decrypt(cipherText+i, plainText+i, &decKey);
Run Code Online (Sandbox Code Playgroud)
如果您确定模式,请调用 cbc/ecb/cfb/ofb 模式函数。
如有任何疑问,请告诉我。
归档时间: |
|
查看次数: |
7375 次 |
最近记录: |