我的代码如下
unsigned char aes_key[]= "asytfuhcilejnco";
unsigned char input_data[]= "Sandeep";
unsigned char enc_buffer[sizeof(input_data)+1];
unsigned char dec_buffer[sizeof(input_data)+1];
AES_KEY enc_key,dec_key;
unsigned char iv[AES_BLOCK_SIZE];
int main()
{
memset(iv,0x00,AES_BLOCK_SIZE);
AES_set_encrypt_key(aes_key,sizeof(aes_key)*8,&enc_key);
AES_cbc_encrypt(input_data,enc_buffer,sizeof(input_data),&enc_key,iv,AES_ENCRYPT);
enc_buffer[sizeof(input_data)+1]='\0';//b
memset(iv,0x00,AES_BLOCK_SIZE);
AES_set_decrypt_key(aes_key,sizeof(aes_key)*8,&dec_key);
AES_cbc_encrypt(enc_buffer,dec_buffer,sizeof(input_data),&dec_key,iv,AES_DECRYPT);
dec_buffer[sizeof(input_data)+1]='\0';//a
cout<<"input_data="<<input_data<<endl;
cout<<"enc_buffer="<<enc_buffer<<endl;
cout<<"dec_buffer="<<dec_buffer<<endl;
}
我使用input_data作为要加密的数据。 2缓冲区enc_buffer和dec_buffer来保存加密和解密的数据。但是,当我运行以下程序时,缓冲区不会显示与原始输入数据匹配的解密数据。如果我对这些行进行注释&#34; a&#34;和&#34; b&#34;加密和解密的数据值匹配。但在这种情况下,原始数据显示在加密数据中。
程序输出
input_data=Sandeep
enc_buffer=X��8��Ȏ
dec_buffer=2���yT�
用a和b评论
的程序输出input_data=Sandeep
enc_buffer=X��8��Ȏ��Yٔ�iSandeep
dec_buffer=Sandeep
答案 0 :(得分:2)
AES是一种块加密算法。因此enc_buffer
必须声明如下
unsigned char enc_buffer[AES_BLOCK_SIZE];
大小必须乘以AES_BLOCK_SIZE
并且大于或等于输入数据的大小。
您不必为零保留位置,并将零插入enc_buffer
的末尾。它将包含二进制数据,而不是字符串图表,因此无法打印cout << enc_buffer
。如果你想打印它,你必须考虑如何转储二进制数据,可能是十六进制或base64格式。