为了账号安全,请及时绑定邮箱和手机立即绑定

Kotlin 使用内置 ECB Java 实现来实现 AES-CBC

Kotlin 使用内置 ECB Java 实现来实现 AES-CBC

蝴蝶刀刀 2024-01-28 17:32:18
我正在尝试按照此处指定的 CBC 模式步骤,使用内置 ECB Java 实现来实现 AES-CBC 密码。请注意,我不关心我的实现的实际安全性(例如,无填充或使用密钥作为 IV)。问题是,与使用该站点相比,只有大约部分字节被正确编码PKCS5Padding。Key:              mvLBiZsiTbGwrfJBInput:            abcdabcdabcdabcdMy result:        e9qdKeY1m4OAIsPerfnUi5F35z814ywucLJKKi4rTP8=Result from site: e9qdKeY1m4OAIsPerfnUi9jNsRJtdELZliFtebuJrrc=Key:              mvLBiZsiTbGwrfJBInput:            abcdabcdabcdabcdabcdabcdabcdabcdMy result:        e9qdKeY1m4OAIsPerfnUi5F35z814ywucLJKKi4rTP8=uf5VPLwumm+66ESiQMlKXJF35z814ywucLJKKi4rTP8=Result from site: e9qdKeY1m4OAIsPerfnUi7I+cPTpraAgZIQvr8OLf7Iu4eKRG1MIcq5yQGsRt3PS对于NoPadding选项:Key:              mvLBiZsiTbGwrfJBInput:            abcdabcdabcdabcdMy result:        e9qdKeY1m4OAIsPerfnUiw==Key:              mvLBiZsiTbGwrfJBInput:            abcdabcdabcdabcdabcdabcdabcdabcdMy result:        e9qdKeY1m4OAIsPerfnUiw==uf5VPLwumm+66ESiQMlKXA==另外,解密根本不起作用,因为PKCS5Padding我有例外:Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher    at java.base/com.sun.crypto.provider.CipherCore.prepareInputBuffer(CipherCore.java:1005)    at java.base/com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:848)    at java.base/com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)    at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)    at AesEcb.decrypt(AesEcb.kt:27)    at AesEcb.decryptToByteArray(AesEcb.kt:36)    at AesCbcOwn.decrypt(AesCbcOwn.kt:32)
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

您编程的 ECB 方法执行填充。这种情况不应该发生:需要填充 CBC 明文,而不是馈送到 AES 密码的块。目前,ECB 方法返回两个区块而不是一个。

向量未更新。IV(初始化向量)仅与初始明文块进行异或,之后最后一个密文块需要与下一个明文块进行异或。换句话说,密文块成为一个向量。


查看完整回答
反对 回复 2024-01-28
  • 1 回答
  • 0 关注
  • 41 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信