You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Haskell Crypton生成与OpenSSL一致的HMAC?

问题解决:crypton生成的HMAC与openssl输出不一致

核心原因

echo命令默认会在输出末尾追加换行符(\n),这导致openssl实际处理的输入是"TheMessage\n",而你的Haskell代码里传入的是不含换行的"TheMessage",两者输入数据不一致,最终HMAC结果自然不同。

验证与修正方案

1. 调整openssl命令匹配Haskell代码结果

使用echo -n参数禁止添加换行符,此时openssl的输出会和你当前Haskell代码的结果一致:

$ echo -n "TheMessage" | openssl dgst -sha256 -mac HMAC -macopt key:"TheKey"
SHA2-256(stdin)= 39c17c48adbc2ea4d469af9ecb2569f921053843af2a0a7716b7a180b0cedff6

2. 修改Haskell代码匹配openssl默认行为

如果要让crypton的结果和原openssl命令输出一致,只需给输入字符串加上换行符:

ghci> hmacGetDigest ( hmac ("TheKey" :: ByteString) ("TheMessage\n" :: ByteString) :: HMAC SHA256 )
7b2e5669f4a5fa30a3fa0e9147f8975883cddff77725c99a6db07395b9665974

总结

HMAC是基于输入数据的哈希运算,只要两端输入的字节流完全一致,就能得到相同的结果。注意echo的默认换行行为,是这类跨工具结果不一致的常见诱因。

内容的提问来源于stack exchange,提问作者Sergiu Starciuc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:17:02