【密碼學】基於Java的MD5加密實現方式
阿新 • • 發佈:2018-12-19
1.什麼是MD5
MD5的典型應用是對一段Message(位元組串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt檔案中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個檔案給別人,別人如果修改了檔案中的任何內容,你對這個檔案重新計算MD5時就會發現(兩個MD5值不相同)。如果再有一個第三方的認證機構,用MD5還可以防止檔案作者的“抵賴”,這就是所謂的數字簽名應用。
2.Java中實現MD5
/** * MD5加密方式(1) * @param message * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static String md5Encode(String message) throws NoSuchAlgorithmException, UnsupportedEncodingException { //得到一個資訊的摘要器 MessageDigest digest = MessageDigest.getInstance("MD5"); byte [] result = digest.digest(message.getBytes("UTF-8")); StringBuffer buffer = new StringBuffer(); //把每一個byte 做一個與運算 0xff for(byte b:result) { int number = b&0xff; String str = Integer.toHexString(number); if(str.length()==1) { buffer.append("0"); } buffer.append(str); } //標準的MD5加密後的結果 return buffer.toString().toUpperCase(); }
/** * 普通的MD5加密方式(2) * @param message * @return * @throws UnsupportedEncodingException * @throws NoSuchAlgorithmException */ public static String publicMd5Encode(String message) throws UnsupportedEncodingException, NoSuchAlgorithmException { char [] haxDigests = {'0','1','2','3','4','5','6','7','8','9','A', 'B','C','D','E','F'}; byte [] result = message.getBytes("UTF-8"); //獲得MD5摘要演算法的 MessageDigest物件 MessageDigest md5Digest = MessageDigest.getInstance("MD5"); //使用指定的位元組更新摘要 md5Digest.update(result); //獲得密文 byte [] md = md5Digest.digest(); int j = md.length; char [] str = new char[j*2]; int k = 0; for(int i=0;i<j;i++) { byte byte0 = md[i]; str[k++] = haxDigests[byte0>>4&0xf]; str[k++] = haxDigests[byte0&0xf]; } return new String(str); }
public static void main(String[] args) { String Md5=""; String pMd5 = ""; try { Md5 = md5Encode("上海"); pMd5 = publicMd5Encode("上海"); } catch (Exception e) { e.printStackTrace(); System.out.println("加密資料失敗"); } System.out.println("方式1:"+Md5);//E94E8BD35FC8144F38FD1EBC1F81AB36 System.out.println("方式2:"+pMd5);//E94E8BD35FC8144F38FD1EBC1F81AB36 }
注意:message.getBytes("UTF-8"),將字串變為位元組陣列的時候,需要設定一個編碼格式,如果不設定的很可能導致生成的MD5加密結果與其他人生成的加密結果不一致
參考:https://blog.csdn.net/zjx2016/article/details/75069169/