2010-08-04 53 views
2

MessageDigest类实现了SHA-1算法(等等)。 SHA-1算法允许使用不同的“种子”或初始摘要。见SHA-1 Psuedocode如何设置MessageDigest种子?

该算法初始化变量,或种子:

Initialize variables: 
h0 = 0x67452301 
h1 = 0xEFCDAB89 
h2 = 0x98BADCFE 
h3 = 0x10325476 
h4 = 0xC3D2E1F0 

然而MessageDigest类,如在Online Java Manual所描述的,提供了用于设置这些初始变量无API。事实上,它没有说明初始变量的价值。

如何设置SHA-1算法的初始种子?

这是Java中SHA-1的示例,使用初始种子
(我要找的SHA-1执行,除非该示例使用MessageDigest一个替代初始种子。)

+0

viva SHA1扩展! – SDReyes 2012-08-27 22:11:09

回答

1

Java函数不能提供初始种子。

我复制了SHA-1算法的C实现,并修改它以允许更改初始种子值。

1

你在哪里看到的SHA-1摘要种子的需求?通常在需要随机数源的加密算法中,种子是“需要的”。但是在SHA-1中,根本不使用随机数,所以没有种子或初始向量来设置。你提到的变量是'硬'(常量),它们是算法的一部分,不需要或用来改变h0-4的值。

+0

我的应用程序在可执行文件上执行SHA-1。该应用程序的一个要求是允许用户设置SHA-1算法的初始种子。这允许用户验证可执行文件。 – 2010-08-04 17:38:22

+1

您可以在不更改初始种子的情况下验证散列。改变种子的动机是什么?这些常量是SHA-1算法的一部分:http://www.itl.nist.gov/fipspubs/fip180-1.htm 值得注意的是,你不应该尝试调整加密和哈希算法,而不真的真的知道你在做什么,因为你可能会有效地取消算法提供的任何安全优势。 – 2010-08-04 18:46:09

1

我推荐使用salt来代替MessageDigest家族哈希函数的种子。例如,通过将盐字节添加到输入中来应用盐。

因为除了改变哈希的内部状态之外,如果salt不是摘要块大小的倍数,它还可以干扰对齐,因为预先设置盐也比直接设置种子值更强大输入被输入散列函数。

+0

不幸的是,盐不是要求的一部分。要求具体是要能够改变种子价值。无论如何感谢这项技术。 – 2011-01-19 17:38:56