2

MessageDigest 类实现了 SHA-1 算法(以及许多其他算法)。SHA-1 算法允许使用不同的“种子”或初始摘要。请参阅SHA-1 伪代码

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

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替代初始种子。)

4

3 回答 3

1

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

于 2010-08-04T16:59:40.190 回答
1

我建议对 MessageDigest 系列散列函数使用盐而不是种子。例如,通过将盐字节添加到输入中来应用盐。

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

于 2011-01-19T06:31:20.190 回答
0

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

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

于 2010-10-21T00:33:27.093 回答