SHA-256加密算法
SHA-256算法是采用哈希算法的思路對于消息數(shù)據(jù)進行加密處理。
首先是將文本數(shù)據(jù)轉(zhuǎn)化為對應(yīng)的ASCII碼的二進制數(shù)字符串,然后將這個字符串進行補位處理。對消息進行補位時,先在后面補一個1,如果不滿足要求,再補0直到滿足對512取模余數(shù)為448。這就意味著,補位至少補一位(原消息位數(shù)為512n+447),最多補512位(原消息位數(shù)為512n+448)。
(length(data)+ 1 + n )mod 512 = 448;
關(guān)于為什么是448,是因為512-448=64,這個64位需要用來存儲原始消息的長度,為了確保length(data)< 2^64.? 這個是在最后一個512bit的字符片段中添加原始片段的長度
以字符串a(chǎn)bc為例,?01100001 01100010 01100011? ?片段長度為24? 64bit表示長度000……011000.
首先是加1?? ?01100001 01100010 01100011 1
然后是在字符串后面補0直到總長度對512取模余數(shù)為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為一個無符號數(shù)(unsigned integer),然后將16個無符號數(shù)擴充到64個無符號數(shù),擴充規(guī)則如下,其中rightrotate表示右移循環(huán),xor表示異或。

接下來介紹主體的哈希函數(shù)的計算規(guī)則,如下圖所示,針對上述擴充產(chǎn)生的64個32位數(shù),有以下算法,紅框表示二者相加后mod2^32,ABCDEFGH等參數(shù)的初始值由下圖h值所對應(yīng),在運算的過程中不斷加以修改,Wi為擴充后的32位無符號數(shù),Ki是對應(yīng)的提前給定的哈希值。

h是前8個質(zhì)數(shù)的1/2次方的小數(shù)位的十六進制表示下前32bit,
k是前64個質(zhì)數(shù)的1/3次方下的小數(shù)位的十六進制表示下前32bit,

將擴展得到的64個無符號數(shù)循環(huán)完得到最終的ABCDEFGH八個8位十六進制的數(shù)組合起來,就是8*32bit=256bit長度的結(jié)果,這也就是SHA-256算法的一次執(zhí)行過程。之后再執(zhí)行下一個512bit的片段,在新一輪的遍歷過程中ABCDEFGH還會作為新一輪的值繼續(xù)執(zhí)行直到全部執(zhí)行完畢。
最終64輪循環(huán)結(jié)束后會得到ABCDEFGH八個32bit的值,最終組成256位的加密結(jié)果