導航:首頁 > 源碼編譯 > sha1演算法c語言

sha1演算法c語言

發布時間:2022-03-15 22:30:54

Ⅰ c語言 實現sha1演算法

你再知道裡面搜「sha1演算法」就有。void sha1_finish( sha1_context *ctx, uint8 digest[20] )函數就是你要的。

Ⅱ SHA1的SHA1演算法描述

在SHA1演算法中,我們必須把原始消息(字元串,文件等)轉換成位字元串。SHA1演算法只接受位作為輸入。假設我們對字元串「abc」產生消息摘要。首先,我們將它轉換成位字元串如下:
01100001 01100010 01100011
―――――――――――――
『a』=97 『b』=98 『c』=99
這個位字元串的長度為24。下面我們需要5個步驟來計算消息摘要MAC。 消息必須進行補位,以使其長度在對512取模以後的余數是448。也就是說,(補位後的消息長度)%512 = 448。即使長度已經滿足對512取模後余數是448,補位也必須要進行。
補位是這樣進行的:先補一個1,然後再補0,直到長度滿足對512取模後余數是448。總而言之,補位是至少補一位,最多補512位。還是以前面的「abc」為例顯示補位的過程。
原始信息: 01100001 01100010 01100011
補位第一步:01100001 01100010 01100011 1
首先補一個「1」
補位第二步:01100001 01100010 01100011 10…..0
然後補423個「0」
我們可以把最後補位完成後的數據用16進制寫成下面的樣子
61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000
經過以上的處理之後,數據的長度是448了,我們可以進行下一步操作。 所謂的補長度是將原始數據的長度補到已經進行了補位操作的消息後面。通常用一個64位的數據來表示原始消息的長度。如果消息長度不大於2^64,那麼第一個字就是0。在進行了補長度的操作以後,整個消息就變成下面這樣了(16進制格式)
61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000018
如果原始的消息長度超過了512,我們需要將它補成512的倍數。然後我們把整個消息分成一個一個512位的數據塊,分別處理每一個數據塊,從而得到消息摘要。 一系列的常量字K(0), K(1), ... , K(79),如果以16進制給出。它們如下:
Kt = 0x5A827999 (0 <= t <= 19)
Kt = 0x6ED9EBA1 (20 <= t <= 39)
Kt = 0x8F1BBCDC (40 <= t <= 59)
Kt = 0xCA62C1D6 (60 <= t <= 79). 在SHA1中我們需要一系列的函數。每個函數ft (0 <= t <= 79)都操作32位字B,C,D並且產生32位字作為輸出。ft(B,C,D)可以如下定義
ft(B,C,D) = (B AND C) or ((NOT B) AND D) ( 0 <= t <= 19)
ft(B,C,D) = B XOR C XOR D (20 <= t <= 39)
ft(B,C,D) = (B AND C) or (B AND D) or (C AND D) (40 <= t <= 59)
ft(B,C,D) = B XOR C XOR D (60 <= t <= 79). 必須使用進行了補位和補長度後的消息來計算消息摘要。計算需要兩個緩沖區,每個都由5個32位的字組成,還需要一個80個32位字的緩沖區。第一個5個字的緩沖區被標識為A,B,C,D,E。第二個5個字的緩沖區被標識為H0, H1, H2, H3, H4
。80個字的緩沖區被標識為W0, W1,..., W79
另外還需要一個一個字的TEMP緩沖區。
為了產生消息摘要,在第3.2部分中定義的512位(16個字)的數據塊M1, M2,..., Mn
會依次進行處理,處理每個數據塊Mi 包含80個步驟。
在處理所有數據塊之前,緩沖區{Hi} 被初始化為下面的值(16進制)
H0 = 0x67452301
H1 = 0xEFCDAB89
H2 = 0x98BADCFE
H3 = 0x10325476
H4 = 0xC3D2E1F0.
現在開始處理M1, M2, ... , Mn。為了處理 Mi,需要進行下面的步驟
(1). 將 Mi 分成 16 個字 W0, W1, ... , W15, W0 是最左邊的字
(2). 對於 t = 16 到 79 令
W[t] = S1(W[t-3] XOR W[t-8] XOR W[t-14] XOR W[t-16]).
(3). 令 A = H0, B = H1, C = H2, D = H3, E = H4.
(4) 對於 t = 0 到 79,執行下面的循環
TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt;
E = D; D = C; C = S30(B); B = A; A = TEMP;
(5). 令 H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.
在處理完所有的 Mn, 後,消息摘要是一個160位的字元串,以下面的順序標識
H0 H1 H2 H3 H4.
對於SHA256,SHA384,SHA512。你也可以用相似的辦法來計算消息摘要。對消息進行補位的演算法完全是一樣的。
SHA1在許多安全協議中廣為使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被視為是MD5(更早之前被廣為使用的散列函數)的後繼者。

Ⅲ 誰能幫我寫一個變種的SHA1演算法的源碼內附具體要求。最好用JAVA或者C語言,能封裝成圖形程序最好

首先,sha1不是加密演算法,大多數情況下它的輸出相對輸入是明顯有數據損失的,它只是信息摘要演算法
第二,作為手工實現過(按rfc提供的範本改寫)sha1的人來說,仍舊聽不懂你說的什麼m1,m2,m3(只是每次512bits處理時有4個階段,第2和4階段用的位運算一致而已),sha1計算摘要時確實以512bits分塊,在產生digest時,大部分情況下也需填補最末一塊並如樓主所述,以0補齊

因此,推薦樓主搜索rfc3174並查看,在文檔末尾,有sha1的c實現,可以按照你的要求改成任何形式

Ⅳ C# SHA1演算法

32位無符號整數類型常量,0x5A827999這個是16進制數,具體是什麼用那就不知道,要看在什麼地方用了。

Ⅳ 求sha1演算法原理及其c語言源代碼,最好能說說sha1與md5的區別!

http://..com/question/9883110.html?si=2&wtp=wk給你個鏈接吧!答案太多了,貼不上去!

Ⅵ C語言 sha1編碼 返回二進制源碼怎麼寫

sha1函數返回的就是經過sha1演算法計算過後的值

Ⅶ c# SHA1演算法如何寫

首先引用這個命名空間
using System.Security.Cryptography;

//建立SHA1對象
SHA1 sha = new SHA1CryptoServiceProvider();

//將mystr轉換成byte[]
ASCIIEncoding enc = new ASCIIEncoding();
byte[] dataToHash = enc.GetBytes(mystr);

//Hash運算
byte[] dataHashed = SHA1.ComputeHash(dataToHash );

//將運算結果轉換成string
string hash = BitConverter.ToString(dataHashed).Replace("-", "");

return hash;

Ⅷ sha1演算法會不會導致信息不可還原

Algorithm)又叫安全哈希加密技術,是當今世界最先近的加密演算法。主要用於文件身份識別、數字簽名和口令加密等。對於明文信息A,通過SHA1演算法,生成一條160位長的識別碼B。且明文信息A和識別碼B之間同時滿足以下條件:1、對於任意兩條不同的明文信息A1、A2,其識別碼B1、B2都不相同。2、無法通過逆向演算法由識別碼B倒推出明文信息A。MOONCRM的用戶密碼採用SHA1加密存儲,即伺服器上存儲的只是由用戶密碼生成的識別碼,而用戶密碼本身並沒有存儲在伺服器上。用戶輸入登陸口令時,系統會根據輸入口令生成相應識別碼並與系統中所存儲的識別碼進行比較,如二者一致,則認為口令正確。系統中沒有存儲用戶原始的口令值,即使有人獲得口令文件,也無法破解用戶登陸密碼,確保用戶密碼絕對安全。

Ⅸ 關於SHA1的幾個子函數

TabIgenerete: 表生成。
Hash_point: hash一個點
hash_to_string:hash到一個字串里。
GetCmdLineInteger:得到命令行的一個整數。
FreeMem :釋放內存。

閱讀全文

與sha1演算法c語言相關的資料

熱點內容
安利微購app怎麼樣 瀏覽:925
ios程序員適合什麼鍵盤 瀏覽:718
如何把加密pdf轉換成excel 瀏覽:619
文件夾7z如何壓縮成rar 瀏覽:866
android藍牙低功耗 瀏覽:273
如何下載好大夫app 瀏覽:964
linux查看txt 瀏覽:153
linux硬碟格式化命令 瀏覽:520
神舞幻想存檔放哪個文件夾 瀏覽:652
怎樣把pdf轉為圖片 瀏覽:337
51單片機指令jz 瀏覽:93
ug後處理演算法更改 瀏覽:372
河南伺服器負載均衡是什麼 瀏覽:686
docker容器執行命令 瀏覽:152
程序員成本管理思路 瀏覽:171
租界租界pdf 瀏覽:624
ipad上pdf 瀏覽:650
程序員沒錢買房完整版 瀏覽:817
貞觀政要pdf 瀏覽:719
php列印錯誤信息 瀏覽:337