代码之家  ›  专栏  ›  技术社区  ›  Thomas Matthews

如何设置MessageDigest种子?

  •  2
  • Thomas Matthews  · 技术社区  · 15 年前

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

    算法初始化变量或种子:

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

    但是,messagedigest类,如 Online Java Manual ,不提供设置这些初始变量的API。实际上,它并没有说明初始变量的值。

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

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

    3 回复  |  直到 12 年前
        1
  •  1
  •   Michael Konietzka    15 年前

    你在哪里看到的需要一个种子在一个沙-1消化?通常在需要随机数源的加密算法中,种子是“需要的”。但在sha-1中,甚至根本不使用随机数,所以没有种子或初始向量可供设置。您提到的变量是“硬”(常量),它们是算法的一部分,不需要或不使用来更改h0-4的值。

        2
  •  1
  •   Thomas Matthews    14 年前

    不能用初始种子提供Java函数。

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

        3
  •  1
  •   Jeffrey Hantin    14 年前

    我建议对messagedigest家族散列函数使用salt而不是seed。例如,salt是通过预先将salt字节添加到输入来应用的。

    预处理salt也比直接设置seed值更强大,因为除了更改哈希的内部状态之外,如果salt不是摘要块大小的倍数,那么它还可能干扰输入被送入哈希函数的对齐方式。