我正在嘗試按照此處指定的 CBC 模式步驟,使用內置 ECB Java 實現(xiàn)來實現(xiàn) AES-CBC 密碼。請注意,我不關心我的實現(xiàn)的實際安全性(例如,無填充或使用密鑰作為 IV)。問題是,與使用該站點相比,只有大約部分字節(jié)被正確編碼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 方法執(zhí)行填充。這種情況不應該發(fā)生:需要填充 CBC 明文,而不是饋送到 AES 密碼的塊。目前,ECB 方法返回兩個區(qū)塊而不是一個。
向量未更新。IV(初始化向量)僅與初始明文塊進行異或,之后最后一個密文塊需要與下一個明文塊進行異或。換句話說,密文塊成為下一個向量。
添加回答
舉報
0/150
提交
取消