SHA-256 算法 and/or 去哈希算法

SHA-256 algorithm and/or de-hashing algorithm

我最近开始尝试学习密码学,发现了 SHA-2(尤其是 SHA-256),但我无法找到具体经过散列步骤的实际算法。如果有人有 JavaScript 的工作算法来对字符串进行 SHA-256 哈希处理,那将会很有帮助。

我知道这可能是不可能的,但我正在尝试了解 SHA-256 如何对字符串进行哈希处理,以尝试逆转 SHA-256。

注意:我知道这是最常见的安全散列形式,我绝不会试图利用这些知识进行有害行为(如果我成功的话)。

Edit1:如果可能,我希望 SHA-256 算法适合单个 .js 文件。我正在为自己将 SHA-256 实现到 Tampermonkey 脚本中,并且还想尝试学习如何反转它。

Here是SHA-256在JS中的一种实现。破解后告诉我

Sha-256 是一种单向哈希函数,这意味着它使用您的输入作为种子,returns 是固定长度的输出(在本例中为 256 位)。该算法是确定性的,并且看似随机。这意味着对于任何给定的输入,它都会 return 相同的输出,但是当进行统计测试时,输入和输出之间没有相关性。

因此,如果不使用对随机输入进行哈希处理的蛮力方法,就无法逆转 sha256 哈希。以目前的计算能力,这实际上不是一个可行的选择。

(由@Spectre 提示,我将 post 我的初始评论以及其他相关信息(提供我的@Spectre 以及 OP 本人)作为答案)


反转实际的 SHA-256 算法:不可行,也不是尝试破解给定散列密码时的绕过方法

你(几乎)不可能反转散列;哈希破解的重点是

  1. 寻找散列算法,包括盐,
  2. 然后是对可能的密码进行哈希处理并尝试将生成的哈希值与您打算 "crack" 匹配的一些哈希值的蛮力方法。

如果我们在讨论中假设所有哈希算法都是不可逆的,并且可以立即识别,那么哈希的强度将大致取决于哈希算法的复杂性;从某种意义上说,使用更复杂的散列方法(如 SHA-256)进行重新散列(在尝试字典攻击等时执行)将比使用朴素的非加盐散列算法执行重新散列的时间慢几个数量级,说无盐MD5.

粗略学习 "the hows" 没有坏处,我建议阅读这篇关于该主题的优秀 Ars Technica 文章:

还有这个优秀的security.SE问答


其他参考文献

从您的问题的评论中收集相关的附加信息(因为这些信息可能不会随时间流逝):

  1. 正如@Specte 指出的那样,一个值得访问的相关线程是:

    • Are there any SHA-256 javascript implementations that are generally considered trustworthy?
  2. 关于为什么逆向哈希算法不可行的问题,您自己指向了一个相关的security.SE线程:

我最近使用 crypto-js/sha256。 您可以通过以下命令使用 nodejs 安装它:

npm install --save crypto-js