二進位制函式 詳解雜湊函式SHA1演算法過程

2021-10-14 17:08:58 字數 1715 閱讀 6889

雜湊函式sha-1(secure hash algorithm 1)由美國****局於2023年首次發布,對輸入訊息生成160位的訊息摘要,廣泛應用於數字簽名等諸多領域。後來隨著密碼分析人員的研究,發現其存在缺陷並可被實施攻擊,逐漸被更安全的sha-2或sha-3代替。

儘管被拋棄,但是由於其曾經廣泛的使用,存留的很多軟體系統無法短期內完全公升級,所以未來很長一段時間,仍然會看到sha-1的身影,例如開發人員經常使用的版本管理軟體git,每次提交**的commit id 就是使用sha-1來計算的。

雜湊函式的演算法實現,高階程式語言通常都會封裝,供開發人員直接呼叫,一般無需了解其詳細計算過程,其運算邏輯和程式編碼並不難實現,難點在於理解演算法的設計思想,需要具備深厚的數學、密碼學背景才可能理解。

下面以訊息abc為例,逐步解說其計算過程。

取反按位與

按位或異或

左移迴圈左移

迴圈右移

相加模 

原始訊息轉為二進位制

a 二進位制 01100001

b 二進位制 01100010

c 二進位制 01100011

對訊息分組,每組512位長度

abc 的二進位制總長度24位,不夠512位,需要補位

補位步驟:

1. 先在abc後面補1

2. 規定末尾64位表示原始訊息的長度

abc的二進位制長度為24,24的二進位制為11000,

末尾就是

3. 中間剩下423個空位全部補0

( 3x8 ) + 1 + 423 + 64 = 512

這樣補位後總長度為512位,剛好湊足1組。

補位完畢,此時訊息為:

補位規則:

補位後的長度為512的整數倍。

如果訊息長度為447,補1後,剛好448,此時不需要補0,直接補末尾64位即可,訊息被分為1組。

如果訊息長度為448,補1後,達到449位,這個時候第1組剩下63位,不夠64位,就需要補63位0,再繼續補448個0,最後補64位訊息長度,訊息被分為2組。

本例只分了一組,如果訊息被分為多組,記為

將按32位切割為16組,標記為

現在已經有到

還需要生成到

生成函式:(向左滑動檢視全部公式)

函式的定義:

按照上面的函式最終生成塊到共組

設定初始雜湊值

這5個初始雜湊值是演算法設定不變的,

僅用於第一組訊息的處理,

處理後續分組的時候使用前一組計算的結果;

定義5個臨時變數並賦值

然後開始80輪的迴圈計算(輪次用t表示) 

演算法邏輯圖

常數定義

函式定義

以第一輪計算舉例(t為臨時變數):

可以看到,主要的變化是對下一輪a的計算,

其他幾個變數都是上一輪變數的重新賦值,

以上步驟迴圈計算80輪,最後把的結果和其初始值執行+運算

依次順序拼接就是的雜湊值;

如果有分組將的結果作為的初始雜湊值繼續計算。

雜湊函式的種類很多,但同型別的函式計算過程都有相似的步驟,熟悉其中一種,有助於理解其他函式的計算過程,同時對於從事資訊保安的人員來說,有助於理解相關攻擊方法的原理,比如長度擴充套件攻擊等。

參考文獻

[1]

[2]

[3]

二進位制處理函式

unsigned const stat zero 0x0008 unsigned const stat one 0x0002 unsigned const stat two 0x0004 unsigned const stat three 0x0008 檢測位有1位是1就返回true templat...

二進位制詳解

在計算機的世界裡,只有0和1,也就是二進位制。那如何把乙個十進位制的數轉成二進位制或者其他進製,請下圖 十進位制轉二進位制 十進位制的123轉成二進位制就是1111011,轉成幾進製都是乙個道理。一 二進位制 1.1 二進位制是計算機採用的表示數字的方式,每個數字上只有0和1 1.2 任何整數一定可...

倒水 二進位制 lowbit函式

p1582 倒水,傳送門 題目描述 一天,cc買了n個容量可以認為是無限大的瓶子,開始時每個瓶子裡有1公升水。接著 cc發現瓶子實在太多了,於是他決定保留不超過k個瓶子。每次他選擇兩個當前含水量相同的瓶子,把乙個瓶子的水全部倒進另乙個裡,然後把空瓶丟棄。不能丟棄有水的瓶子 顯然在某些情況下cc無法達...