欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java不可逆加密算法之md5加密算法使用示例

 更新時間:2014年01月21日 14:09:26   作者:  
MD5的全稱是Message-Digest Algorithm 5,他是一個不可逆的字符串加密算法,下面使用示例說明他的用法

MD5的全稱是Message-Digest Algorithm 5,Message-Digest泛指字節(jié)串(Message)的Hash變換,就是把一個任意長度的字節(jié)串變換成一定長的大整數(shù)。MD5將任意長度的"字節(jié)串"變換成一個128bit的大整數(shù),并且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數(shù)學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數(shù)的數(shù)學函數(shù)。

復制代碼 代碼如下:

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創(chuàng)建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);
//將沒個數(shù)(int)b進行雙字節(jié)加密
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.dbjr.com.cn/的MD5加密后:\n"+Test_MD5.MD5("http://www.dbjr.com.cn/"));
}
}

MD5的典型應用是對一段Message(字節(jié)串)產(chǎn)生fingerprint(指紋),以防止被"篡改"。舉個例子,你將一段話寫在一個叫readme.txt文件中,并對這個readme.txt產(chǎn)生一個MD5的值并記錄在案,然后你可以傳播這個文件給別人,別人如果修改了文件中的任何內(nèi)容,你對這個文件重新計算MD5時就會發(fā)現(xiàn)。如果再有一個第三方的認證機構(gòu),用MD5還可以防止文件作者的"抵賴",這就是所謂的數(shù)字****應用。
MD5還廣泛用于加密和解密技術(shù)上,在很多操作系統(tǒng)中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的,用戶Login的時候,系統(tǒng)是把用戶輸入的密碼計算成MD5值,然后再去和系統(tǒng)中保存的MD5值進行比較,而系統(tǒng)并不"知道"用戶的密碼是什么。
MD5理論上是一種單向的哈希散列,一些黑客破獲這種密碼的方法是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然后再用目標的MD5值在這個字典中檢索。
即使假設(shè)密碼的最大長度為8,同時密碼只能是字母和數(shù)字,共26+26+10=62個字符,排列組合出的字典的項數(shù)則是P(62,1)+P(62,2)....+P(62,8),那也已經(jīng)是一個很天文的數(shù)字了,存儲這個字典就需要TB級的磁盤組,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。

相關(guān)文章

  • druid連接泄露故障全面分析

    druid連接泄露故障全面分析

    這篇文章主要介紹了druid連接泄露故障全面分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java中Class.forName方法的作用詳解

    java中Class.forName方法的作用詳解

    Class.forName(xxx.xx.xx) 返回的是一個類,但Class.forName方法的作用到底是什么終?下面這篇文章就來給大家詳細介紹了關(guān)于java中Class.forName方法的作用,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • 詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用

    詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用

    這篇文章主要介紹了詳解 Java繼承關(guān)系下的構(gòu)造方法調(diào)用的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • 深入解析Java中ThreadLocal線程類的作用和用法

    深入解析Java中ThreadLocal線程類的作用和用法

    ThreadLocal為解決多線程程序的并發(fā)問題提供了一種新的思路,ThreadLocal并不是一個Thread,而是Thread的局部變量,本文就來深入解析Java中ThreadLocal線程類的作用和用法.
    2016-05-05
  • java jvm兩種存儲區(qū)的類型知識點講解

    java jvm兩種存儲區(qū)的類型知識點講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java jvm兩種存儲區(qū)的類型知識點講解內(nèi)容,有興趣的朋友們可以學習下。
    2021-03-03
  • 使用SpringBoot開發(fā)Restful服務實現(xiàn)增刪改查功能

    使用SpringBoot開發(fā)Restful服務實現(xiàn)增刪改查功能

    Spring Boot是由Pivotal團隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。這篇文章主要介紹了基于SpringBoot開發(fā)一個Restful服務,實現(xiàn)增刪改查功能,需要的朋友可以參考下
    2018-01-01
  • Spring?Bean獲取方式的實例化方式詳解

    Spring?Bean獲取方式的實例化方式詳解

    工作中需要對一個原本加載屬性文件的工具類修改成對數(shù)據(jù)庫的操作當然,ado層已經(jīng)寫好,但是需要從Spring中獲取bean,然而,工具類并沒有交給Spring來管理,所以需要通過方法獲取所需要的bean。于是整理了Spring獲取bean的幾種方法
    2023-03-03
  • Java基礎(chǔ)之異常處理操作示例

    Java基礎(chǔ)之異常處理操作示例

    這篇文章主要介紹了Java基礎(chǔ)之異常處理操作,涉及java異常捕獲、拋出異常、自定義異常處理相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • java使用Socket實現(xiàn)文件上傳功能

    java使用Socket實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了java使用Socket實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 淺析非對稱加密在接口參數(shù)中的實現(xiàn)

    淺析非對稱加密在接口參數(shù)中的實現(xiàn)

    接口層做數(shù)據(jù)加密應該算是老生常談的一件事了,業(yè)界用的比較多的,不外乎是對稱加密,非對稱加密以及兩者的結(jié)合。本文就來聊聊非對稱加密在接口參數(shù)中的實現(xiàn),希望對大家有所幫助
    2023-02-02

最新評論