如何设置MessageDigest种子?
-
25-09-2019 - |
题
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 系列哈希函数使用盐而不是种子。例如,通过将盐字节添加到输入中来应用盐。
预先添加盐也比直接设置种子值更强大,因为除了更改哈希的内部状态之外,如果盐不是摘要块大小的倍数,那么它还会扰乱输入的对齐方式输入到哈希函数中。
不隶属于 StackOverflow