从 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 = 2
和 M = 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...
我正在查看有关如何在平台上验证 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 = 2
和 M = 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...