MessageDigest实现单向加密(MD5、SHA1、SHA-256、SHA-512)
程序员文章站
2024-03-20 10:25:10
...
单向加密与双向加密
- 双向加密是加密算法中最常用的,它将可以直接理解的明文数据加密为不可直接理解的密文数据,然后,在需要的时候,可以使用一定的算法将这些加密以后的密文解密为原来可以理解的明文。双向加密适合于隐秘通信,例如,用户在网上购物时,需要向网站提交信用卡密码,用户当然不希望自己的数据直接在网上明文传送,因为这样很可能被别的用户“偷听”,用户希望自己的信用卡密码是通过加密以后,再在网络传送,因此网站接收到用户的数据以后,通过解密算法就可以得到准确的信用卡账号。
- 单向加密只能对数据进行加密,也就是说,没有办法对加密以后的数据进行解密。单向加密一般用于数据库中用户信息的加密(例如用户密码加密)。
MessageDigest(信息摘要)
Java中提供了MessageDigest类,用于实现单向加密较为简便。
//信息摘要实现单向加密方法
//参数:str是加密前的字符串,type是加密类型(MD5、SHA1、SHA-256、SHA-512)
//返回值:加密后字符串
public static String encrypt(String str, String type) throws NoSuchAlgorithmException {
/*
* MD5、SHA1、SHA-256、SHA-512
* */
MessageDigest md = MessageDigest.getInstance(type);
/*
* update方法负责加密
* 字符串转字节数组:str.getBytes("编码格式")
* */
md.update(str.getBytes());
/*
*获取摘要结果,加密后的数组
* */
byte[] bs = md.digest();
/*
* 变为16进制,使用字符串进行拼接
* */
StringBuilder res = new StringBuilder();
for (byte b : bs) {
res.append(String.format("%02X", b));
}
return res.toString();
}
测试
public static void main(String[] args) throws NoSuchAlgorithmException {
String str = "helloworld";
System.out.println("MD5加密结果:"+encrypt(str,"MD5"));
System.out.println("SHA1加密结果:"+encrypt(str,"SHA1"));
System.out.println("SHA-256加密结果:"+encrypt(str,"SHA-256"));
System.out.println("SHA-512加密结果:"+encrypt(str,"SHA-512"));
}