SHA-256加密算法
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位的加密结果