首页 > 编程语言 >保障安全的散列算法 - SHA256

保障安全的散列算法 - SHA256

时间:2024-03-29 17:01:25浏览次数:23  
标签:运算 散列 SHA 算法 哈希 SHA256 256 输入 函数

引言

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

加密示例

我们使用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进制表示,以便更方便地存储和显示。

为什么”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中特别使用。

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

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

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

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

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

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

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

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

应用场景

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

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

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

结论

理解和使用 SHA-256 对于网络安全和密码学非常关键。不仅如此,基于 SHA-256,我们还可以实现许多其他的密码学应用,比如数字签名和证书。

标签:运算,散列,SHA,算法,哈希,SHA256,256,输入,函数
From: https://blog.csdn.net/RabbitTuzi/article/details/137148954

相关文章

  • 深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的
    大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的算法原理与实现,本文介绍了一种用于处理分类数据不平衡问题的过采样方法——SMOTE算法。SMOTE算法通过在少数类的样本之间插值来创建新的样本,从而增加少......
  • 算法打卡day20
    今日任务:1)669.修剪二叉搜索树2)108.将有序数组转换为二叉搜索树3)538.把二叉搜索树转换为累加树669.修剪二叉搜索树题目链接:669.修剪二叉搜索树-力扣(LeetCode)给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值......
  • 数据结构与算法 哈希表(散列表)
    1.哈希表的引出因此,散列表的时间复杂度O(1)。当我们需要在数组里查找一个数时,就可以考虑到使用哈希表来降低时间复杂度了。2.哈希表的应用3.哈希表发生冲突时4.哈希表的性能所以,我们需要尽可能地高的填装因子和一个良好的散列函数,才能提高哈希表的性能。......
  • 利用遗传算法解决TSP问题
    TSP(traveling salesman problem,旅行商问题)是典型的 NP 完全问题,即其最坏情况下的时间复杂度随着问题规模的增大按指数方式增长,到目前为止还未找到一个多项式时间的有效算法。TSP 问题可描述为:已知n个城市相互之间的距离,某一旅行商从某个城市出发访问每个城市一次......
  • 关于各种app的推荐算法有浅感
    2024-03-2913:12:43不知道从什么开始,或许一开始就一直是如此,总是期待着有人可以把解决问题的方法给喂到自己的嘴边,当遇到学习上的缺乏动力时,竟然会觉得是抖音和社交软件戒得太久,以至于总是沉浸在自己的世界里面。这种想法并不全错,长期不与人交流,不与同行或者同学交流,会不知道自......
  • 中文地址智能匹配算法-Java版
    地名作为最常用的社会公共信息,不仅与人们的日常生活息息相关,而且是政府行政行为、经济建设不可缺少的基础信息资源。在政务系统中有许多需要将业务地址关联到标准地址的场景,addresstool致力于解决地址关联匹配算法中的速度和准确性问题。经实测,addresstool的地址关联速度在5......
  • 中文地址分词算法-Java版
    addresstool用于处理中文地址的分词和匹配,采用NLP分词算法进行中文地址分词,在中文地址分词基础上对垃圾地址进行识别,过滤,标记等。根据杂乱的业务地址自动化生成标准中文地址库,并支持随机业务地址关联到标准地址操作,实测速度达到25000条/每秒今天我们测试一下addresstool的......
  • 动态规划 选择dp:多重背包+多重背包puls----中专生刷算法
    不了解动态规划和选择dp的同学先看一下这两篇文章动态规划:选择dp及优化01背包问题-CSDN博客动态规划:完全背包问题----中专生刷算法-CSDN博客然后我们来做题普通题+进阶题,图文详解,化零为整的解决多重背包puls问题!!!多重背包输入格式输出格式输出一个整数,表示最......
  • 【matlab】【2024年】【优化算法】【黑风筝算法】【BKA】【附带论文中英翻译网页版】
            本文创新性地提出了黑风筝算法(BKA),这是一种受黑风筝迁徙和掠食行为启发的元启发式优化算法。BKA集成了柯西突变策略和Leader策略,增强了算法的全局搜索能力和收敛速度。这种新颖的组合在探索全球解决方案和利用本地信息之间取得了良好的平衡。在CEC-2022和CEC-20......
  • AI预测福彩3D第21弹【2024年3月29日预测--第4套算法重新开始计算第7次测试】
       今天继续对第4套算法进行测试,测试的目的主要是为了记录统计两套方案的稳定性和命中率,昨天的第一套和第二套方案均已命中。今天是第7次测试,同样测试两个方案。废话不多说,直接上结果。     2024年3月29日福彩3D的七码预测结果如下    第一套:  ......