介紹MD5加密算法的基本情況。MD5的全稱是Message-Digest Algorithm 5,由麻省理工學院計算機科學實驗室和RSA數據安全公司在90年代初發明,由MD2、MD3和MD4發展而來。
消息摘要(Message-Digest)壹般指消息的哈希變換,即把任意長度的字節串變換成壹定長度的大整數。請註意,我使用了“字節串”這個詞,而不是“字符串”,因為這種轉換只與字節的值有關,與字符集或編碼方法無關。
MD5將任意長度的“字節串”轉換成128bit的大整數,是壹種不可逆的字符串轉換算法。換句話說,即使妳看到了源程序和算法的描述,妳也無法將壹個MD5值轉換回原來的字符串。從數學上講,是因為有無限個原串,有點像沒有反函數的數學函數。
MD5的典型應用是為消息(字節串)生成指紋,以防止其被篡改。例如,如果您在壹個名為readme.txt的文件中寫了壹段話,並為這個readme.txt生成壹個MD5值並記錄下來,那麽您就可以將這個文件傳播給他人。如果其他人修改了文件中的任何內容,當您重新計算該文件的MD5時,您會發現它。如果有第三方認證機構,MD5還可以防止文檔作者的“否認”,也就是所謂的數字簽名應用。
MD5也廣泛應用於加密和解密技術。在很多操作系統中,用戶的密碼是以MD5值的形式保存的(或者類似的其他算法)。當用戶登錄時,系統將用戶輸入的密碼計算為MD5值,然後與系統中保存的MD5值進行比較,但系統並不“知道”用戶的密碼是什麽。
壹些黑客破解這個密碼的方式是壹種叫做“運行字典”的方法。字典的獲取方式有兩種,壹種是日常收集的用作密碼的字符串表,另壹種是通過排列組合的方法生成的。首先用MD5程序計算這些字典項的MD5值,然後在這個字典中查找目標的MD5值。
即使密碼的最大長度是8,並且密碼只能是字母和數字,***26+26+10=62個字符,字典中的條目數也是P (62,1)+P (62,2)...+P (62,8)。
在許多電子商務和社區應用中,管理用戶帳戶是最常用的基本功能之壹。盡管許多應用服務器提供了這些基本組件,但許多應用程序開發人員更喜歡使用關系數據庫來管理用戶,以獲得更大的管理靈活性。懶惰的方法是,用戶的密碼通常在經過純文本或簡單轉換後直接存儲在數據庫中。所以這些用戶的密碼對於軟件開發者或者系統管理員來說,可以說已經不是什麽秘密了。本文的目的是介紹Java Bean的MD5的實現,同時給出壹個用MD5處理用戶帳號密碼的例子。這種方法使得管理員和程序員無法看到用戶的密碼,盡管他們可以初始化密碼。但重要的壹點是保護用戶的密碼設置習慣。
MD加密算法的JAVA描述是:
導入Java . security . *;
導入Java . security . spec . *;
Md5類{
公共最終靜態字符串MD5(字符串s){
char hexDigits[] = {
0 '、' 1 '、' 2 '、' 3 '、' 4 '、' 5 '、' 6 '、' 7 '、' 8 '、' a '、' b '、' c '、' d '、' e '、' f ' };
嘗試{
byte[]strTemp = s . getbytes();
message digest MD temp = message digest . getinstance(" MD5 ");
MD temp . update(strTemp);
byte[]MD = MD temp . digest();
int j = md.length
char str[]= new char[j * 2];
int k = 0;
for(int I = 0;我& ltj;i++) {
byte byte 0 = MD[I];
str[k++]= hex digits[byte 0 & gt;& gt& gt4 & amp0xf];
str[k++]= hex digits[byte 0 & amp;0xf];
}
返回新字符串(str);
}
捕捉(異常e){
返回null
}
}
公共靜態void main(String[] args){
System.out.print(MD5。MD5(" XX "));
}