JAVA 消息摘要算法 MD5和SHA的代码
一、MD5算法
MD5即为消息摘要算法第五个版本,是一种非常常用的加密算法。其具体代码实现如下:
/**
* 计算MD5加密值
* @param str 待加密的字符串
* @return 加密后的字符串
*/
public static String md5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes("UTF-8"));
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
二、SHA算法
SHA即为安全散列算法,其消息摘要长度较长,安全性也稍高。Java中提供了SHA-1,SHA-256,SHA-384,SHA-512四种算法实现。具体代码实现如下:
/**
* 计算SHA-1加密值
* @param str 待加密的字符串
* @return 加密后的字符串
*/
public static String sha1(String str) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(str.getBytes("UTF-8"));
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 计算SHA-256加密值
* @param str 待加密的字符串
* @return 加密后的字符串
*/
public static String sha256(String str) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(str.getBytes("UTF-8"));
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 计算SHA-384加密值
* @param str 待加密的字符串
* @return 加密后的字符串
*/
public static String sha384(String str) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-384");
md.update(str.getBytes("UTF-8"));
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 计算SHA-512加密值
* @param str 待加密的字符串
* @return 加密后的字符串
*/
public static String sha512(String str) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(str.getBytes("UTF-8"));
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
以上代码实现,调用方式都一致,可根据具体需求选择MD5或SHA-1/SHA-256/SHA-384/SHA-512进行加密。
