前言
日常开发中,保存在数据库的密码都是密文的,是为了保证即即使数据库泄漏也不会产生巨大的影响。这里就需要加密的技术。
加密的实现
MessageDigest
MessageDigestd类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
实现类
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Hash {
public static String sha1(String portectData) {
if (portectData.isEmpty()) {
return "";
}
MessageDigest hash = null;
try {
hash = MessageDigest.getInstance("SHA1");
byte[] bytes = hash.digest(portectData.getBytes("UTF-8"));
String result = "";
for (byte b : bytes) {
String temp = Integer.toHexString(b & 0xff);
if (temp.length() == 1) {
temp = "0" + temp;
}
result += temp;
}
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
}
Main程序入口
以对123的加密为例
public class Main {
public static void main(String[] args) {
String code = Hash.sha1("123");
System.out.println("测试加密:" + code.toUpperCase() + " 长度:" + code.length());
}
}
SHA1加密结果
测试加密:40BD001563085FC35165329EA1FF5C5ECBDBBEEF 长度:40
补充
如果将Hash类中的hash = MessageDigest.getInstance("SHA1");SHA1替换为MD5,则会产生32为MD5加密值,运行结果如下:
测试加密:202CB962AC59075B964B07152D234B70 长度:32