c++-C++ openssl aes加密失败

问题描述

C++ openssl aes加密失败

我在使用openssl的aes(cbc)加密字节超过96的字符串后,在解密就会少字符,下面是我写的代码,求大神指点下什么问题,AES一次加密的明文是有长度限制么?
CooloiAES::CooloiAES()
: MSG_LEN(0)
{
for(int i = 0; i < AES_BLOCK_SIZE; i++)
{
key[i] = 32 + i;
}
}

CooloiAES::~CooloiAES()
{

}

std::string CooloiAES::aes_encrypt(std::string msg)
{
int i = msg.size() / 16;
MSG_LEN = ( i + 1 ) * 16;

//MSG_LEN = msg.size() + 16;

char in[MSG_LEN];
char out[MSG_LEN];
memset((char*)in,0,MSG_LEN);
memset((char*)out,0,MSG_LEN);

//strncpy((char*)in,msg.c_str(),msg.size());
//memcpy((char*)in,msg.data(),msg.size());
strcpy((char*)in,msg.c_str());

unsigned char iv[AES_BLOCK_SIZE]; //加密的初始化向量
for(int j = 0; j < AES_BLOCK_SIZE; ++j)
{
    iv[j] = 0;
}

AES_KEY aes;
if(AES_set_encrypt_key((unsigned char*)key, 128, &aes) < 0)
{
    return NULL;
}
size_t len = strlen(in);

std::cout << "LEN ::::: " << len << std::endl;

AES_cbc_encrypt((unsigned char*)in,(unsigned char*)out,len,&aes,iv,AES_ENCRYPT);

std::string encrypt_msg(&out[0],&out[MSG_LEN+16]);
for(int i= 0;out[i];i++){
    printf("%x",(unsigned char)out[i]);
    //std::cout << dstStringTemp[i];
}
std::cout << std::endl;
return encrypt_msg;

}

std::string CooloiAES::aes_decrypt(std::string msg)
{
MSG_LEN = msg.size();

char in[MSG_LEN];
char out[MSG_LEN+16];
memset((char*)in,0,MSG_LEN);
memset((char*)out,0,MSG_LEN+16);

//strncpy((char*)in,msg.c_str(),msg.size());

memcpy((char*)in,msg.data(),msg.size());

for(int i= 0;in[i];i++){
    printf("%x",(unsigned char)in[i]);
    //std::cout << dstStringTemp[i];
}
std::cout << std::endl;

unsigned char iv[AES_BLOCK_SIZE]; //加密的初始化向量
for(int j = 0; j < AES_BLOCK_SIZE; ++j)
{
    iv[j] = 0;
}

AES_KEY aes;
if(AES_set_decrypt_key((unsigned char*)key, 128, &aes) < 0)
{
    return NULL;
}
//int len = msg.size();
size_t len = strlen(in);
AES_cbc_encrypt((unsigned char*)in,(unsigned char*)out,len,&aes,iv,AES_DECRYPT);
std::string decrypt_msg = out;
return decrypt_msg;

}


解决方案

本文转自http://yuanshuilee.blog.163.com/blog/static/21769727520140942826137/

openssl之aes加密(AES_cbc_encrypt 与 AES_encrypt 的编程案例)??
2014-01-09 16:28:26|??分类:

软件安全以及传输 |举报
|字号?订阅

续前几天的一篇......
答案就在这里:openssl之aes加密

解决方案二:

受到密钥长度。最好分组加密

时间: 2024-08-18 02:13:11

c++-C++ openssl aes加密失败的相关文章

ios-IOS openssl AES加密是乱码

问题描述 IOS openssl AES加密是乱码 我需要AES/ECB/PKCS5Padding 加密方式,但是IOS只有PKCS7Padding,我要如何才能使用PKCS5Padding?

php实现基于openssl的加密解密方法_php技巧

本文实例讲述了php实现基于openssl的加密解密方法.分享给大家供大家参考,具体如下: 通过openssl加密解密方法 1. openssl加密方法: function encrypt($id){ $id=serialize($id); $key="1112121212121212121212"; $data['iv']=base64_encode(substr('fdakinel;injajdji',0,16)); $data['value']=openssl_encrypt($

Linux 有问必答:如何修复“fatal error: openssl/aes.h: No such file or directory

Linux 有问必答:如何修复"fatal error: openssl/aes.h: No such file or directory Question:我尝试在Linux编译一个程序,但是编译失败并报了一个错,"fatal error: openssl/aes.h: No such file or directory".我该怎样安装要求的头文件并在我的Linux上解决这个问题? fatal error: openssl/aes.h: No such file or di

AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】

原文:AES加密CBC模式兼容互通四种编程语言平台[PHP.Javascript.Java.C#] 由于本人小菜,开始对AES加密并不了解,在网络上花了比较多时间查阅资料整理: 先简单从百度找来介绍: 1     密码学中的高级加密标准(Advanced Encryption Standard,AES),又称高级加密标准Rijndael加密法, 2 是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界 3 所使用.经过五年的甄选流程,高级加密标准由美国国

c# 加密-C# AES加密的问题~~~~

问题描述 C# AES加密的问题~~~~ 将从CSV文件中读取到的身份证号码加密,要求使用AES加密,加密的函数接口请调用"AES.CS"源文件. ASE.CS源文件的代码 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Thread

标准PHP的AES加密算法类

 AES是分组密钥,算法输入128位数据,密钥长度也是128位.用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列).每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与.     分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128', 'ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcrypt_list_algorithms函数查看你需要的加密算法标识.   代码如下

php中AES加密解密的例子小结

 话不多说,先放上代码,一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件) aesDemo.php:   例子,    代码如下: <?php require_once('./AES.php'); //$aes = new AES(); $aes = new AES(true);// 把加密后的字符串按十六进制进行存储 //$aes = new AES(true,true);// 带有调试信息且加密字符串按十六进制存储 $key = "this is

php实现aes加密类分享

 这篇文章主要介绍了php实现的aes加密类,代码中有使用方法,需要的朋友可以参考下  代码如下: <?php   class AESMcrypt {    public $iv = null;  public $key = null;  public $bit = 128;  private $cipher;    public function __construct($bit, $key, $iv, $mode) {   if(empty($bit) || empty($key) || e

Node.js中AES加密和其它语言不一致问题解决办法

 这篇文章主要介绍了Node.js中AES加密和其它语言不一致问题解决办法,例如和C#.JAVA语言相互通信时,需要的朋友可以参考下 例子一:   这几天被一个问题困扰着.Nodejs的AES加密和Java,C#加密出来的不一致.当然,这样就不能解密了.纠结了许久:后来还是实在不行了,看了下源代码,要不然还得继续纠结下去.网上说,通常的nodejs AES和其他语言实现不一样.好吧~~或许吧. nodejs的crypto模块.    代码如下: var crypto = require('cry