SHA1與SHA256加密


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM