我正在嘗試按照此處指定的 CBC 模式步驟,使用內(nèi)置 ECB Java 實(shí)現(xiàn)來(lái)實(shí)現(xiàn) AES-CBC 密碼。請(qǐng)注意,我不關(guān)心我的實(shí)現(xiàn)的實(shí)際安全性(例如,無(wú)填充或使用密鑰作為 IV)。問(wèn)題是,與使用該站點(diǎn)相比,只有大約部分字節(jié)被正確編碼PKCS5Padding。Key: mvLBiZsiTbGwrfJBInput: abcdabcdabcdabcdMy result: e9qdKeY1m4OAIsPerfnUi5F35z814ywucLJKKi4rTP8=Result from site: e9qdKeY1m4OAIsPerfnUi9jNsRJtdELZliFtebuJrrc=Key: mvLBiZsiTbGwrfJBInput: abcdabcdabcdabcdabcdabcdabcdabcdMy result: e9qdKeY1m4OAIsPerfnUi5F35z814ywucLJKKi4rTP8=uf5VPLwumm+66ESiQMlKXJF35z814ywucLJKKi4rTP8=Result from site: e9qdKeY1m4OAIsPerfnUi7I+cPTpraAgZIQvr8OLf7Iu4eKRG1MIcq5yQGsRt3PS對(duì)于NoPadding選項(xiàng):Key: mvLBiZsiTbGwrfJBInput: abcdabcdabcdabcdMy result: e9qdKeY1m4OAIsPerfnUiw==Key: mvLBiZsiTbGwrfJBInput: abcdabcdabcdabcdabcdabcdabcdabcdMy result: e9qdKeY1m4OAIsPerfnUiw==uf5VPLwumm+66ESiQMlKXA==另外,解密根本不起作用,因?yàn)镻KCS5Padding我有例外: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貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
您編程的 ECB 方法執(zhí)行填充。這種情況不應(yīng)該發(fā)生:需要填充 CBC 明文,而不是饋送到 AES 密碼的塊。目前,ECB 方法返回兩個(gè)區(qū)塊而不是一個(gè)。
向量未更新。IV(初始化向量)僅與初始明文塊進(jìn)行異或,之后最后一個(gè)密文塊需要與下一個(gè)明文塊進(jìn)行異或。換句話說(shuō),密文塊成為下一個(gè)向量。
添加回答
舉報(bào)
0/150
提交
取消