2015-06-13 1 views
1

Я пытаюсь сгенерировать MAC с помощью ISO9797 Alghrythm 3. Я делаю это в Clojure, но я предполагаю, что у меня больше проблемы с Java Вот. Я запускаю этот код:Java/Clojure BouncyCastle сообщает о неправильном размере ключа, но размер ключа правильный

(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 макинтош ...):

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

Теперь вы видите, печать ргп IST положить кнопочная длина которого равна 16. Но BouncyCastle жалуется, что это не 16 или 24 (изменение ключа на клавишу с длиной 24 тоже не помогает)

Также, когда я запускаю этот код, нет проблемы :

(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))) 

ответ

2

Хорошо, я размещаю рабочий код здесь. Проблема заключалась в том, что я пропускал org.bouncycastle.crypto.engines.DESedeEngine вместо org.bouncycastle.crypto.engines.DESEngine.

org.bouncycastle.crypto.macs.ISO9797Alg3Mac разделяет ключ на 3 части и передает затем первый его двигатель. Следовательно, DESedeEngine сообщает о неправильном размере ключа, хотя исходный ключ имел нужный размер.

(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))) 
Смежные вопросы