bob way 2015-08-28 09:36 采纳率: 27.3%
浏览 2273

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;

}


  • 写回答

2条回答 默认 最新

  • Robot-C 2015-08-28 09:40
    关注

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

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

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

    续前几天的一篇......
    答案就在这里:openssl之aes加密
    ----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

    评论

报告相同问题?

悬赏问题

  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败