【问题标题】:Getting Message Digest from SHA1 message从 SHA1 消息中获取消息摘要
【发布时间】:2017-04-28 22:29:18
【问题描述】:

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

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

我专注于第一个值:

Len = 2
Msg = 40
MD = ec6b39952e1a3ec3ab3507185cf756181c84bbe2

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

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

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

【问题讨论】:

标签: openssl cryptography sha1


【解决方案1】:

您对数据的解释不正确。 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...

【讨论】:

  • OpenSSL 的库接口也以字节为单位(8 位)工作。您需要更改代码,或编写自己的代码。这将在 SO 的范围内。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
相关资源
最近更新 更多