欢迎光临散文网 会员登陆 & 注册

SHA-256加密算法

2022-11-17 00:04 作者:Vector永远的神  | 我要投稿

SHA-256算法是采用哈希算法的思路对于消息数据进行加密处理。

首先是将文本数据转化为对应的ASCII码的二进制数字符串,然后将这个字符串进行补位处理。对消息进行补位时,先在后面补一个1,如果不满足要求,再补0直到满足对512取模余数为448。这就意味着,补位至少补一位(原消息位数为512n+447),最多补512位(原消息位数为512n+448)。

(length(data)+ 1 + n )mod 512 = 448;

关于为什么是448,是因为512-448=64,这个64位需要用来存储原始消息的长度,为了确保length(data)< 2^64.  这个是在最后一个512bit的字符片段中添加原始片段的长度

以字符串abc为例, 01100001 01100010 01100011   片段长度为24  64bit表示长度000……011000.

首先是加1    01100001 01100010 01100011 1

然后是在字符串后面补0直到总长度对512取模余数为448,这里补423个0,使总长度达到为448: 01100001 01100010 01100011 1000…..00   。

再加上原始片段的长度64bit位,一共凑成512bit片段  01100001 01100010 01100011 1000…..00  000……011000   表示长度为24.


然后是划片计算,首先将补足后的字符串切割成若干个 512 bit长度的字符片段,然后从中选择其中一个512bit的片段出来进行计算。

将这个512bit划分为16*32bit长度,32bit为一个无符号数(unsigned integer),然后将16个无符号数扩充到64个无符号数,扩充规则如下,其中rightrotate表示右移循环,xor表示异或。

无符号数的扩充规则

接下来介绍主体的哈希函数的计算规则,如下图所示,针对上述扩充产生的64个32位数,有以下算法,红框表示二者相加后mod2^32,ABCDEFGH等参数的初始值由下图h值所对应,在运算的过程中不断加以修改,Wi为扩充后的32位无符号数,Ki是对应的提前给定的哈希值。

主体计算过程

h是前8个质数的1/2次方的小数位的十六进制表示下前32bit,

k是前64个质数的1/3次方下的小数位的十六进制表示下前32bit,

相关参数的值

将扩展得到的64个无符号数循环完得到最终的ABCDEFGH八个8位十六进制的数组合起来,就是8*32bit=256bit长度的结果,这也就是SHA-256算法的一次执行过程。之后再执行下一个512bit的片段,在新一轮的遍历过程中ABCDEFGH还会作为新一轮的值继续执行直到全部执行完毕。


最终64轮循环结束后会得到ABCDEFGH八个32bit的值,最终组成256位的加密结果

SHA-256加密算法的评论 (共 条)

分享到微博请遵守国家法律