java弗成逆加密算法之md5加密算法應用示例。本站提示廣大學習愛好者:(java弗成逆加密算法之md5加密算法應用示例)文章只能為提供參考,不一定能成為您想要的結果。以下是java弗成逆加密算法之md5加密算法應用示例正文
MD5的全稱是Message-Digest Algorithm 5,Message-Digest泛指字節串(Message)的Hash變換,就是把一個隨意率性長度的字節串變換成必定長的年夜整數。MD5將隨意率性長度的"字節串"變換成一個128bit的年夜整數,而且它是一個弗成逆的字符串變換算法,換句話說就是,即便你看到源法式和算法描寫,也沒法將一個MD5的值變換回原始的字符串,從數學道理上說,是由於原始的字符串有沒有窮多個,這有點象不存在反函數的數學函數。
import java.security.MessageDigest;
public class Test_MD5{
public final static String MD5(String s) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
try {
byte[]strTemp=s.getBytes();
//應用MD5創立MessageDigest對象
MessageDigestmdTemp=MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[]md=mdTemp.digest();
intj=md.length;
charstr[]=newchar[j*2];
intk=0;
for(inti=0;i<j;i++){
byteb=md[i];
//System.out.println((int)b);
//將沒個數(int)b停止雙字節加密
str[k++]=hexDigits[b>>4&0xf];
str[k++]=hexDigits[b&0xf];
}
returnnewString(str);
}catch(Exceptione){returnnull;}
}
//測試
publicstaticvoidmain(String[]args){
System.out.println("caidao的MD5加密後:\n"+Test_MD5.MD5("caidao"));
System.out.println("http://www.jb51.net/的MD5加密後:\n"+Test_MD5.MD5("http://www.jb51.net/"));
}
}
MD5的典范運用是對一段Message(字節串)發生fingerprint(指紋),以避免被"改動"。舉個例子,你將一段話寫在一個叫readme.txt文件中,並對這個readme.txt發生一個MD5的值並記載在案,然後你可以流傳這個文件給他人,他人假如修正了文件中的任何內容,你對這個文件從新盤算MD5時就會發明。假如再有一個第三方的認證機構,用MD5還可以避免文件作者的"狡賴",這就是所謂的數字****運用。
MD5還普遍用於加密息爭密技巧上,在許多操作體系中,用戶的暗碼是以MD5值(或相似的其它算法)的方法保留的,用戶Login的時刻,體系是把用戶輸出的暗碼盤算成MD5值,然後再去和體系中保留的MD5值停止比擬,而體系其實不"曉得"用戶的暗碼是甚麼。
MD5實際上是一種單向的哈希散列,一些黑客破獲這類暗碼的辦法是一種被稱為"跑字典"的辦法。有兩種辦法獲得字典,一種是平常匯集的用做暗碼的字符串表,另外一種是用分列組合辦法生成的,先用MD5法式盤算出這些字典項的MD5值,然後再用目的的MD5值在這個字典中檢索。
即便假定暗碼的最年夜長度為8,同時暗碼只能是字母和數字,共26+26+10=62個字符,分列組合出的字典的項數則是P(62,1)+P(62,2)....+P(62,8),那也曾經是一個很地理的數字了,存儲這個字典就須要TB級的磁盤組,並且這類辦法還有一個條件,就是能取得目的賬戶的暗碼MD5值的情形下才可以。