在测试aes加密的时候,出现一个关于密钥的长度问题
2013-12-02 22:09
483 查看
就在做aes加解密的时候,密钥的长度还必须是32位长度的看看下面的代码:
在测试的时候,把注释那段打开,你会发现,这是解密不成功的,因为密钥这里才9位+'\0'。所以数据会不对。
即使你在加密部分也是使用非32的密钥,也会导致解密出现问题。所以这里应该是定死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; }
相关文章推荐
- sqlserver 数据库插入汉字变成乱码的解决方案
- Sample 4.20:ptrstr.cpp
- Sample 4.19:addpntrs.cpp
- jQuery四个核心函数详解
- 如何使用Keil仿真环境查看CPU类型字长?【worldsing笔记】
- Sample 4.18:arraynew.cpp
- [Android开发实战]Android手势密码(支付宝手势密码)实现(支持2.x)
- 数据类型数组
- Sample 4.17:use_new.cpp
- HTMLParser python usage
- apt-get正在等待报头(waiting for headers)解决方法
- Sample 4.16:init_ptr.cpp
- 结构体拾遗补缺2:结构体的位域(位段)
- Android ui utils-简单实用的Android界面工具
- 1251 Palindromes _easy version
- [PHP]如何让input表单TextBox 不保存历史记录
- 琪的弈的新博客
- Java连接DB2
- Sample 4.15:pointer.cpp
- easyui---tab实例---自动设置高度auto----tab小图标--可关闭