<pre name="code" class="java">package com.bjnlmf.nerc.account.until;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
public class PasswordUtil {
/**
* 生成含有随机盐的密码
*/
public static String generate(String password,String salt) {
password = md5Hex(password + salt);
return new String(password);
}
/**
* 生成盐
*/
public static String makeSalt(String phone) {
StringBuilder sb = new StringBuilder();
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss");
String nowTime = dateFormat.format( now );
sb.append(nowTime).append(phone);
String salt = sb.toString();
return md5Hex(salt);
}
/**
* 获取十六进制字符串形式的MD5摘要
*/
public static String md5Hex(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;
}
}
public static String MD5Token(String phone){
StringBuilder sb = new StringBuilder();
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss");
String startTime = dateFormat.format( now );
sb.append(startTime).append(","+phone);
String token=PasswordUtil.md5Hex(sb.toString());
return token;
}
public static void main(String[] args) {
String setSalt = makeSalt("13688889999");
System.out.println(setSalt);
String password = generate("admin",setSalt);
System.out.println(password);
System.out.println("22260e114f6ae/670609f3/5d0576c1-3518c18d:9f1e76f".equals(password));
}
}
06-05
504