AES解密仅适用于前16个字符 我试图在计算机科学课上用C++进行简单的AES加密/解密。它几乎可以完美地工作,但解密只在字符数组的前16个字符上工作

AES解密仅适用于前16个字符 我试图在计算机科学课上用C++进行简单的AES加密/解密。它几乎可以完美地工作,但解密只在字符数组的前16个字符上工作,c++,encryption,openssl,aes,C++,Encryption,Openssl,Aes,这是我的密码: #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[] = "abcdef

这是我的密码:

#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;
}

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

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


您最好改用
EVP.*
level函数。您可以在openssl wiki上找到一个关于如何使用这些的完整示例,它甚至使用了AES加密:

可能的重复。按照引用副本中的说明使用
EVP.*
接口。不要使用
AES\u encrypt
AES\u decrypt
。如果您正在学习comp-sci类,那么您可能需要考虑设置自己的包装器,以使用低级AES\u*函数来开发自己的高级加密模式。从ECB模式开始,然后是CBC和CTR模式。这将使您更好地了解块密码是如何工作的。CTR模式也有助于理解流密码。看见
 g++ Crypto.cc -L/usr/lib -lssl -lcrypto -o crypto