1、编写MD5加密工具类
加密过程需要对密码加盐,否则可以通过网络工具轻易解密出密码
package com.learn.mall.util;
import com.learn.mall.common.Constant;
import org.apache.tomcat.util.codec.binary.Base64;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* MD5加密工具
*/
public class MD5Utils {
public static String getMD5Str(String val) throws NoSuchAlgorithmException {
MessageDigest md5 = MessageDigest.getInstance("MD5");
return Base64.encodeBase64String(md5.digest((val+Constant.SALT).getBytes()));
}
public static void main(String[] args) {
try {
System.out.println(getMD5Str("yang"+Constant.SALT));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
2、定义盐的常量类
定义盐时尽量复杂,否则加盐没有任何意义
package com.learn.mall.common;
/**
* 常量值
*/
public class Constant {
//加盐
public static final String SALT = "2wef65h#$%JVG<:}{>";
}
3、使用方法
package com.learn.mall.service.impl;
import com.learn.mall.exception.LearnMallException;
import com.learn.mall.exception.LearnMallExceptionEnum;
import com.learn.mall.model.dao.UserMapper;
import com.learn.mall.model.pojo.User;
import com.learn.mall.service.UserService;
import com.learn.mall.util.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.security.NoSuchAlgorithmException;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Override
public void register(String username, String password) throws LearnMallException {
//查询用户是否存在,不允许重名
User result = userMapper.selectByName(username);
if (result != null) {
throw new LearnMallException(LearnMallExceptionEnum.USERNAME_EXISTED);
}
//用户不存在,执行插入操作
User user = new User();
user.setUsername(username);
//对密码进行MD5加密并加盐
try {
user.setPassword(MD5Utils.getMD5Str(password));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
int count = userMapper.insertSelective(user);
if(count == 0){
throw new LearnMallException(LearnMallExceptionEnum.INSERT_FAILED);
}
}
}