SHA1算法原理
經過Sha1算法可以把0<L<2^64位的數據轉化成160位的信息摘要
一、 sha1算法原理簡要概括
將任意長度的明文分組,每組為512位,最后一組若不足512位,就補位
從第一組開始,通過給定的初識緩沖區鏈接變量,經過80輪的運算之后,得到長度為160bit的字符串,字符串將參與下一組的運算中,以此類推,最后一組得到的160bit的字符串就是sha1加密結果
二、sha1算法詳細說明
1、 補位,分組
補位是必須進行的,就算明文長度已經滿足了512的倍數,也需要補位
補位方法如下:
2、 每組的運算
(一)、拓展份數
將每組的512bit分為16份32比特
將16份32比特數據擴充為80份32比特
我們設擴充前的16份的數據為Mt,擴充后80份的數據為Wt,(t代表第幾份的份數)
擴充方法如下:
ROTL符號代表左移運算
Wt的前16份數據照搬Mt
從W16開始,W16 = (W13 異或 W8 異或 W2 異或W0)<<1
以此類推,直至擴展到W79
(二)、80輪的運算(第一輪)
每組512bit的數據都要經過80輪運算
運算公式如下
首先介紹abcde
每組80輪運算開始前,abcde都會被鏈接變量H賦初始值,鏈接變量H具有初始值,每組
運算結束后,鏈接變量H都會被得到的abcde與上一組得到鏈接變量所改變改變,如下圖
最后一組512bit運算結束后產生的鏈接變量H組成最后的160位的sha1摘要
Ps
注意,上面圖中的加法是取模加法
Sha1算法的w取32,也就是說
在sha1算法中,z = x+y實際上相當於z = (x + y)mod 2^32
其次介紹Kt
Kt是固定值:
可以看到,Kt的值是分段函數,論數的區間不同,值不同
再介紹Wt
Wt就是我們之前求的分組
最后是ft(b,c,d)
Ft(b,c,d)是一個分段函數,根據t(輪數)的不同,對應函數也不同
參考:
https://www.bilibili.com/video/BV1Ua411679P?from=search&seid=11379127425917077872&spm_id_from=333.337.0.0
SHA256算法原理
SHA1與SHA256加密算法還是比較像的
輸出為256位
一、拓展,分組
把明文拓展為512位的倍數
二、拓展份數
把512bit的組拆分為16份32bit的數據
再把16份32bit的數據拓展為64份32bit的數據
拓展公式:
Rightrotate:循環右移
Rightshift: 右移
三、64次循環加密
加密流程圖:
每組512bit數據都要經過64輪的運算
1、 首先介紹abcdefgh
每組512bit數據開始循環前,都要對abcdefgh進行初始化
初始化依靠鏈接變量H,H具有初始值,其次,每64輪運算結束后得到的abcdefgh都會賦
予鏈接變量新值
Abcdefgh初始化如下:
鏈接變量初始值如下:
每組512bit數據運算結束后,都要進行鏈接變量的轉化,轉化方法如下:
最終得到的H就是SHA256摘要的結果
2、 再介紹Kj
Kj是固定值
3、再介紹Σ0與Σ1與Ch
4、Wj
Wj就是我們從16份拓展到64份的數據
SHA256算法參考下文
https://www.zhihu.com/tardis/sogou/art/94619052