如何设置MessageDigest种子?

时间:2010-08-04 16:18:13

标签: java sha1 seed message-digest

MessageDigest类实现SHA-1算法(以及许多其他算法)。 SHA-1算法允许使用不同的“种子”或初始摘要。见SHA-1 Psuedocode

算法初始化变量或种子:

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

然而,如Online Java Manual中所述,MessageDigest类不提供用于设置这些初始变量的API。实际上,它没有说明初始变量的值。

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

Java中SHA-1的示例在哪里,使用初始种子
(我正在寻找SHA-1实现,除非该示例使用MessageDigest和另一个初始种子。)

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Java函数无法提供初始种子。

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

答案 2 :(得分:1)

我建议在MessageDigest系列哈希函数中使用salt而不是种子。例如,通过将盐字节添加到输入端来施加盐。

预先设置salt也比直接设置种子值更强大,因为除了更改哈希的内部状态之外,如果salt不是摘要块大小的倍数,那么它也会扰乱与之对齐的对齐输入被送入哈希函数。