首页
社区
课程
招聘
[求助]zlib压缩输出的字符串中间有0字节如何让AES256_EBC模式加密不丢失信息?
发表于: 2013-1-5 13:49 6884

[求助]zlib压缩输出的字符串中间有0字节如何让AES256_EBC模式加密不丢失信息?

2013-1-5 13:49
6884
zlib压缩输出的字符串中间有0字节,以它作为明文用AES256_EBC模式加密,0字节之后的部分会丢失,即用AES解密出来的明文只有0字节前面的部分(都是用算法库的标准算法)。如何处理才能加密不丢失信息呢?求行家帮助。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 364
活跃值: (61)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
base64后再AES
2013-1-5 15:58
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
3
zlib压缩后输出的不是字符串,是二进制,当然有0
你按照字符串长度去计算,0就是字符串结尾
AES支持二进制加密,用zlib压缩后大小去加密
2013-1-5 19:03
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
谢谢两位的解答。是我没表述清楚,我要提的问题不是ANSI串,而是HEX串。是要根据ANSI串由zlib压缩成二进制码,再将该二进制码直接加密(不想经过base64编码),所以才面临00字节的问题。我对AES还不是很熟,EBC模式加密都是遇00字节就结束的吗?(不考虑填充,因为是在分析一个软件,填充结果就不符了。原软件也可能是编码了,但我还没有发现)
2013-1-5 22:12
0
雪    币: 144
活跃值: (30)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
AES加密不管你的加密底码是否有0x00。造成这个问题的原因是你取的底码长度错误,估计你是用取字符串长度的函数来获取的加密底码长度,而取字符串长度的函数遇到0x00就认为字符串结束了。所以你的AES加密输入长度那个参数应该取完整的压缩长度。就解决问题了。
2013-1-6 10:32
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
楼上说的对,是我粗心了,因00字节碰巧出现在明文最后一个128位分组中,加密后再解密时,没有按加密前的实际长度而是用strlen取最后一组的解密出来的明文,误以为丢失信息了!后来OD重新验证加密时也误用strlen取字符分组又没有将00字节后的内容复制到分组中加密,所以看到看到解密的结果确实丢失信息了。从此看出加密前字节的长度在加密和解密中都要保持一致作为控制数,正是这点我忽视了。再次感谢各位的解释!

回过头来看,海风大哥说的也是对的,只是我开始未能理解好“用zlib压缩后大小去加密”这句话的意思。
2013-1-7 00:59
0
游客
登录 | 注册 方可回帖
返回
//