import java.security.MessageDigest;
//MD5或者SHA加密为32位字符的具体算法,值得学习
//MD5密码的明文可以通过网站查询:https://www.cmd5.com/hash.aspx
//源码是来自系统
public class MD5 {
public static void main(String[] args) {
System.out.println(MD5toString("123456"));
System.out.println(MD5toString("1234567"));
System.out.println(MD5toString("12345678"));
System.out.println(MD5toString("12345679"));
System.out.println(MD5toString("123456790"));
}
public static String MD5toString(String s) {
try {
// 返回实现指定摘要算法的 MessageDigest对象 参数可以是sha或者MD5
MessageDigest md = MessageDigest.getInstance("md5");
// 使用指定的 byte 数组对摘要进行最后更新,然后完成摘要计算。
byte[] bytes = md.digest(s.getBytes("utf-8"));
return toHex(bytes);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static String toHex(byte[] bytes) {
// 个人在设计秘钥时可以更改字符串“0123456789ABCDEF”
final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
StringBuilder ret = new StringBuilder(bytes.length * 2);
for (int i = 0; i < bytes.length; i++) {
// 取byte数组元素的向右移动4位后与0x0f 即将元素的高四位变为第四位作为下标取HEX_DIGITS的元素
ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
// 取byte数组元素后与0x0f 即将元素的底四位作为下标取HEX_DIGITS的元素
ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
}
return ret.toString();
}
}