就在做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加密的时候,出现一个关于密钥的长度问题相关推荐

  1. AES加密补位填充的一个问题

    AES加密支持多种填充方式,NoPadding,PKCS5Padding,ISO10126Padding,ZerosPadding,PKCS7Padding. 其中PKCS7Padding 就是数据个 ...

  2. javascript 解密_Javascript中的AES加密和Java中的解密

    javascript 解密 AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本,例如密码,然后将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加 ...

  3. Javascript中的AES加密和Java中的解密

    AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本(例如密码)并将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台(例如Andr ...

  4. 带偏移量的AES加密工具

    自定义的一个对称加密工具类AESUtil.java public static final String ENCRYPTION_ALGORITHM = "AES";public s ...

  5. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  6. Android AES加密解密

    AES加密算法模式有四种:ECB.CBC.CFB.OFB 要想AES加密,至少需要一个16位的密钥,如果是非ECB模式的加密,至少还得需要密钥偏移量. 下面是AES在线加密解密链接: AES在线加密解 ...

  7. Java中的AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  8. 每日一课 | AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  9. Android中的AES加密-下

    本文为笔记,记录,写记录后为了方便查阅也为了能更好的记住 参考 什么是AES算法? 前言 本章主要是针对AES加密的原理过程进行梳理.不在于细节,了解各个参数和类的功能来帮助我们再加密是更好的选择如何 ...

最新文章

  1. R语言基于线性回归(Linear Regression)进行特征筛选(feature selection)
  2. linux中的读目录,在linux中读取目录内容
  3. 从零开始搭建spring-cloud(2) ----ribbon
  4. atom 安装 xdebug 调试 php 代码
  5. numa节点_极致性能(1):以NUMA为起点
  6. thinkphp中表有前缀名的时候申明模板的方法
  7. 在进行了解JAVA CLASS文件解析时必须要明白的三个概念
  8. Flex与Ruby通过socket实现通简易文本聊天
  9. 为了项目上线而加班,真有必要吗?
  10. android 10.0 SystemUI 状态栏下拉快捷添加截图快捷开关
  11. 古风系统仙侠文推荐_古风系统仙侠文推荐_不容错过仙侠文强推:文笔超好,挑灯夜读系列,看完顿觉书荒......
  12. python自学行吗知乎_怎么自学python,大概要多久?
  13. CCF CSP 认证相关
  14. Dubbo+zookeeper
  15. java编写水数仙花,【360高手联盟-小仙】【JAVASE编程基础】02-JAVA程序的基本结构和基础语法...
  16. 树莓派3B+ 编译Qt源码
  17. Android自定义控件实现圆形图片
  18. Transformer五部曲
  19. java高级用法之:在JNA中使用类型映射
  20. 半路出家,JAVA两年工作生涯。

热门文章

  1. jquery时间计时器
  2. 华为预装国产系统UOS开箱实录,mac看了沉默,Windows见了落泪...(附镜像下载)...
  3. LINUX系统ORACLE11G 64位安装文件,非官方下载,不需要登录ORACLE账户linux.x64_11gR2_database
  4. 聊下2023年的计划
  5. SNM2无法编辑HostGroup项
  6. 8145v5 参数_参数估计
  7. 图文 Win10更改驱动器号的设置方法 ?windows10怎么改E盘变D盘呢?改盘符的方法及教程
  8. Chrome浏览器相关配置记录——打造属于你的高生产力浏览器!
  9. 电机控制基础 --- (2)
  10. 蓝牙信号传到服务器,蓝牙数据接收服务器