1. package book.string;  
  2.  
  3. import java.security.MessageDigest;  
  4.  
  5. /**  
  6.  * 对密码进行加密和验证的程序  
  7.  */ 
  8. public class Password {  
  9.  
  10.     /** 十六进制下数字到字符的映射数组 */ 
  11.     private final static String[] hexDigits = { "0""1""2""3""4""5",  
  12.             "6""7""8""9""a""b""c""d""e""f" };  
  13.  
  14.     /**  
  15.      * 把inputString加密。  
  16.      * @param inputString   待加密的字符串  
  17.      * @return  
  18.      */ 
  19.     public static String createPassword(String inputString){  
  20.         return encodeByMD5(inputString);  
  21.     }  
  22.     /**  
  23.      * 验证输入的密码是否正确  
  24.      * @param password      真正的密码(加密后的真密码)  
  25.      * @param inputString   输入的字符串  
  26.      * @return  
  27.      */ 
  28.     public static boolean authenticatePassword(String password, String inputString){  
  29.         if (password.equals(encodeByMD5(inputString))){  
  30.             return true;  
  31.         } else {  
  32.             return false;  
  33.         }  
  34.     }  
  35.  
  36.     /**  
  37.      * 对字符串进行MD5编码  
  38.      * @param originString  
  39.      * @return  
  40.      */ 
  41.     private static String encodeByMD5(String originString) {  
  42.         if (originString != null){  
  43.             try {  
  44.                 MessageDigest md = MessageDigest.getInstance("MD5");  
  45.                 byte[] results = md.digest(originString .getBytes());  
  46.                 String resultString = byteArrayToHexString(results);  
  47.                 return resultString.toUpperCase();  
  48.             } catch (Exception ex) {  
  49.                 ex.printStackTrace();  
  50.             }  
  51.         }  
  52.         return null;  
  53.     }  
  54.       
  55.     /**  
  56.      * 转换字节数组为16进制字串  
  57.      *   
  58.      * @param b  字节数组  
  59.      * @return 十六进制字串  
  60.      */ 
  61.     private static String byteArrayToHexString(byte[] b) {  
  62.         StringBuffer resultSb = new StringBuffer();  
  63.         for (int i = 0; i < b.length; i++) {  
  64.             resultSb.append(byteToHexString(b[i]));  
  65.         }  
  66.         return resultSb.toString();  
  67.     }  
  68.  
  69.     /**  
  70.      * 将一个字节转化成16进制形式的字符串  
  71.      * @param b  
  72.      * @return  
  73.      */ 
  74.     private static String byteToHexString(byte b) {  
  75.         int n = b;  
  76.         if (n < 0)  
  77.             n = 256 + n;  
  78.         int d1 = n / 16;  
  79.         int d2 = n % 16;  
  80.         return hexDigits[d1] + hexDigits[d2];  
  81.     }  
  82.  
  83.  
  84.     public static void main(String[] args) {  
  85.         String password = Password.createPassword("888888");  
  86.         System.out.println("对888888用MD5摘要后的字符串:" + password);  
  87.         String inputString = "8888";  
  88.         System.out.println("8888与密码匹配?" + Password.authenticatePassword(password, inputString));  
  89.         inputString = "888888";  
  90.         System.out.println("888888与密码匹配?" + Password.authenticatePassword(password, inputString));  
  91.     }