1.MD5概念
md5的全称是md5信息摘要算法(英文:MD5 Message-Digest Algorithm ),一种被广泛使用的密码散列函数,可以产生一个128位(16字节,1字节8位)的散列值(常见的是用32位的16进制表示,比如:0caa3b23b8da53f9e4e041d95dc8fa2c),用于确保信息传输的完整一致。MD5由MD4、MD3、MD2改进而来,主要增强算法复杂度和不可逆性。MD5算法因其普遍、稳定、快速的特点,仍广泛应用于普通数据的加密保护领域。
md5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的MD5信息摘要。文件的md5类似于人的指纹,在世界上是独立无二的,如果任何人对文件做了任何改动,其md5的值也就是对应的“数字指纹”都会发生变化。
1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
2.代码实例
创建工具类
public class MD5Utils {
public static String str2MD5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException {
str += "@fdki11234568#fjen";
byte[] digest = null;
MessageDigest md5 = MessageDigest.getInstance("md5");
digest = md5.digest(str.getBytes("utf-8"));
//16表示转换为16进制
String md5str = new BigInteger(1,digest).toString(16);
return md5str;
}
//创建mian方法,进行测试
/* public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException {
System.out.println(str2MD5("123456"));
}*/
}
在service进行密码加密处理
public class UserInfoServiceImpl implements UserInfoService {
@Override
public UserInfo login(String loginName, String password) throws SQLException, UnsupportedEncodingException, NoSuchAlgorithmException {
//登录密码加密处理
password = MD5Utils.str2MD5(password);
UserInfoDao userInfoDao = new UserInfoDaoImpl();
UserInfo userInfo = userInfoDao.login(loginName, password);
return userInfo;
}
@Override
public int register(UserInfo userInfo) throws SQLException, UnsupportedEncodingException, NoSuchAlgorithmException {
//注册密码加密
String pass = userInfo.getPassword();
pass = MD5Utils.str2MD5(pass);
userInfo.setPassword(pass);
UserInfoDao userInfoDao = new UserInfoDaoImpl();
int i = userInfoDao.register(userInfo);
return i;
}
}