剛好最近項目中需要用到一點加密的東西,java安全類庫提供了一個java.security.MessageDigest類,此 MessageDigest 類為應用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的單向哈希函數,它接收任意大小的數據,并輸出固定長度的哈希值。有現成的當然是最好的,省事省力。
MD5的非常有實際應用性。有網友給出這樣的描述,可以參照一下:http://blog.csdn.net/Daping_Zhang/archive/2005/05/28/382688.aspx
該類的getInstance(String algorithm)
方法返回一個MessageDigest的實體,加密的一系統的digest()
方法和update(byte input)方法。加密后返回一個byte[],16位,我們經常見到很多開源網站的下載地址會有一個[md5]的鏈接,打開其實就是一小段文本內容。例如:
MD5 (commons-logging-1.1.1-bin.zip) = f88520ed791673aed6cc4591bc058b55
這是Jakarta的logging組件下載時提供的MD5摘要信息,是對這個zip包進行全文加密生成的摘要,摘要碼就是后面的f88520ed791673aed6cc4591bc058b55,如果你下載以后,按照MD5的算法生成自己的摘要,如果這二個摘要一樣,就證明這個文件是沒有被人篡改過的。
遇到的問題是Java的MessageDigest類執行后返回的byte[16]得轉換成十六進制的字符串,如果直接用new String(byte[]),得到的結果將是不正確的。算法有很多網友提供了,照搬了。比較有趣的是,commons-logging提供的那個MD5居然和我自己生成的不一樣(難道文件被修改過?),后來嘗試了其它地方提供的MD5碼,都沒有問題。
有很多相關的現成代碼,搜集了一下整理如下(經過驗證):





















































































剛進場的時候戲就落幕