Hash 面向SHA1位的测试向量在openssl下给出错误摘要

Hash 面向SHA1位的测试向量在openssl下给出错误摘要,hash,openssl,cryptography,sha1,Hash,Openssl,Cryptography,Sha1,所以我访问了这个测试向量列表来测试SHA1实现的有效性(您可以在 大多数测试向量称为“短”(因为它们的大小小于块大小),通过。然而,对于所有的长测试向量,openssl输出的摘要与预期的不同 例如: Msg = d372b4bf97daa3be77e0d78c123c7bb39dde10c82824c83f2250308320391247da419a167686b7320a5dc49b5cfc686eec76bb7034edaaeb2e029cb91791569e739c1bdb518418ff

所以我访问了这个测试向量列表来测试SHA1实现的有效性(您可以在

大多数测试向量称为“短”(因为它们的大小小于块大小),通过。然而,对于所有的长测试向量,openssl输出的摘要与预期的不同

例如:

Msg = d372b4bf97daa3be77e0d78c123c7bb39dde10c82824c83f2250308320391247da419a167686b7320a5dc49b5cfc686eec76bb7034edaaeb2e029cb91791569e739c1bdb518418ffd07f0001e0

Expected MD = c60a02fffa45deccb075e386be3aa9313c2df4f2

Openssl output = 77 2d ff f3 54 31 2c df 93 e1 94 2f 10 91 f7 f8 78 61 91 c1
注意:测试向量用于面向位的实现。我的理解是,这种实现可以计算大小不一定是字节倍数的消息摘要


有人知道为什么会发生这种情况吗?

您回答了自己的问题,您正在尝试验证位模式,但OpenSSL只支持字节模式。或者,至少,他们只获得过字节模式的FIPS CAVP证书:

如果您需要一个已认证为提供位值正确答案的库,请在该列表中搜索“SHA-1(位)”。有几个,不知道其中有多少是可消费的API


或者,字节对齐数据。

您回答了自己的问题,尝试验证位模式,但OpenSSL仅支持字节模式。或者,至少,他们只获得过字节模式的FIPS CAVP证书:

如果您需要一个已认证为提供位值正确答案的库,请在该列表中搜索“SHA-1(位)”。有几个,不知道其中有多少是可消费的API


或者,字节对齐您的数据。

因此,对于您的评论,我认为使用NIST测试向量时输出的关键区别在于,在进行面向位的输出时,指定的长度非常重要。对于面向字节的输出,如果NIST消息是
98
,您可以确信SHA算法的正确输入是字节
b10011000
。但是,如果它是面向位的,它可能具有
len=6
,例如,在这种情况下,算法的正确输入是
b100110
。或
len=7
b1001100

因此,对于您的评论,我认为使用NIST测试向量时输出的关键区别在于,在进行面向位的输出时,指定的长度非常重要。对于面向字节的输出,如果NIST消息是
98
,您可以确信SHA算法的正确输入是字节
b10011000
。但是,如果它是面向位的,它可能具有
len=6
,例如,在这种情况下,算法的正确输入是
b100110
。或
len=7
b1001100

是的,我明白了,谢谢你的澄清。但我不太明白为什么使用仅位实现散列的D372B4BF97DAA3BE77E0D78C123C7BB39DDE1082824C83F2250308320391247DA419A167686B7320A5DC49B5CFC68EEC76BB7034EDAEB2E029CB91791569E739C1BDB518418FFD07F0001E0和仅一个字节的实现之间会有区别?这不是和这里描述的相同的过程吗?换句话说,应用于相同任意长度输入的纯位实现的摘要和纯字节实现的摘要之间有什么区别?是的,我明白了,谢谢澄清。但我不太明白为什么使用仅位实现散列的D372B4BF97DAA3BE77E0D78C123C7BB39DDE1082824C83F2250308320391247DA419A167686B7320A5DC49B5CFC68EEC76BB7034EDAEB2E029CB91791569E739C1BDB518418FFD07F0001E0和仅一个字节的实现之间会有区别?这不是和这里描述的相同的过程吗?换句话说,应用于相同任意长度输入的纯位实现的摘要与纯字节实现的摘要之间有什么区别?
SHA-1    (BYTE-only)
SHA-224  (BYTE-only)
SHA-256  (BYTE-only)
SHA-384  (BYTE-only)
SHA-512  (BYTE-only)