用C語言實現SHA 1演算法

2021-08-31 04:15:51 字數 2305 閱讀 3735

一、sha演算法簡介

sha (secure hash algorithm,譯作安全雜湊演算法) 是美國****局 (nsa) 設計,美國國家標準與技術研究院 (nist) 發布的一系列密碼雜湊函式。正式名稱為 sha 的家族第乙個成員發布於 2023年。然而現在的人們給它取了乙個非正式的名稱 sha-0 以避免與它的後繼者混淆。兩年之後, sha-1,第乙個 sha 的後繼者發布了。 另外還有四種變體,曾經發布以提公升輸出的範圍和變更一些細微設計: sha-224, sha-256, sha-384 和 sha-512 (這些有時候也被稱做 sha-2)。

最初載明的演算法於 2023年發布,稱做安全雜湊標準 (secure hash standard),fips pub 180。這個版本現在常被稱為 "sha-0"。它在發布之後很快就被 nsa 撤回,並且以 2023年發布的修訂版本 fips pub 180-1 (通常稱為 "sha-1") 取代。根據 nsa 的說法,它修正了乙個在原始演算法中會降低密碼安全性的錯誤。然而 nsa 並沒有提供任何進一步的解釋或證明該錯誤已被修正。2023年,在一次對 sha-0 的攻擊中發現這次攻擊並不能適用於 sha-1 — 我們不知道這是否就是 nsa 所發現的錯誤,但這或許暗示我們這次修正已經提公升了安全性。sha-1 已經被公眾密碼社群做了非常嚴密的檢驗而還沒發現到有不安全的地方,它現在被認為是安全的。

在 crypto 98 上,兩位法國研究者展示了一次對 sha-0 的攻擊 (chabaud and joux, 1998): 雜湊碰撞可以複雜到 261 時被發現;小於 280 是理想的相同大小雜湊函式。2023年時,biham 和 chen 發現了 sha-0 的近似碰撞 — 兩個訊息可以雜湊出相同的數值;在這種情況之下,142 和 160 位元是一樣的。他們也發現了 sha-0 在 80 次之後減少到 62 位元的完整碰撞。2023年8月12日,joux, carribault, lemuet 和 jalby 宣布了完整 sha-0 演算法的雜湊碰撞。這是歸納 chabaud 和 joux 的攻擊所完成的結果。發現這個碰撞要複雜到 251 並且用一台有 256 顆 itanium2 處理器的超級電腦耗時大約 80,000 cpu 工作時 。2023年8月17日,在 crypto 2004 的 rump 會議上,wang, feng, lai, 和 yu 宣布了攻擊 md5、sha-0 和其他雜湊函式的初步結果。他們對 sha-0 攻擊複雜到 240 位元,這意謂的他們攻擊的成果比 joux 還有其他人所做的更好。請參見 md5 安全性。該次 rump 會議的簡短摘要可以在 這裡找到,而他們在 sci.crypt 的討論,例如: 這些結果建議計畫使用 sha-1 作為新的密碼系統的人需要重新考慮。

二、密碼學實驗系統實現sha-1(略)

三、sha-1偽碼描述

四、sha-1演算法的實現方法

步驟一(訊息填充):

讀入一串字串作為訊息(最大長度為 位,訊息長度用64位二進位制數描述),將字串轉化為二進位制,新增填充位(乙個1或若干個0)。在訊息最後新增適當的填充位使得資料的長度滿足=448mod512,剩餘64位用於長度描述。

演算法描述:

void w(char p,int w[32]) //將輸入的字串化為二進位制並分組

flag=k; //flag為輸入字串的位數

b[k++]=1; //填充乙個1其餘位補0

for(;k<512;k++) b[k]=0;

n=turn(flag,s,2);

for(l=511;l>511-n;l--) //將長度新增到資料塊

b[l]=s[e++];

l=0;

for(i=0;i<16;i++) //將512個字分為16(*32)組

for(j=0;j<32;j++)

for(;i<80;i++) //產生其餘64組

}

步驟二(迴圈運算):

以512位資料塊為單位處理訊息。演算法的核心是乙個包含四人迴圈的模組,每個迴圈由20個處理步驟組成(見教材p153)。其中四個基本邏輯函式定義如下:

演算法描述:

void sha(int ht,int k[32],int h[32],int w[32]) //求a、b、c、d、e的值

for(i=0;i<5;i++) //h0=h0+a,…h4=h4+e

add(n[i],h[i],temp[i]);

for(i=0;i<5;i++) //將五個暫存器的值組合成訊息摘要

for(j=0;j<32;j++)

ht[t++]=temp[i][j];

}

SHA1加密 c實現

在vs2013下編譯且成功實現。sha1加密演算法實現思路 前提 需要乙個 unsigned long w 80 unsigned long h 5 unsigned long a,b,c,d,e unsigned long temp 對明文首先進行填充,假設明文為p,則p的bit長度要滿足 512...

SHA1演算法實現及詳解

1 sha1演算法簡介 安全雜湊演算法 secure hash algorithm 主要適用於數字簽名標準 digital signature standard dss 裡面定義的數字簽名演算法 digital signature algorithm dsa 對於長度小於2 64位的訊息,sha1會...

SHA1演算法原理

1 sha1演算法簡介 安全雜湊演算法 secure hash algorithm 主要適用於數字簽名標準 digital signature standard dss 裡面定義的數字簽名演算法 digital signature algorithm dsa 對於長度小於2 64位的訊息,sha1會...