从 SHA1 消息中获取消息摘要

Getting Message Digest from SHA1 message

我正在查看有关如何在平台上验证 SHA1 实施的页面:http://csrc.nist.gov/groups/STM/cavp/secure-hashing.html#sha-1

所以我打开文件并查看测试值:https://pastebin.com/SL4WaAtM它有数千行,但这是开始(面向位的实现)。

我关注第一个值:

Len = 2
Msg = 40
MD = ec6b39952e1a3ec3ab3507185cf756181c84bbe2

我的理解是,使用 openssl 的消息将获得 MD,但是我没有获得与上面相同的 MD?

 echo -n "40" | xxd -r -p | openssl dgst -sha1 
 (stdin)= 9a78211436f6d425ec38f5c4e02270801f3524f8

关于我做错了什么的任何想法?其他值也不匹配。

您对数据的解释不正确。 Len 是消息中 的数量。通过在命令行上与 openssl 交互,您(据我所知)仅限于处理整个字节。

因此,例如 Len = 2M = 40 意味着您应该散列 0x40 (=01) 的前两位而不是整个字节 (01000000).在命令行上,我认为不可能向 openssl 提供长度不是 8 位倍数的位流,因此如果要执行此操作,则必须直接与 ssl 库代码进行交互。

但是,您可以测试长度为 8 位的倍数的位模式:

0 bits:
echo -ne "" | openssl sha1
(stdin)= da39a3ee5e6b4b0d3255bfef95601890afd80709

8 bits:
echo -ne "\x5d" | openssl sha1
(stdin)= 4ff447b8ef42ca51fa6fb287bed8d40f49be58f1

16 bits:
echo -ne "\x53\xa1" | openssl sha1
(stdin)= c9066463926e470db1ba15cbd06e614dbf0bc9a7

etc...