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
和另一个初始种子。)
答案 0 :(得分:1)
您认为在SHA-1摘要中需要种子吗?通常在需要随机数源的加密算法中,“需要”种子。但是在SHA-1中你甚至根本不使用随机数,所以没有种子或初始向量要设置。你提到的变量是'hard'(常量),它们是算法的一部分,不需要或用来改变h0-4的值。
答案 1 :(得分:1)
Java函数无法提供初始种子。
我复制了SHA-1算法的C实现并对其进行了修改以允许更改初始种子值。
答案 2 :(得分:1)
我建议在MessageDigest系列哈希函数中使用salt而不是种子。例如,通过将盐字节添加到输入端来施加盐。
预先设置salt也比直接设置种子值更强大,因为除了更改哈希的内部状态之外,如果salt不是摘要块大小的倍数,那么它也会扰乱与之对齐的对齐输入被送入哈希函数。