Chinaunix

标题: 求助DES加密算法在java与c之间的差别 [打印本页]

作者: week008    时间: 2007-03-08 11:30
标题: 求助DES加密算法在java与c之间的差别
  在linux下用openssl库的des算法加密 与 在windows下用java自带库的des算法加密,得到的密文最后8个字节不一样.DES算法是8字节对齐的,也就是说当明文不是8字节的倍数时,算法会自动补齐. 大家有谁知道c与java中的des算法补齐的原则吗?
作者: week008    时间: 2007-03-08 12:59
没人知道吗?大家帮帮忙啊!
作者: bGFuZ3Vl    时间: 2007-03-09 06:00
没有意义。说明实现不同。
作者: week008    时间: 2007-03-09 17:13
已经解决了,是双方调用的时候使用的策略不一样.
谢谢大家!!
作者: okyzx    时间: 2007-03-09 17:52
呵呵来晩了
作者: tmpcc    时间: 2007-12-11 23:27
我也遇到这个问题,还没有找到原因,lz现身来解释下?
作者: cugb_cat    时间: 2007-12-11 23:30
对齐是由标准规定的。
作者: tmpcc    时间: 2008-06-18 16:20
原帖由 week008 于 2007-3-9 17:13 发表
已经解决了,是双方调用的时候使用的策略不一样.
谢谢大家!!



是padding的方式不同,两边约定一种即可。
作者: wuqiangjun_ql    时间: 2010-10-12 10:25
楼主可否解释下最后的解决方案吗?谢谢!
作者: c/unix    时间: 2010-10-12 12:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雨夜流星    时间: 2010-10-13 12:58
回复 1# week008


    加密算法一般是根据块加密的,比如8字节,16,32字节对齐。
    好久没接触了,DES好像是56有效位+8位吧。
    当加密的最后一个分片大小不够对齐的时候,则会采用一个默认字符来补齐。比如使用“空格”来补齐。
    而不同的库可能使用的补齐字符不相同,有些可能使用空格,有些可能使用0,这样一来,相当于
    加密的字符串已经不同了,所以最后的加密结果也会不同。所以你需要先确定两个库使用的补齐字符
    是相同的

    另外解密的时候,因为加密后的结果都是按块对齐的,所以不需要再次对齐,但是解密后的结果有可能
    是加了补齐字符的,你可以通过计算md5看看是否存在这个情况,如果存在的话,则你还需要将后面补齐
    的字符去掉。
作者: 雨夜流星    时间: 2010-10-13 13:01
DES算法的提出者,好像没有给出高效的实现方法,加解密速度很慢的,不太适合使用频率高,或者加解密大文件,你可以试试AES的算法。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2