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

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

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

然而 MessageDigest 类,如 在线 Java 手册, ,没有提供用于设置这些初始变量的 API。事实上,它没有说明初始变量的值。

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

其中是 Java 中 SHA-1 的示例, 使用初始种子?
(我正在寻找 SHA-1 实现,除非示例使用 MessageDigest 具有替代的初始种子。)

有帮助吗?

解决方案 2

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

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

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top