¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.lf.server.helper; |
| | | |
| | | import org.apache.commons.codec.binary.Hex; |
| | | |
| | | import java.security.MessageDigest; |
| | | import java.util.Random; |
| | | |
| | | /** |
| | | * MD5帮å©ç±» |
| | | * @author WWW |
| | | */ |
| | | public class Md5Helper { |
| | | private final static int M3 = 3; |
| | | |
| | | private final static int M16 = 16; |
| | | |
| | | private final static int M48 = 48; |
| | | |
| | | /** |
| | | * çæå«æéæºççå¯ç |
| | | * |
| | | * @param password |
| | | * @return |
| | | */ |
| | | public static String generate(String password) { |
| | | Random r = new Random(); |
| | | StringBuilder sb = new StringBuilder(16); |
| | | sb.append(r.nextInt(99999999)).append(r.nextInt(99999999)); |
| | | |
| | | int len = sb.length(); |
| | | if (len < M16) { |
| | | for (int i = 0; i < M16 - len; i++) { |
| | | sb.append("0"); |
| | | } |
| | | } |
| | | |
| | | String salt = sb.toString(); |
| | | password = md5Hex(password + salt); |
| | | char[] cs = new char[48]; |
| | | for (int i = 0; i < M48; i += M3) { |
| | | cs[i] = password.charAt(i / 3 * 2); |
| | | char c = salt.charAt(i / 3); |
| | | cs[i + 1] = c; |
| | | cs[i + 2] = password.charAt(i / 3 * 2 + 1); |
| | | } |
| | | |
| | | return new String(cs); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªå¯ç æ¯å¦æ£ç¡® |
| | | * |
| | | * @param password |
| | | * @param md5 |
| | | * @return |
| | | */ |
| | | public static boolean verify(String password, String md5) { |
| | | char[] cs1 = new char[32]; |
| | | char[] cs2 = new char[16]; |
| | | for (int i = 0; i < M48; i += M3) { |
| | | cs1[i / 3 * 2] = md5.charAt(i); |
| | | cs1[i / 3 * 2 + 1] = md5.charAt(i + 2); |
| | | cs2[i / 3] = md5.charAt(i + 1); |
| | | } |
| | | String salt = new String(cs2); |
| | | |
| | | return md5Hex(password + salt).equals(new String(cs1)); |
| | | } |
| | | |
| | | /** |
| | | * è·ååå
è¿å¶å符串形å¼çMD5æè¦ |
| | | * |
| | | * @param src |
| | | * @return |
| | | */ |
| | | public static String md5Hex(String src) { |
| | | try { |
| | | MessageDigest md5 = MessageDigest.getInstance("MD5"); |
| | | byte[] bs = md5.digest(src.getBytes()); |
| | | |
| | | return new String(new Hex().encode(bs)); |
| | | } catch (Exception e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * å转 |
| | | * |
| | | * @param pass |
| | | * @return |
| | | */ |
| | | public static String reverse(String pass) { |
| | | StringBuilder sb = new StringBuilder(pass); |
| | | |
| | | return sb.reverse().toString(); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * éªè¯å¯ç |
| | | * |
| | | * @param originalPassword |
| | | * @param dbPassword |
| | | * @return |
| | | */ |
| | | public static boolean validatePassword(String originalPassword, String dbPassword) { |
| | | return verify(originalPassword, reverse(dbPassword)); |
| | | } |
| | | } |