1. 加密方式
MD5一般的加密方式是下面这种方式
public String Md5(String str) {
if (str.equals("")) {
return null;
}
try {
byte[] btInput = str.getBytes();
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest digest = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
digest.update(btInput);
// 获得密文
byte[] md = digest.digest();
return ByteUtil.byte2HexStr(md, 16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
测试加密结果如下
原文:123456
md5 16位:965EB72C92A549DD
md5 32位:96E79218965EB72C92A549DD5A330112
为了加密的强度需要我们一般使用两次md5
如下所示
public String Md5Twice(String str) {
if (str.equals("")) {
return null;
}
try {
byte[] btInput = str.getBytes();
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest digest = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
digest.update(btInput);
// 获得密文
byte[] md = digest.digest();
// 两次md5
digest.update(md);
byte[] md2 = digest.digest();
return ByteUtil.byte2HexStr(md2, 16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
测试结果如下
原文:123456
md5 twice 16位:5A03F812751F504C
md5 twice 32位:4280D89A5A03F812751F504CC10EE8A5
2. 加密后的格式
MD5 加密后的位数一般为两种,16 位与 32 位。16 位实际上是从 32 位字符串中,取中间的第 9 位到第 24 位的部分,用 Java 语言来说,即:
str.substring(8, 24);
MD5 加密后的字符串又分为大写与小写两种。
所以一个 “123456” 字符串,MD5 加密后的结果类型有这些: