前言
在信息安全领域,经常会用到MD5、SHA1、SHA256算法。这三种算法都属于散列算法,或者叫作哈希算法。它们具有输入任意长度,输出长度固定,以及单向性(无法根据散列值还原出消息)的特点。
1、安全散列算法(缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。
2、SHA家族的六个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512、SHA3,由美国国家安全局(NSA)所设计。
3、SHA1目前已经证实安全性存在问题,可在2的63次方个计算复杂度内找到碰撞;但新的SHA2算法SHA-224、SHA-256、SHA-384,和SHA-512函数,并没有像SHA-1一样接受公众密码社群做详细的检验,所以它们的密码安全性还不被大家广泛的信。
MD5代码
public class MD5Util {
private static String byteArrayToHexString(byte b[]) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < b.length; i++)
resultSb.append(byteToHexString(b[i]));
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0)
n += 256;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
public static String MD5Encode(String origin, String charsetname) {
String resultString = null;
try {
resultString = new String(origin);
MessageDigest md = MessageDigest.getInstance("MD5");
if (charsetname == null || "".equals(charsetname))
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));