md5資訊摘要演算法(md5 message-digest algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出乙個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。md5由美國密碼學家羅納德·李維斯特(ronald linn rivest)設計,於2023年公開,用以取代md4演算法。這套演算法的程式在 rfc 1321 標準中被加以規範。2023年後該演算法被證實存在弱點,可以被加以破解,對於需要高度安全性的資料,專家一般建議改用其他演算法,如sha-2。2023年,證實md5演算法無法防止碰撞(collision),因此不適用於安全性認證,如ssl公開金鑰認證或是數字簽名等用途。
待加密資訊處理
md5對待加密的字串的處理是對每512進行一次分割,形如 n*512+r,這裡的r是餘下的位數,要求r=448。這個r分為幾種情況:
r=0時,需要補位,單補上乙個512位的分組,因為還要加入最後64個位的字串長度。
r<448時,則需要補位到448位,後面新增64位的字串長度。
r>448時,除了補滿這一分組外,還要再補上乙個512位的分組後面新增64位的字串長度。
補位的形式是先填充乙個1,再接無數個0,直到補足512位。最少補1位,最多補512位.
初始化md5快取器(鏈結變數)
md5運算要用到乙個128位的md5快取器,用來儲存中間變數和最終結果。該快取器又可看成是4個32位的暫存器a、b、c、d,初始化為 [8] :
a: 0x 01 23 45 67
b: 0x 89 ab cd ef
c: 0x fe dc ba 98
d: 0x 76 54 32 10
但考慮到記憶體資料儲存大小端的問題我們將其賦值為:
a=0x 67 45 23 01
b=0x ef cd ab 89
c=0x 98 ba dc fe
d=0x 10 32 54 76
處理資料階段
首先定義4個非線性函式f、g、h、i,對輸入的報文運算以512位資料段為單位進行處理。對每個資料段都要進行4輪的邏輯處理,在4輪中分別使用4個不同的函式f、g、h、i。每一輪以abcd和當前的512位的塊為輸入,處理後送入abcd(128位)
拼接輸出結果
資訊摘要最終處理成以a, b, c, d 的形式輸出。也就是開始於a的低位在前的順序位元組,結束於d的高位在前的順序位元組
public
class
md5utils;/*
*向左位移數,計算方法未知
*/private
final
int s=
;/**初始化函式
*/private
void
init()
/* *移動一定位數
*/private
intshift
(int a,
int s)
/* *主迴圈
*/private
void
mainloop
(int m)
else
if(i<32)
else
if(i<48)
else
int tmp=d;
d=c;
c=b;
b=b+
shift
(a+f+k[i]
+m[g]
,s[i]);
a=tmp;
} atemp=a+atemp;
btemp=b+btemp;
ctemp=c+ctemp;
dtemp=d+dtemp;}/*
*填充函式
*處理後應滿足bits≡448(mod512),位元組就是bytes≡56(mode64)
*填充方式為先加乙個0,其它位補零
*最後加上64位的原來長度
*/private
int[
]add
(string str)
int i;
for(i=
0;ilength()
;i++
) strbyte[i>>2]
|=0x80
<<
((i%4)
*8);
//尾部新增1
/* *新增原長度,長度指位的長度,所以要乘8,然後是小端序,所以放在倒數第二個,這裡長度只用了32位
*/strbyte[num*16-
2]=str.
length()
*8;return strbyte;}/*
*呼叫函式
*/public string ge***5
(string source)
mainloop
(num);}
return
changehex
(atemp)
+changehex
(btemp)
+changehex
(ctemp)
+changehex
(dtemp);}
/* *整數變成16進製制字串
*/private string changehex
(int a)
return str;}/*
*單例*/
private
static md5utils instance;
public
static md5utils getinstance()
return instance;
}private
md5utils()
;public
static
void
main
(string[
] args)
}
MD5加密工具類
這是乙個個人認為非常好用的使用md5 salt加密的工具類,一部分 由網上搜尋而得,一部分自己修改新增之後而得。使用這個工具類,非常簡單,從前台拿到密碼passwd,直接hexutil.getencryptedpwd passwd 就可以返回乙個長度為56的字串,可以用來儲存到 資料庫中,相反,登入...
MD5加密工具
問題引出 md5演算法加密使用者專案操作中我們對一些敏感資訊進行加密,需要注意的是,md5加密是不可逆的。工具類 寫乙個md5演算法,執行結果與mysql的md5 函式相同 將明文密碼轉成md5密碼 123456 e10adc3949ba59abbe56e057f20f883e public cla...
工具 MD5加密
md5 tanajiya.tar.gz 0ca175b9c0f726a831d895e269332461 這就是tanajiya.tar.gz檔案的數字簽名。md5將整個檔案當作乙個大文字資訊,通過其不可逆的字串變換演算法,產生了這個唯一的md5資訊摘要。為了讓讀者朋友對md5的應用有個直觀的認識,...