保障安全的散列算法 - SHA256

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

print(hex_dig)


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


![](https://img-blog.csdnimg.cn/direct/b8746bc28d0d4cc49c8913bf5dc402a1.png)



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


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


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


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


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


## **Sha256 算法解释**


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


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


[![](https://img-blog.csdnimg.cn/img_convert/baa592c0420ac9b1cb94de449577dd22.png)](https://i.gzn.jp/img/2022/02/09/sha256-algorithm-explained/01.png)


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


![](https://img-blog.csdnimg.cn/direct/da51f655f3894f47b8dc53b2efc8861f.png)


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


![](https://img-blog.csdnimg.cn/direct/7e77f58b587949e4bb3f11ce32c54e13.png)


这个区块是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的一轮运算中的一部分。


![](https://img-blog.csdnimg.cn/direct/786cea6e3c53412bb517c615a5df6112.png)


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


![](https://img-blog.csdnimg.cn/direct/38fe9ec79014481b9f92ccf05b2f0398.png)


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


![](https://img-blog.csdnimg.cn/direct/782f16ad30c840d1afc7c1e47658e42b.png)


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


![](https://img-blog.csdnimg.cn/direct/a332b865b162439db7c2f45a7fa9a39a.png)


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


![](https://img-blog.csdnimg.cn/direct/6e326f4ee6624327b4b0d305a1018042.png)


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


![](https://img-blog.csdnimg.cn/direct/aa3eeb0fb7fc4e3493111ee19758d996.png)


## 应用场景


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


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


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

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

![img](https://img-blog.csdnimg.cn/img_convert/2832b5d4040045615b85206887a3ba0e.png)

![img](https://img-blog.csdnimg.cn/img_convert/d86ca96496bf8898ccaafd538b04603f.png)

![img](https://img-blog.csdnimg.cn/img_convert/14ee28e7e60b6856cd6dcb400158b9a3.png)

![img](https://img-blog.csdnimg.cn/img_convert/a022177d433552eb2397f3602c865a47.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c3c5285aad959445bed4137b5e2978d.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值