java 對 安全雜湊演算法 SHA1 的實現

2021-07-02 16:17:49 字數 3310 閱讀 4365

安全雜湊演算法(secure hash algorithm)主要適用於數字簽名標準(digital signature standard dss)裡面定義的數字簽名演算法(digital signature algorithm dsa)。對於長度小於2^64位的訊息,sha1會產生乙個160位的訊息摘要。當接收到訊息的時候,這個訊息摘要可以用來驗證資料的完整性。在傳輸的 過程中,資料很可能會發生變化,那麼這時候就會產生不同的訊息摘要。

sha1有如下特性:不可以從訊息摘要中復原資訊;兩個不同的訊息不會產生同樣的訊息摘要。

package com.ss.util.secret;

public class sha1utils

public static string b64_hmac_sha1(string key, string data)

public static string b64_sha1(string s)

private static string binb2b64(int binarray) else }}

return cleanb64str(str);

}private static string binb2hex(int binarray)

return str;

}private static string binb2str(int bin)

return str;

}private static int bit_rol(int num, int cnt)

private static string cleanb64str(string str)

char trailchar = str.charat(len - 1);

string trailstr = "";

for (int i = len - 1; i >= 0 && str.charat(i) == trailchar; i--)

return str.substring(0, str.indexof(trailstr));

}private static int complete216(int oldbin)

int newbin = new int[16 - oldbin.length];

for (int i = 0; i < newbin.length; newbin[i] = 0, i++)

;return concat(oldbin, newbin);

}private static int concat(int oldbin, int newbin) else

}return retval;

}private static int core_hmac_sha1(string key, string data)

int ipad = new int[16];

int opad = new int[16];

for (int i = 0; i < 16; ipad[i] = 0, opad[i] = 0, i++)

;for (int i = 0; i < 16; i++)

int hash = core_sha1(concat(ipad, str2binb(data)), 512 + data.length() * chrsz);

return core_sha1(concat(opad, hash), 512 + 160);

}private static int core_sha1(int x, int len) else

int t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j)));

e = d;

d = c;

c = rol(b, 30);

b = a;

a = t;

}a = safe_add(a, olda);

b = safe_add(b, oldb);

c = safe_add(c, oldc);

d = safe_add(d, oldd);

e = safe_add(e, olde);

}int retval = new int[5];

retval[0] = a;

retval[1] = b;

retval[2] = c;

retval[3] = d;

retval[4] = e;

return retval;

}private static void dotest()

public static string hex_hmac_sha1(string key, string data)

private static int rol(int num, int cnt)

private static int safe_add(int x, int y)

private static int sha1_ft(int t, int b, int c, int d)

private static int sha1_kt(int t)

private static boolean sha1_vm_test()

public static string str_hmac_sha1(string key, string data)

public static string str_sha1(string s)

private static int str2binb(string str)

int len = 0;

for (int i = 0; i < tmp.length && tmp[i] != 0; i++, len++)

;int bin = new int[len];

for (int i = 0; i < len; i++)

return bin;

}private static int strechbinarray(int oldbin, int size)

int newbin = new int[size + 1];

for (int i = 0; i < size; newbin[i] = 0, i++)

;for (int i = 0; i < currlen; i++)

return newbin;

}public static void main(string args)

}

執行結果:

admin的sha1的值為:d033e22ae348aeb5660fc2140aec35850c4da997,length=40

雜湊函式 SHA1和SHA256演算法

sha2演算法是對sha1演算法的繼承。區別在於兩者的構造和簽名長度不同。sha 1通過4輪運算 每輪20步,共80步 將長度不超過264的輸入壓縮成為160bit的訊息摘要。初始化md緩衝區,需要160位來存放雜湊函式的初始變數 中間摘要和最終摘要。需要5個32位的暫存器。sha 1的框圖 sha...

SHA1演算法原理

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

SHA1 摘要演算法

sha1 演算法 訊息摘要演算法,把訊息按照512 bits進行分組,不斷的對5個int型變數進行計算,直到所有訊息都運算完畢。最終得到 160 bit 即 20 位元組的雜湊值。流程圖 c語言實現 用到的資料結構 sha1演算法的上下文,儲存一些狀態,中間資料,結果 typedef struct ...