| | |
| | | import org.apache.commons.codec.binary.Hex; |
| | | /** |
| | | * MD5加盐加密 |
| | | * |
| | | * @author |
| | | */ |
| | | public class Md5Util { |
| | | private static int m16 = 16; |
| | | |
| | | private static int m48 = 48; |
| | | |
| | | private static int m3 = 3; |
| | | |
| | | /** |
| | | * 生成含有随机盐的密码 |
| | | */ |
| | |
| | | StringBuilder sb = new StringBuilder(16); |
| | | sb.append(r.nextInt(99999999)).append(r.nextInt(99999999)); |
| | | int len = sb.length(); |
| | | if (len < 16) { |
| | | for (int i = 0; i < 16 - len; i++) { |
| | | 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 < 48; i += 3) { |
| | | 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; |
| | |
| | | public static boolean verify(String password, String md5) { |
| | | char[] cs1 = new char[32]; |
| | | char[] cs2 = new char[16]; |
| | | for (int i = 0; i < 48; i += 3) { |
| | | 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); |