什么是 SHA-256 算法17 Mar 2025 | 6 分钟阅读 SHA 简介安全散列算法,简称 SHA。 数据和证书使用 SHA 进行散列,SHA 是 MD5 的修改版本。 通过使用位运算、模加和压缩函数,散列算法将输入数据缩减为更小的形式,这种形式难以理解。 您可能想知道,散列是否可以被破解或解密? 散列和加密之间的主要区别在于散列是单向的; 一旦数据被散列,生成的散列摘要就无法解密,除非应用暴力攻击。 请看下面的插图,了解 SHA 算法的运作方式。 SHA 旨在即使消息中只有一个字符发生变化,也能提供不同的散列值。 例如,考虑组合主题“天堂”和“天堂是不同的”。 然而,唯一区别在于大小写字母,这仅仅是大小写的问题。 ![]() 第一个消息使用 SHA-1 进行散列,以获得散列摘要“06b73bd57b3b938786daed820cb9fa4561bf0e8e”。 如果使用 SHA-1 对第二个类似的的消息进行散列,散列摘要将类似于“66da9f3b8d9d83f34770a14c38276a69433a535b”。 雪崩效应就是为此而闻名。 这种现象对密码学至关重要,因为它意味着即使对正在输入的的消息进行最小的更改也会完全改变输出。 因此,攻击者将无法破译散列摘要最初所说的内容,也无法确定消息在传递过程中是否被更改并通知消息的接收者。 SHA 可以帮助识别对原始消息所做的任何修改。 用户可以通过查阅原始散列摘要来确定是否甚至更改了一个字母,因为散列摘要将完全不同。 SHA 的主要特征之一是它们是确定性的。 这意味着任何机器或用户如果知道使用的散列算法,都可以再现散列摘要。 由于 SHA 的确定性,互联网上的每个 SSL 证书都必须使用 SHA-2 过程进行散列。 不同类型的 SHA在讨论 SHA 形式时,提到了许多 SHA 变体。 只有两种 SHA-SHA-1 和 SHA-2-但它们有几个名称,例如 SHA-1、SHA-2、SHA-256、SHA-512、SHA-224 和 SHA-384。 其他更高的数字,例如 SHA-256,仅仅是 SHA-2 变体,其中包含有关 SHA-2 的位长度的信息。 第一个安全散列算法是 SHA-1,它通过散列生成 160 位散列摘要。 可能会有人想知道,SHA-2 是否像 SHA-1 一样可以被破解? 是的,这就是解决方案。 SHA-1 比 SHA-2 更容易进行暴力破解,因为散列摘要的长度更短,但是 SHA-2 也可以做到。 由于可以用 160 位制作的可能组合数量有限,SHA-1 的另一个问题是它可以为两个不同的值提供相同的散列摘要。 所有证书都必须使用 SHA-2,因为它为每个摘要提供了 SHA-2 下的唯一值。 SHA-2 可以生成散列摘要,其位长度范围从 256 到 512,从而为每个摘要提供完全独特的结果。 当两个值具有相同的散列摘要时,就会发生冲突。 由于 SHA-1 容易发生冲突,因此攻击者更容易找到匹配的两个摘要并重建原始明文。 自 2016 年以来,SHA-2 比 SHA-1 安全得多,在所有数字签名和证书中都是必需的。 最安全的散列方法是 SHA-2,因为常见的攻击(如暴力攻击)可能需要数年甚至数十年才能解密散列摘要。 为什么以及如何使用 SHA?如前所述,安全散列算法 (SHA) 用于多种目的,并且必须包含在所有用于 SSL/TLS 连接的数字签名和证书中。 SHA 也被 IPSec、SSH 和 S-MIME(安全/多用途互联网邮件扩展)等程序使用。 此外,密码使用 SHA 进行散列,这样服务器只需要记住散列而不是实际密码。 因此,如果保存所有散列的数据库被盗,攻击者不仅无法直接访问所有明文密码,而且还需要弄清楚如何破解散列才能使用密码。 SHA 也可以用作文件一致性的标记。 既然我们知道了 SHA 的用途,我们必须问自己:为什么有人会使用安全散列算法? 它们抵御入侵者的能力是常见的原因。 尽管一些技术(例如暴力攻击)可以披露散列摘要的明文,但 SHA 使这些策略非常具有挑战性。 简单密码可能会阻止许多攻击者,因为由 SHA-2 算法编码的密码可能需要数年甚至数十年才能破解。 每个散列摘要的独特性是使用 SHA 的另一个原因。 如果使用 SHA-2,更改消息中的一个单词可能会完全改变散列摘要,因为很可能很少或没有冲突。 加密散列函数提供的三种不同类型的特性(原像抵抗,也称为第一级图像抵抗、第二级原像抵抗和冲突抵抗)用于保持和存储数据的安全形式。 原像加密抵抗技术的主要优势在于,它使黑客或攻击者难以且耗时地通过使用其相关的散列值来解码消息。 由于几乎没有冲突,或者根本没有冲突,攻击者无法破解安全散列算法,这使得识别模式变得困难。 这些只是 SHA 被如此频繁使用的一些解释。 散列的前景SHA-2 现已成为散列算法的行业标准,尽管 SHA-3 最终可能会超越它。 负责开发 SHA-1 和 SHA-2 的 NIST 于 2015 年推出了 SHA-3; 但是,出于各种原因,它并未被采纳为行业标准。 由于大多数企业在 SHA-3 推出时正在从 SHA-1 迁移到 SHA-2,因此在 SHA-2 仍然非常安全的情况下,立即转换为 SHA-3 并没有意义。 此外,尽管这并不完全准确,但 SHA-3 被认为比 SHA-2 慢。 尽管 SHA-3 在软件方面比 SHA-1 和 SHA-2 慢,但它在硬件方面要快得多,并且每年都在加速。 Java 中的 SHA-256 散列定义: 在密码学中,SHA 是一种散列算法,它接受 20 字节的输入并产生一个大约 40 位数的十六进制整数作为散列结果。 消息摘要类: Java 的 MessageDigest 类是 java.security 包的一部分,用于确定加密散列值。 为了确定文本的散列值,MessagDigest 类包括以下加密散列函数
静态函数 getInstance() 初始化此算法。 它选择算法后计算摘要值,并以字节数组的形式返回结果。 使用 BigInteger 类将生成的字节数组转换为其符号-幅度表示形式。 为了获得 MessageDigest,将此表示转换为十六进制格式。 以下是程序:SHA-256 散列的 Java 实现可以在下面的程序中看到。 输出 HashCode Generated by SHA-256 for: JavaTpoint : 112e476505aab51b05aeb2246c02a11df03e1187e886f7c55d4e9935c290ade hello world : b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 K1t4fo0V : a979e43f4874eb24b740c0157994e34636eed0425688161cc58e8b26b1dcf4e 下一个主题什么是 DES |
我们请求您订阅我们的新闻通讯以获取最新更新。