3
我有以下的Clojure代碼:Clojure的SHA256 HMAC功能沒有產生預期的效果
(ns myproject.hmac-sha256
(:import (javax.crypto Mac)
(javax.crypto.spec SecretKeySpec)))
(defn secretKeyInst [key mac]
(SecretKeySpec. (.getBytes key) (.getAlgorithm mac)))
(defn toString [bytes]
"Convert bytes to a String"
(String. bytes "UTF-8"))
(defn sign [key string]
"Returns the signature of a string with a given
key, using a SHA-256 HMAC."
(let [mac (Mac/getInstance "HMACSHA256")
secretKey (secretKeyInst key mac)]
(-> (doto mac
(.init secretKey)
(.update (.getBytes "UTF-8")))
.doFinal
toString)))
當我在REPL使用sign
功能,奇怪的符號,是輸出:
(sign "key" "The quick brown fox jumps over the lazy dog")
"*��`��n�S�F�|�؏�o�r���"
,而我是預計f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
根據https://en.wikipedia.org/wiki/Hash-based_message_authentication_code#Examples_of_HMAC_.28MD5.2C_SHA1.2C_SHA256.29
這無疑是一個字符串編碼問題,但我對編碼並不十分了解。誰能幫忙?
檢查由.getBytes產生的實際字節,並使用哪個填充。 – 2013-03-16 00:17:32