DES加密中不同密钥加密出来的内容一样,解密也一样,为什么?
明文为:QKCXRHFAZMGVUHQN
密钥:PPPPPPPPPPPPPPPP 或者 QQQQQQQQQQQQQQQQ
采用DESede/ECB/NoPadding 进行加密
加密后密转换为16进制 密文为:AAEAAF2DABDE20366516B2734EFBB967
该过程中可以把P和Q随意替换,密文不变。
请问有知道这是为什么的吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(15)
@LiYong_Luke 是对的
@LiYong_Luke 是对的
回复
@120011676 : 96
DES的密钥是64位,它分成的8组,每一组的最后一位是校验位,因此有效密钥是56位,因此对于java,只能8个P。 太多或太少都会是Wrong key size
回复
我看错了,你是DESede, 那密码应该是24个P。因为它需要的是168位有效密钥
回复
杠上了,8P也不对,楼主也不贴他代码
回复
@120011676 : 24P,对了
你们讨论那么激烈,我试了下,楼主JavaScript吧?java不能用这个key。
Exception in thread "main" java.security.InvalidKeyException: Wrong key size
at java.base/com.sun.crypto.provider.DESedeCrypt.init(DESedeCrypt.java:69)
at java.base/com.sun.crypto.provider.ElectronicCodeBook.init(ElectronicCodeBook.java:95)
at java.base/com.sun.crypto.provider.CipherCore.init(CipherCore.java:591)
at java.base/com.sun.crypto.provider.CipherCore.init(CipherCore.java:467)
at java.base/com.sun.crypto.provider.DESedeCipher.engineInit(DESedeCipher.java:166)
at java.base/javax.crypto.Cipher.implInit(Cipher.java:870)
at java.base/javax.crypto.Cipher.chooseProvider(Cipher.java:932)
at java.base/javax.crypto.Cipher.init(Cipher.java:1302)
at java.base/javax.crypto.Cipher.init(Cipher.java:1239)
at DESedeTest.ec(DESedeTest.java:41)
at DESedeTest.main(DESedeTest.java:13)
Process finished with exit code 1
该答案为正解,事后我自己研究了下,DES加密算法,第八位及其八的倍数位为校验位。
因为P和Q的二进制码仅仅是最后一位不同,P是1010000 Q是1010001 ,而标准的DES加密,密钥的是7位密钥+1位校验码,而加密的时候直接忽略了加密密钥的校验位,所以这样加密密钥是一样的了,当然密文也一样了。
类似的,你还可以使用bbbbbbbb cccccccc 两组密码加密密文也是一样的,因为b 是1100010 c是1100011
可怕
这个网站上没有无填充模式
你这是有填充的,我那是无填充的
这个网站是有填充的,我那个是无填充的
不是这样啊http://tool.chacuo.net/cryptdes