DES的des_ncbc_encrypt()函数密文返回长度有问题

拜占庭里一棵草 2015-04-01 09:27:32
最近,我用openssl库里面的des_ncbc_encrypt()函数加密一个 90个字符的字符串时,发现 当我输入不同的密码时,有的时候密文返回结果还比较正常,长度是96 ,但是输入其他密码时,有的返回密文长度是14,有的是64等等, 不明白什么原因?
以下是部分代码
string DES_Encrypt(const string cleartext, const string key)  
{
string strCipherText;
DES_cblock keyEncrypt, ivec;
memset(keyEncrypt, 0, 8);

if (key.length() <= 8)
memcpy(keyEncrypt, key.c_str(), key.length());
else
memcpy(keyEncrypt, key.c_str(), 8);

DES_key_schedule keySchedule;

DES_set_odd_parity(&keyEncrypt);

DES_set_key_checked(&keyEncrypt, &keySchedule);


memcpy(ivec, cbc_iv, sizeof(cbc_iv));

int iLength = cleartext.length() % 8 ? (cleartext.length() / 8 + 1) * 8 : cleartext.length();

unsigned char* tmp = new unsigned char[iLength +16];
memset(tmp, 0, iLength);

DES_ncbc_encrypt((const unsigned char*)cleartext.c_str(), tmp, cleartext.length()+1, &keySchedule, &ivec, DES_ENCRYPT);
strCipherText = (char*)tmp;
printf("strciper_length :%d\n",(int)(strCipherText.length()));
delete [] tmp;

return strCipherText;
}


其中key是明文密码,类似于xiaoddd这个密码就不行,而xianoin就返回长度正常(96)的密文
...全文
2641 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
进击的磊磊 2015-07-15
  • 打赏
  • 举报
回复
strCipherText = (char*)tmp; 这个地方会出现字符串截断

200

社区成员

发帖
与我相关
我的任务
社区描述
讨论 Informatica 数据隐私保护相关技术
数据分析数据挖掘 技术论坛(原bbs)
社区管理员
  • 数据隐私保护社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧