SHA-256算法和/或去散列算法



我最近开始尝试学习密码学,发现了SHA-2(特别是SHA-256),但无法找到一个经过哈希步骤的实际算法。如果有人有一个JavaScript的工作算法,可以通过SHA-256哈希来放置字符串,那将是很有帮助的。

我知道这可能不可能,但我正在尝试学习SHA-256如何散列字符串,以便尝试反转SHA-256。

注意:我意识到这是最常见的安全哈希形式,我决不会试图利用这些知识进行有害行为(如果我成功了)。

第1版:如果可能的话,我希望SHA-256算法能放在一个.js文件中。我正在为自己将SHA-256实现为一个Tampermonkey脚本,并想尝试学习反转它。

这里是一个在JS中实现的SHA-256。当你破解它时告诉我。

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

因此,如果不使用哈希随机输入的暴力方法,就无法反转sha256哈希。就目前的计算能力而言,这并不是一个切实可行的选择。

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


反转实际的SHA-256算法:不可行,也不是试图破解给定哈希密码时的方法

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

  1. 找到包括盐的散列算法
  2. 然后是对可能的密码进行哈希处理的暴力方法,并尝试将生成的哈希与您想要"破解"的哈希进行匹配

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

粗略地学习"如何"是没有害处的,我建议阅读这篇关于主题的优秀Ars Technica文章

  • ARS技术我是如何成为密码破解者的——破解密码现在是一项正式的"脚本儿童"活动

以及这种出色的安全性。SE问答;

  • 如何安全地散列密码

其他参考资料

从对你的问题的评论中收集相关的额外信息(因为这些信息可能不会持续时间):

  1. 正如@Specte所指出的,一个值得一看的相关线程是:

    • 是否有任何SHA-256 javascript实现通常被认为是值得信赖的
  2. 关于为什么反向哈希算法不可行的问题,您已经指出了一个相关的安全性。SE线程自己:

    • 为什么散列函数是单向的?如果我知道算法,为什么我不能从中计算输入

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

npm install --save crypto-js

最新更新