保障安全的散列算法 - SHA256

这篇具有很好参考价值的文章主要介绍了保障安全的散列算法 - SHA256。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

SHA-256是由美国国家安全局(NSA)开发的SHA-2密码哈希函数之一,用于数字签名和区块链。在计算机科学和信息安全领域,SHA-256 (安全哈希算法 256位) 是广受欢迎且常被使用的密码学散列函数。SHA-256 产生一个唯一、定长的256位 (32字节)散列值,不仅可以用于密码学中信息的安全存储,还常常作为数据完整性校验的工具。

内部工作原理

SHA-256 通过一系列计算复杂的数学操作来创建信息的哈希。这些操作包括位运算、模数运算和逻辑函数。SHA-256 的工作过程分为以下主要步骤:

  1. 填充位:首先,信息长度会被扩充至位数为 512 的倍数,这样可以保证信息可以被512位的块进行处理。

  2. 创建信息摘要:对每一个512位的数据块,SHA-256 会进行64轮的运算,使用了一系列复杂的数学函数和常数。这些函数包括按位运算、异或、位移等。

  3. 取得最后的散列值:将计算得到的所有的中间散列值进行逐位的异或运算,输出最后的散列结果。

SHA-256 对于相同输入总是产生相同的输出,任何对输入的微小修改都会引发输出结果的巨大变化,这就是所谓的"雪崩效应"。

保障安全的散列算法 - SHA256,安全,python,算法

加密示例

我们使用Python写一段通过 SHA-256 散列函数,实现一条消息的代码:

import hashlib

message = "Hello, World!"
hash_object = hashlib.sha256(message.encode())
hex_dig = hash_object.hexdigest()

print(hex_dig)

在上述代码中,首先导入 hashlib 模块,然后定义要哈希的消息。接下来,我们创建一个 SHA-256 哈希对象,并提供我们想要散列的信息。最后,我们将信息转化为16进制表示,以便更方便地存储和显示。

保障安全的散列算法 - SHA256,安全,python,算法

为什么”SHA-256 对于相同输入总是产生相同的输出“?

SHA-256 算法的关键在于它的确定性。如果你输入同样的信息,你将总是得到相同的结果。这是因为 SHA-256 是一种算法,也就是一组明确的计算步骤,这组步骤决定了如何将输入转化为输出。

这就像是一个烹饪食谱,如果你每次都使用确切相同的原料和相同的步骤,无论你做多少次,你得到的食物都应该是一样的。

当你将消息输入 SHA-256 算法时,该算法会执行一系列明确的数学操作来生成散列值。SHA-256 对每一个512位的数据块,会进行64轮明确的运算。这些运算包括位运算、逻辑函数、模数运算等。因为这些都是确定性的操作,所以对于同样的输入,它们总会得到完全相同的结果。

这就使得 SHA-256 具有一致性,对于相同的输入,它总会输出相同的哈希值,无论这个输入被运行多少次。这是密码学散列函数的一项重要特性。

Sha256 算法解释

读到这里,你是否还是不理解Sha256的工作原理呢?那么试着用图形语言去理解它!

多明戈·马丁(Domingo Martin)创作了一个网站叫“ Sha256算法解释”,这个网站很好地用图形语言展示了使用SHA-256生成哈希值的计算过程,SHA-256在SHA-2中特别使用。

保障安全的散列算法 - SHA256,安全,python,算法

在顶部的输入字段中输入您喜欢的字符串。这一次,我输入了csdn.net的URL。然后,将输入的 URL 转换为二进制数据。消息块由 32 位 x 16 行 = 512 位表示。

保障安全的散列算法 - SHA256,安全,python,算法

单击右上角的红色播放按钮,进入一个计算步骤。首先,基于由输入字符串的二进制文件组成的消息块,生成 32 位 x 64 行 = 2048 位的消息调度。

保障安全的散列算法 - SHA256,安全,python,算法

这个区块是SHA-256算法中用到的σ小写函数的表现形式。σ小写函数有σ0和σ1两种。对于SHA-256算法中的每一轮操作,σ0函数用于在第15轮到第64轮的计算中,σ1函数用于第16轮到第64轮的计算。σ函数是SHA-256算法的主要组成部分,也是SHA-256算法的核心部分之一,主要用于对数据进行位运算。

这里W8、W21、W7、W16、W23分别表示输入的消息数据块的第8个、第21个、第7个、第16个、第23个字(块),这些字都是32位的。

下面是位运算的详细解释:

  1. 右旋转:右旋转7位,右旋转18位和右移3位是对输入W8进行的操作,结果代表σ0的运算结果。右旋转的意思是将二进制序列向右移动指定的位数,并将移出的位数补到序列的左端。

  2. 右移:右移3位是将二进制序列直接向右移动3位,移出的位数丢弃,左端补0。

  3. 位异或:位异或操作是将两个位进行比较,如果两个位不同,则结果为1,否则结果为0。在这里,σ0和σ1函数的大部分工作就在这里,σ0函数对右旋转7位、右旋转18位和右移3位的结果进行位异或运算。

同样的,右旋转17位、右旋转19位和右移10位是对输入W21进行的操作,结果代表σ1的运算结果。

接着,W7、σ0、W16、σ1、W23五个32位的二进制数进行相加(位相加操作遵循二进制加法原理,考虑进位问题),结果作为计算W(i + 16)的一部分。这样就完成了SHA-256的一轮运算中的一部分。

保障安全的散列算法 - SHA256,安全,python,算法

按顶部的顺序进行此计算,将生成消息调度。

保障安全的散列算法 - SHA256,安全,python,算法

当生成所有 32 位 x 64 行的消息调度时,它看起来像这样。

保障安全的散列算法 - SHA256,安全,python,算法

然后从消息调度中计算哈希。与消息调度结合的'工作变量'a到h是组成哈希的八个变量。这八个变量的初始值设置为固定的初始哈希值。在SHA-256中,用演变出来的2, 3, 5, 7, 11, 13, 17, 和 19这八个质数的平方根的二进制作为初始哈希值。

保障安全的散列算法 - SHA256,安全,python,算法

计算比较复杂,但哈希计算基本上使用了循环移位和异或,就像消息调度生成时一样。一个计算新的哈希变量a到h从消息调度和哈希变量的特定行并覆盖它们的机制。

保障安全的散列算法 - SHA256,安全,python,算法

计算从消息调度的顶部开始按顺序执行,最终的哈希变量转换为十六进制十六进制并排列,并以 256 位哈希汇总。SHA-256哈希是基于原始数据的二进制数据,通过重复复杂的计算而得到的,从哈希中恢复原始数据是极其困难的。

保障安全的散列算法 - SHA256,安全,python,算法

应用场景

SHA-256 在许多不同的领域都有广泛的应用,尤其在信息安全和数据完整性验证方面。例如:在芯片通信、电子资金转账、数字签名、密码存储、区块链技术和数据备份中的应用。

SHA-256 是许多加密协议和安全标准的基础,例如在TLS和SSL协议中用于握手过程,并被用于IPSec中保障网络连接的安全。

值得注意的是:SHA-256 是许多加密货币,特别是比特币的核心组成部分。比特币的工作机制就是SHA-256散列函数,因为其在保障数据不可篡改和验证方面的作用。

结论

理解和使用 SHA-256 对于网络安全和密码学非常关键。不仅如此,基于 SHA-256,我们还可以实现许多其他的密码学应用,比如数字签名和证书。文章来源地址https://www.toymoban.com/news/detail-848535.html

到了这里,关于保障安全的散列算法 - SHA256的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 攻破SHA-256!?你的比特币还安全吗?

    原创 | 刘教链 挽弓当挽强,用箭当用长。射人先射马,擒贼先擒王。 就在BTC(比特币)还在7万刀附近游走之际,密码学界隔空传来一声霹雳:对SHA-2的碰撞攻击方法取得新进展! 运用这一最新的碰撞攻击方法,研究者在全球首次成功攻破了31步长的SHA-256哈希、28步长的SHA-

    2024年04月17日
    浏览(64)
  • SHA-256算法的原理与C/C++实现

    SHA-256 是一种加密哈希函数,旨在将任意大小的数据映射到一个固定大小的哈希值,通常是 256 位(32 字节)。它属于 SHA-2(安全哈希算法 2)家族,旨在提供更高的安全性。 SHA-256 的设计原则包括以下关键步骤: 消息填充 :输入消息的位数必须是 512 的倍数。因此,第一步是

    2024年04月17日
    浏览(99)
  • C#实现SHA256哈希加密算法(含代码实现)

    C#实现SHA256哈希加密算法(含代码实现) 在现代计算机技术中,数据安全是一个非常重要的话题。加密算法就是用来保护数据安全的一种技术。其中,哈希加密算法是一种常用的加密方式。本篇文章将介绍如何使用 C# 编程语言实现 SHA256 哈希加密算法,并附上完整的源码。 SHA

    2024年02月08日
    浏览(84)
  • 7-42 整型关键字的散列映射

    题目链接 :这里 题目大意 :就是写一个线性探测的散列 然鹅,我不会写(?)我一共错了两个地方 有冲突的情况下,就是线性探查然后往后找,但是我之前写的是 t++ ,应该是 t = (t+1)%p; … 在有重复的时候,重复的那个值不应该放到散列表里面…也就是应该线性探查的时

    2024年02月11日
    浏览(43)
  • Python hashlib 加密方法(MD5、SHA1、SHA256、SHA52)

    Python 提供了 hashlib 模块来进行加密操作。在下面的文章中,我们将介绍 hashlib 模块的常用加密算法。 hashlib 模块是 Python 中用于加密的标准库。它包含了所有常见的哈希函数,例如 SHA1、SHA224、SHA256、SHA384、SHA512、MD5 等。这些哈希函数都是单向的,即只能对信息进行加密,而

    2024年02月07日
    浏览(48)
  • Java工具集 Hex、Hmac算法(MD5、SHA1、SHA256、SHA384、SHA512)、雪花算法SnowflakeId、redis基于Springboot工具类

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 专栏 描述 Java项目实战 介绍Java组件安装、使用;手写框架等 Aws服务器实战 Aws Linux服务器上操作nginx、git、JDK、Vue Jav

    2024年04月09日
    浏览(78)
  • kali/windows/burpsuite/Python下计算md5,sha1,sha256,base64的值

    对明文进行加密使之变成密文时,常用到的有 md5,sha1,sha256,base64      情景 :假设对“202222804198”这串数字进行加密,windows和kali桌面上已存在一个“1.txt”的文件,文件内容为该数字( 文件中除了需要加密的内容外不要有空行,回车的存在 ) 首先简单了解certutil的用法

    2024年02月11日
    浏览(47)
  • 【数据结构与算法】04 哈希表 / 散列表 (哈希函数、哈希冲突、链地址法、开放地址法、SHA256)

    一种很好用,很高效,又一学就会的数据结构,你确定不看看? 莫慌,每个概念都很好理解。 哈希表( Hash Table ),也称为 散列表 ,是一种数据结构, 用于存储键值对(key-value pairs) 。 键值对是一种数据结构,用于将键(key)与对应的值(value)相关联。在键值对中,键

    2024年02月09日
    浏览(80)
  • HZNUCTF MISC Snake题解——python程序逆向,hashcat爆破sha256

    目录 一.Dump得到pyc文件 二.pyc反编译得到py源码 三.分析程序逻辑 四.hashcat爆破 题目附件链接:https://pan.baidu.com/s/1CcS8BPGx8fKnsJgRvEi0bA?pwd=t2yj  提取码:t2yj 使用命令:python pyinstxtractor.py snake.exe 在线反编译工具python反编译 - 在线工具 (tool.lu) 这里%e8%b4%aa...是url编码,可以用url编码在

    2024年02月07日
    浏览(61)
  • Solidity Keccak256与SHA3-256

    SHA3由Keccak标准化而来,在很多场合下Keccak和SHA3是同义词,但在2015年8月SHA3最终完成标准化时,NIST调整了填充算法: SHA3-256(M) = KECCAK [512] (M || 01, 256) 。所以标准的NIST-SHA3就和Keccak计算的结果不一样。 如对空字符串进行Keccak256 和 SHA3-256结果各不相同: 以太坊在开发的时候SH

    2024年02月11日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包