1. 哈希算法的分类
简单来说,哈希算法主要分为以下几类:CRC,MD,SHA,Blake
2.什么是哈希算法
SHA256是SHA-2下细分出的一种算法,SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准。对于任意长度的消息,SHA256都会产生一个256位长的哈希值,称作消息摘要。
这样的函数是最常用于数字签名和密码保护中
3. 哈希算法流程
哈希算法的流程主要包括四个部分:
3.1.常量初始化
3.2. 信息预处理
3.3. 逻辑运算公式
3.4. 计算得到信息摘要
3.1.常量初始化:
常量初始化主要包括两个部分,分别是8个哈希初值H(0)—H(7),64个哈希常量K(1)—K(64)。
其中哈希初值是对自然数中前8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32bit而来。
如:√2的小数部分约 0.414213562373095048
0.414213562373095048 = 0x6a09e667(十六进制,取前32位)
其中哈希常量64个常量,对自然数中前64个质数(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97…)的立方根的小数部分取前32bit而来。
在这一部分,网上的其他大佬已经说的足够清晰了,在此不做赘述。
3.2. 信息预处理
在这里,话不多说,让你用一张图搞懂!
记住这里的M,后面会用到。
3.3. 逻辑运算公式
这些公式,记住他们,待会会用到的!
3.4. 计算得到信息摘要
SHA256的本质就是通过该算法,把输入数据变成一个亲妈都不认识的输出,其中M(i)就是信息预处理得到的结果,当i=0时,H0(0)…H0(7)即为哈希初值。
定义a…g八个中间变量,后面会用到的;
这个就是计算的核心步骤了,主要是**W(j)**的构建,在程序中,这一步骤也是很容易实现的。
其中各个部分的计算是怎么来的呢?请参考3.3的逻辑运算公式。
需要注意的是:每得到一组新的a…g都要经过64轮的计算
最后就是不断重复这一过程,直至计算出最后的信息摘要。
其中N的大小,和M(i)中,i的大小相关,即“分块”分的越多,N越大。
4. 总结
SHA256是一种常见的加密算法,安全性高,广泛应用于数字签名和密码加密
SHA256算法较为成熟,可实现性高
第一次写文章,大家多多关照!!!
评论区欢迎大家理性讨论!!!
因为鄙人和单片机啊、嵌入式啊打交道多一点,后续可能还会分享一些其他的加密。签名以及在单片机上实现的文章。
关注我!!!点点赞!!!点赞超过15个,第二天就更新!!!
本文在github做了收录 github.com/Michael-lzg… demo源码地址 github.com/Micha...
在上文中,进行了简单的log4配置搭建,也在实操中启用了log4net的配置。这里做了...
Mercurail是一种分步式的版本控制器,和git类似,但是和传统的svn有着很大的区别...
最近呢,公司让写一个组件,要求用正则表达式构建一个中文的匹配组件,许多问题...
【51CTO.com原创稿件】关于学习这件事情宁可花点时间系统学习,也不要东一榔头西...
From source codes,Vold sets the device as adoptable or not based on the fla...
正则表达式分组: 如果想匹配3个数字,正则表达式可以用如下写法: \d{3} 以上代码...
Servlet 代码: 复制代码 代码如下: /** 直接取上传的File */ public void doPos...
对于PC用户来说,虽然目前依然有相当一部分人还在用Windows XP或7这样的老旧系统...
在一个单页面应用里使用二级套嵌路由 目录结构如下: 其中main.js为全局配置文件...