在测试aes加密的时候,出现一个关于密钥的长度问题
就在做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;
}
在测试aes加密的时候,出现一个关于密钥的长度问题相关推荐
- AES加密补位填充的一个问题
AES加密支持多种填充方式,NoPadding,PKCS5Padding,ISO10126Padding,ZerosPadding,PKCS7Padding. 其中PKCS7Padding 就是数据个 ...
- javascript 解密_Javascript中的AES加密和Java中的解密
javascript 解密 AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本,例如密码,然后将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加 ...
- Javascript中的AES加密和Java中的解密
AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本(例如密码)并将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台(例如Andr ...
- 带偏移量的AES加密工具
自定义的一个对称加密工具类AESUtil.java public static final String ENCRYPTION_ALGORITHM = "AES";public s ...
- aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- Android AES加密解密
AES加密算法模式有四种:ECB.CBC.CFB.OFB 要想AES加密,至少需要一个16位的密钥,如果是非ECB模式的加密,至少还得需要密钥偏移量. 下面是AES在线加密解密链接: AES在线加密解 ...
- Java中的AES加密和解密(CBC模式)
通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...
- 每日一课 | AES加密和解密(CBC模式)
通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...
- Android中的AES加密-下
本文为笔记,记录,写记录后为了方便查阅也为了能更好的记住 参考 什么是AES算法? 前言 本章主要是针对AES加密的原理过程进行梳理.不在于细节,了解各个参数和类的功能来帮助我们再加密是更好的选择如何 ...
最新文章
- 访华为5G首席科学家童文:针尖战略引领5G突破
- 【回文数】算法优化笔记
- java runtime类高级,java入门 -- RunTime类
- android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...
- python拿什么做可视化界面好_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...
- 字典树 HDU1251
- python item方法_Python中使用item()方法遍历字典的例子
- 8 下半部和推后执行的工作
- paip.提升开发效率-----vs2010源码选择字串高亮
- 史上最全ActiveX控件下载大全
- ITK VKT 安装-详细
- 搭建Hadoop HA集群
- 搭建网站的主要目的、基本步骤和技巧
- Win10 微软拼音开启小鹤双拼的两种方法
- 免费的pdf转word工具
- 英伟达显卡玩CF怎么提高帧数
- 如何利用Web of Science进行科学研究
- oracle dbms是什么意思,oracle的dbms_stats包详细解说
- 未认证公众号在文章添加链接
- 解决office2003,无法卸载也无法安装问题