我想知道,什么方法相当于Ruby中的HMAC :: SHA256.hexdigest?我跑过http://hackage.haskell.org/package/SHA-1.6.4.1/docs/Data-Digest-Pure-SHA.html,但很难搞清楚。在Ruby中,它可以用作:
HMAC::SHA256.hexdigest(secret, nonce.to_s +client_id + api_key)
答案 0 :(得分:6)
此示例代码有效:
{-# LANGUAGE OverloadedStrings #-}
import Data.Digest.Pure.SHA
main = do
let a = sha256 "some test message"
b = hmacSha256 "key" "some test message"
mapM_ print [showDigest a, showDigest b]
ghci中的演示:
λ> main
"3cb0603701548a84d3e7408a805e270a094000f537b96a6e83a36271a3ff192f"
"a5a36db81683537aacf8b6283121ffdb949ece609abbfe8a5fbc91cc76031edd"
答案 1 :(得分:2)
您也可以使用crypto-api中的Crypto.HMAC
:
Crypto.Hash.CryptoAPI Crypto.HMAC> hmac (MacKey "hello") "goodbye" :: SHA512
SHA512 "V]\163\146\166M\199\DLE\201\&5\163\DC17LF\246\150>\141\\*\197Q\198\203\233\235\&1&\b\245\SI\172Zc.\243\218\243\&9\224\172\215y\179|\240L\137\192M \167f\246\235\FS\188\231P(\245\ETXZ"
编辑:完全相同的代码可以为其他哈希产生HMAC,这要归功于所使用的函数是多态的。例如:
> simpleHex $ encode (hmac (MacKey "hello") "goodbye" :: SHA256)
"81 48 a0 89 d1 69 a8 9a 3e f0 b2 2a 6e b9 ab c1 d5 7e 70 73 a7 37 c9 0a 03 78 cf 2c 4e 39 94 de"
(注意cereal
包的可选但非常好的编码使用和simple-hex
的十六进制输出