【问题标题】:How to extract salt from sha512 digest?如何从 sha512 摘要中提取盐?
【发布时间】:2015-10-13 16:21:23
【问题描述】:

我使用盐字符串“world”对密码字符串“hello”进行了编码(sha512 哈希),并将该字符串保存在一个文件中。

hex: 2b83319d3e78544e4430c4f5621968fee8b6ffa1254678b2c6fb98f7f79ff16afee2da909a7bb741488ca3bacbbf6cec8fd226c5a52eef805ea65a352e2ece8e

base64: K4MxnT54VE5EMMT1Yhlo/ui2/6ElRniyxvuY9/ef8Wr+4tqQmnu3QUiMo7rLv2zsj9ImxaUu74Beplo1Li7Ojg== 

现在在我的程序中,我得到了盐渍“hello”的上述编码值和新的密码字符串“hello”。我必须再次使用相同的盐对“hello”进行编码并比较输出。是否可以从上述输出中提取盐?

【问题讨论】:

  • 你还需要储存盐。请参阅 #1 相关问题:stackoverflow.com/questions/213380
  • 没有。所有加密哈希都设计为单向函数。
  • 此外,虽然您在文本文件中存储 hexbase64 编码的哈希值在技术上是正确的,但哈希值本身是不是任何东西的编码。信息丢失了——这就是重点。

标签: hash cryptography salt sha2


【解决方案1】:

您无法从哈希中检索“盐”。散列函数是一种单向函数,不能反转(只能强制)。

由于您使用的是 SHA-512 并且输出长度为 512 位(128 个十六进制编码字节),因此根本没有空间来存储盐之类的东西。当您使用诸如盐之类的附加数据创建散列时,您需要自己存储它或使用生成字符串的函数,该字符串将此类附加数据编码到输出中。

如果您要对密码或其他易于暴力破解的数据进行哈希处理,请使用此类哈希函数的多次迭代,因为仅一次迭代是不够的。对于这些用例,通常使用 PBKDF2、bcrypt 或 scrypt。

【讨论】:

    【解决方案2】:

    盐与用户密码连接时,实质上成为密码的一部分。您知道此复合密码的一部分(盐)和用户知道的部分。没有已知的方法可以从更好的哈希函数的输出中识别甚至是密码的一位或盐。对于任何外部方来说,它们应该与随机性无法区分并且不可逆。

    因此,如果您有良好的盐并且没有存储它,您将永远找不到成为密码生成复合种子的串联字符串。或者至少在没有暴力破解的情况下并非如此,这几乎需要永远完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      相关资源
      最近更新 更多