gpt4 book ai didi

Java/Clojure BouncyCaSTLe 报告 key 大小错误,但 key 大小正确

转载 作者:行者123 更新时间:2023-11-30 03:23:16 25 4
gpt4 key购买 nike

我正在尝试使用 ISO9797 Alghrythm 3 生成 MAC。我在 Clojure 中执行此操作,但我想我在这里遇到了更多 Java 问题。我运行这段代码:

(defn mac2 [key message]
(let [engine (org.bouncycastle.crypto.engines.DESedeEngine.)
mac (org.bouncycastle.crypto.macs.ISO9797Alg3Mac. engine)
bytes (byte-array (.getMacSize mac))
key (->bytes key)
msg (->bytes E-IFD)]
(prn key (count key))
(.init mac (org.bouncycastle.crypto.params.DESedeParameters. key))
(.update mac msg 0 (count msg))
(.doFinal mac bytes 0)
(->hex-string bytes)))

并获取此输出(异常在 (.init mac ...) 处抛出:

#<byte[] [B@65e47e28> 16
IllegalArgumentException key size must be 16 or 24 bytes. org.bouncycastle.crypto.engines.DESedeEngine.init (:-1)

现在您看到了,prn ist 打印了 key 长度,即 16。但 BouncyCaSTLe 提示说,它不是 16 或 24(将 key 更改为长度为 24 的 key 也没有帮助)

此外,当我运行此代码时,没有问题:

(defn mac1 [key message]
(let [engine (org.bouncycastle.crypto.engines.DESedeEngine.)
mac (org.bouncycastle.crypto.macs.CMac. engine)
bytes (byte-array (.getMacSize mac))
msg (->bytes E-IFD)]
(.init mac (org.bouncycastle.crypto.params.DESedeParameters. (->bytes key)))
(.update mac msg 0 (count msg))
(.doFinal mac bytes 0)
(->hex-string bytes)))

最佳答案

好吧,我在这里发布工作代码。问题是我传递的是 org.bouncycaSTLe.crypto.engines.DESedeEngine 而不是 org.bouncycaSTLe.crypto.engines.DESEngine

org.bouncycaSTLe.crypto.macs.ISO9797Alg3Mac 将 key 分成 3 部分,然后将第一个传递到其引擎。因此,尽管原始 key 的大小正确,但 DESedeEngine 报告了错误的 key 大小。

(defn mac2 [key message]
(let [engine (org.bouncycastle.crypto.engines.DESEngine.)
mac (org.bouncycastle.crypto.macs.ISO9797Alg3Mac. engine)
bytes (byte-array (.getMacSize mac))
key (->bytes key)
msg (->bytes E-IFD)]
(prn key (count key))
(.init mac (org.bouncycastle.crypto.params.DESedeParameters. key))
(.update mac msg 0 (count msg))
(.doFinal mac bytes 0)
(->hex-string bytes)))

关于Java/Clojure BouncyCaSTLe 报告 key 大小错误,但 key 大小正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30820686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com