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