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

AES decryption only works for first 16 characters

我正在尝试获得一个简单的 AES encrypt/decrypt 并将 c++ 用于我的计算机科学 class。它几乎完美地工作,但解密只对字符数组的前 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

程序会加密"The quick brown fox jumped over the lazy dog"就好了。但是解密时输出"The quick brown"和then随机字符。知道我做错了什么吗?

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

最好改用 EVP_* 关卡函数。您可以在 openssl wiki 上找到一个非常完整的示例,说明如何使用它们 - 它甚至使用 AES 加密:https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption