关闭

在测试aes加密的时候,出现一个关于密钥的长度问题

13864人阅读 评论(0) 收藏 举报

就在做aes加解密的时候,密钥的长度还必须是32位长度的看看下面的代码:

int Test(char *in_data, char *out_data, char *aes_decrypt_key, int encrypt_chunk_size = 16)
{
	if (strlen((char *)aes_decrypt_key) == 0)
	{
		return 1;
	}

	unsigned char aes_keybuf[32];
	memset(aes_keybuf, 0, sizeof(aes_keybuf));
	strcpy((char *)aes_keybuf, aes_decrypt_key);
	AES_KEY aeskey;
	AES_set_decrypt_key(aes_keybuf, 256, &aeskey);

// 	unsigned char *aes_keybuf = new unsigned char[strlen(aes_decrypt_key)];
// 	memset(aes_keybuf, 0, strlen(aes_decrypt_key));
// 	strcpy((char *)aes_keybuf, aes_decrypt_key);
// 	AES_KEY aeskey;
// 	AES_set_decrypt_key(aes_keybuf, 256, &aeskey);

	AES_decrypt((unsigned char *)in_data, (unsigned char *)out_data, &aeskey);

	return 0;
}

在测试的时候,把注释那段打开,你会发现,这是解密不成功的,因为密钥这里才9位+'\0'。所以数据会不对。


即使你在加密部分也是使用非32的密钥,也会导致解密出现问题。所以这里应该是定死32位的一个数据长度,所以最终的字节加解密应该是这样的(当然我这里没做数组的越界处理,如果正式应用应该进行截断的):

// 对所输入的in_data字节大小进行aes加密,不做ou_data的长度检测,确保调用的时候长度合理
int AesEncryptBytes(const unsigned char* in_data, unsigned char* out_data, 
					const char* aes_encrypt_key, int in_data_chunk_size = 16)
{
	if (strlen((char *)aes_encrypt_key) == 0)
	{
		return 1;
	}

	unsigned char aes_keybuf[32];
	memset(aes_keybuf, 0, sizeof(aes_keybuf));
	strcpy((char *)aes_keybuf, aes_encrypt_key);
	AES_KEY aeskey;
	AES_set_encrypt_key(aes_keybuf, 256, &aeskey);

	AES_encrypt(in_data, out_data, &aeskey);

	return 0;
}


// 对所输入的in_data字节大小进行aes解密,不做ou_data的长度检测,确保调用的时候长度合理
int AesDecryptBytes(const unsigned char* in_data, unsigned char* out_data, 
					const char* aes_decrypt_key, int in_data_chunk_size = 16)
{
	if (strlen((char *)aes_decrypt_key) == 0)
	{
		return 1;
	}

	unsigned char aes_keybuf[32];
	memset(aes_keybuf, 0, sizeof(aes_keybuf));
	strcpy((char *)aes_keybuf, aes_decrypt_key);
	AES_KEY aeskey;
	AES_set_decrypt_key(aes_keybuf, 256, &aeskey);

	AES_decrypt(in_data, out_data, &aeskey);

	return 0;
}


2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1248632次
    • 积分:12633
    • 等级:
    • 排名:第1135名
    • 原创:206篇
    • 转载:133篇
    • 译文:0篇
    • 评论:433条
    最新评论