MD5是網絡傳輸中最常用的算法,瞭解這個算法原理後就能大致知道加密是怎麼一回事了。
MD5是不可逆的,只能加密而不能解密。比如明文是yanzi1225627,得到MD5加密後的字符串是:14F2AE15259E2C276A095E7394DA0CA9
但不能由後面一大串倒推出yanzi1225627.因此可以用來存儲用戶輸入的密碼在服務器上。現在下載文件校驗文件是否中途被篡改也是用的它,原理參見:http://blog.csdn.net/forgotaboutgirl/article/details/7258109 無論在Android上還是pc上用java實現MD5都比較容易,因爲java已經把它做到了java.security.MessageDigest裏。下面是一個MD5Util.java類:
- package org.md5.util;
- import java.security.MessageDigest;
- public class MD5Util {
- public final static String getMD5String(String s) {
- char hexDigits[] = { '0', '1', '2', '3', '4',
- '5', '6', '7', '8', '9',
- 'A', 'B', 'C', 'D', 'E', 'F' };
- try {
- byte[] btInput = s.getBytes();
- //獲得MD5摘要算法的 MessageDigest 對象
- MessageDigest mdInst = MessageDigest.getInstance("MD5");
- //使用指定的字節更新摘要
- mdInst.update(btInput);
- //獲得密文
- byte[] md = mdInst.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++] = hexDigits[byte0 >>> 4 & 0xf];
- str[k++] = hexDigits[byte0 & 0xf];
- }
- return new String(str);
- }
- catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- }
/************************************MD5加密測試*****************************/
String srcString = "yanzi1225627";
System.out.println("MD5加密後 = " + MD5Util.getMD5String(srcString));