MD5加密工具類

2021-09-29 07:50:00 字數 2867 閱讀 9465

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的應用有個直觀的認識,...