AES解密仅适用于前16个字符

AES decryption only works for first 16 characters

本文关键字:16个 字符 适用于 解密 AES      更新时间:2023-10-16

我正在尝试为我的计算机科学课使用c++进行简单的AES加密/解密。它几乎完美地工作,但解密只对字符数组的前16个字符有效。

这是我的代码:

#include <iostream>
#include "openssl/aes.h"
using namespace std;
int main() {
unsigned char teext[] = "The quick brown fox jumped over the lazy dog";
/*created keys for en- and de-cryption*/
unsigned char key[] = "abcdefghijklmnop";
unsigned char iv[] = "abcdefghijklmnop";
/*char array for encryption and decryption output*/
unsigned char enc_out[80];
unsigned char dec_out[80];
/*creating key variables*/
AES_KEY enc_key, dec_key;
/*encryption process*/
AES_set_encrypt_key(key, 128, &enc_key);
AES_encrypt(teext, enc_out, &enc_key);
/*decryption process*/
AES_set_decrypt_key(iv, 128, &dec_key);
AES_decrypt(enc_out, dec_out, &dec_key);
cout << "AES encryption"
<< "Encrypted: " << enc_out << endl 
<< "Decrypted: " << dec_out << endl;
return 0;
}

我用这个编译:

g++ Crypto.cc -L/usr/lib -lssl -lcrypto -o crypto

程序将加密"敏捷的棕色狐狸跳过懒惰的狗">很好。但在解密时,它会输出"快速棕色">和t随机字符。知道我做错了什么吗?

AES_decrypt只解密一块16字节的AES数据。我相信这是一个比你想要的更低级别的函数。

您最好使用EVP_*级别的函数。你可以在opensslwiki上找到一个关于如何使用这些的非常完整的例子——它甚至使用AES加密:https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption