aes256 padding-openssl aes_256_cbc加解密的问题。

问题描述

openssl aes_256_cbc加解密的问题。

小弟这里有一个程序,使用的是openssl的库函数。
使用的解密关键函数是这样:

 EVP_DecryptInit(&ctx, aes_256_cbc, key, iv);

 EVP_DecryptUpdate(&ctx, masterkey, &masterkey_len1, encrypted_masterkey, encrypted_masterkey_len);

 EVP_DecryptFinal(&ctx, masterkey + masterkey_len1, &masterkey_len2);

其中key长度为32字节,iv长度为16字节。
masterkey_len1 为32字节,encrypted_masterkey_len 为48字节。

这里我就有些不懂了,为什么加密后的长度为48字节,与加密前的不太一样。
iv长度为16字节,我是否可以理解成明文长度分组应该是16字节?
但是如果这里不是16字节,也就是明文分组进行了padding,变成了24字节。那么就有新问题,iv是16字节,如何与padding后24字节的分组进行的异或运算?

所以我对此有些不解。大致的问题分为以下3个方面:
1、openssl中aes_256_cbc的明文分组长度是多少?
2、是否进行了padding?padding的模式是哪一种?
3、为何加密长度大于了原本明文长度,也就是解密出来的明文为何会小于密文长度?

解决方案

参考:http://blog.csdn.net/yasi_xi/article/details/13997337
http://blog.csdn.net/chary8088/article/details/21124495

解决方案二:

因为加密会分组,分组长度取决于你的密钥长度,不足部分就会填充。所以加密后的字符串会大于等于加密前长度。
反过来解密字符串就会小于等于解密前字符串长度。

时间: 2024-08-02 13:27:15

aes256 padding-openssl aes_256_cbc加解密的问题。的相关文章

openssl enc 加解密

原文地址: http://blog.csdn.net/fym0121/article/details/7984733 介绍 enc - 对称加密例程,使用对称密钥对数据进行加解密,特点是速度快,能对大量数据进行处理.算法有流算法和分组加密算法,流算法是逐字节加密,数据经典算法,但由于其容易被破译,现在已很少使用:分组加密算法是将数据分成固定大小的组里,然后逐组进行加密,比较广为人知的是DES3.分组算法中又有ECB,CBC,CFB,OFB,CTR等工作模式,其中默认选CBC工作模式. 语法 op

加解密-求助:如何用openssl命令行命令生成des密钥

问题描述 求助:如何用openssl命令行命令生成des密钥 项目需要实现加解密,需要生成des密钥,不知道openssl命令该怎么写 解决方案 openssl genrsa -des3 -out client.key 1024

加密-aescbc加解密程序,调用了openssl库,在输出时为什么密文长度总是和初始向量长度一样?

问题描述 aescbc加解密程序,调用了openssl库,在输出时为什么密文长度总是和初始向量长度一样? memset(miyao, 0, 17); GetDlgItemText(hwnd,IDC_EDIT1,ivec,sizeof(ivec)); GetDlgItemText(hwnd,IDC_EDIT2,miyao,sizeof(miyao)); GetDlgItemText(hwnd,IDC_EDIT3,in,sizeof(in)); length=strlen(in); AES_set_

9999:谁有c++版des加密源代码 可以跟java版des加密库匹配 可以互相加解密

问题描述 9999:谁有c++版des加密源代码可以跟java版des加密库匹配可以互相加解密急需:万分感谢!本人在网上已经找了很多个版本,都无法跟java版des库加密出来的结果一致.最好的一个版本是:(40字节的明文(如:100@05963010591062666@013001791717991233)8位的密钥)c++加密出来密文是40个字节.java加密出来的密文是48个字节.前40个字节都是一致的.java加密调用代码如下:[DESKeySpecdks=newDESKeySpec(ra

DES 算法的 C++ 与 JAVA 互相加解密

原文地址:http://www.cnblogs.com/AloneSword/p/3479376.html 在 JAVA 中,从 J2EE1.4 开始,SUN 提供了 JCE( JAVA CRYPTO ENGINE ),其中包含有 DES 算法,在 JAVA 中使用 DES 算法的代码示例如下: import java.security.Key; import java.security.Security; import javax.crypto.Cipher; public class DES

java加解密-数字证书

一.概述   1.我们了解了对称加密算法.非对称加密算法.数字签名算法应用,他们组合起来使用就是数字证书   2.对称加密算法用来加解密数据,非对称加密算法常用来做密钥交换.数字签名算法主要用来验证数据的不可否认性   3.数字证书:对于我们来说最常见的就是银行给我们提供的数字证书,以文件下载的方式保存,或者以u盾的方式保存   4.数字证书其实就是我们非对称加密算法中存放了相关算法的公钥信息 二.模型分析     我们要制造数字证书.可以用openssl和java的keytools来获得,op

加密-求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该

问题描述 求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该 求问有什么安全性比较高的加解密算法? des, 3des这种用的很多了吧应该 解决方案 加密算法的强度不是取决于算法是否公开,而是取决于算法本身在数学上是否有解,以及密钥的强度. 所以aes这种工业级的加密算法,在相当的时间和应用范围内肯定是没有问题的. 解决方案二: 对称加密算法 对称加密算法用来对敏感数据等信息进行加密,常用的算法包括: DES(Data Encryption Standard):数据加密

C#微信公众号开发系列教程三(消息体签名及加解密)

原文:C#微信公众号开发系列教程三(消息体签名及加解密)   C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南)    距离上一篇博文已经半个月了,本来打算每两天更新一次的,但可怜苦逼码农无日无夜的加班.第一篇博文发表后,博文视点的编辑就找到我,问我想不想出版这个系列,我当时瞬间就想到了王大锤的独白,想想真的是有点小激动,后面按照那边的要求,提交了申请书,也提交了目录,可惜文笔不行,再加上最近太

使用CPU硬件指令对AES加解密进行加速

概述 AES是世界上最安全.使用广泛的加密算法,很多安全合规要求里面都明确要求使用AES算法,只是相对于3des.rc4等加密算法,速度慢了很多,幸好有了AES-NI,这是针对AES加密算法的硬件加解密CPU指令集. AES-NI的全称是:Advanced Encryption Standard New Instructions.指令集说明 更多详细的信息可以参考Intel发布的企业安全AES-NI白皮书,本文重点在目前阿里公有云上的主流机型上进行性能测试对比,用于RDS的SSL(链路加密)和T