安全雜湊演算法(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 ...