在系统中经常要存储一些用户信息,例如登录名和密码,处于安全性考虑,某些信息需要加密之后在存储。目前广泛使用的算法有MD5和SHA-1等。
Hash算法主要用于信息安全领域中加密,可以把一些不同长度的信息转化成固定长度的128位编码,MD5和SHA是目前最为广泛的Hash算法,主要用于文件检验,数字签名和鉴权协议等领域。MD5和SHA属于非对称加密算法,一般认为是不可逆的。
java实现MD5和SHA-1算法加密时,主要采用了java.secyrity.MessageDigest类。MessageDigest类为应用程序提供摘要算法的功能。信息摘要是安全的单向散列函数,它接受任意大小的数据,输出固定长度的散列值。
实现MD5 和 SHA加密的实例代码如下:
package com.ttt;
import java.security.MessageDigest;
public class T2 {
public static void main(String[] args) {
T2 mdl = new T2();
System.out.println(mdl.digestString("lipan", "MD5"));
}
/**
* 将信息按指定的算法加密
* @param str : 要加密的字符串信息
* @param digestType : 加密类型,选择MD5 或 SHA-1
* @return 加密之后的内容
*/
public String digestString(String str,String digestType){
MessageDigest md;
String message = "";
try{
md = MessageDigest.getInstance(digestType);
md.update(str.getBytes());
message = byteToHex(md.digest());
} catch(Exception e){
e.printStackTrace();
}
return message;
}
/**
* 将字节数组变成十六进制的字符串
* @param bytes 字节数组
* @return 十六进制的字符串
*/
private String byteToHex(byte[] bytes){
StringBuffer sb = new StringBuffer();
for(int i=0;i<bytes.length;i++){
int num = 0xFF & bytes[i];
if(num < 0x10){
sb.append("0" + Integer.toHexString(num));
} else{
sb.append(Integer.toHexString(num));
}
}
return sb.toString();
}
}