使用MD5+盐对密码进行加密
为什么要对密码加密?
因为密码存储的时候不能明文存贮,对密码加密可以保护用户信息安全
什么是对称加密?
对称加密:A拿着一个规则进行加密,B拿着这个规则解密
为什么要加盐?
为防止字典破解和暴力破解的破解方式来破解。如果知道了数据库中密码的哈希值,用查表法,逆向查表法、彩虹表等。当知道某个密码的哈希值时,只需要在建立好的表中查找该值,你就知道对应的密码,盐就是一个随机生成的字符串。我们将盐与原始密码连接(concat)在一起(放在前面或后面都可以),然后将concat后的字符串加密。采用这种方式加密密码,查表法就不灵了(因为盐是随机生成)
密码加盐的实现方式?
// 获取用户密码 String userPwd = user.getUserPwd(); // 获取盐值 String salt = getRandomString(4); // 盐值加上密码 String password = salt + userPwd; // 对加上盐值的密码进行加密 String md5 = EncryptionUtils.encryptMD5(password); // 把加密后的密码存到user对象中 user.setUserPwd(md5); // 把盐值存入user对象中 user.setUsersSalt(salt);
可以把盐加在密码前面,也可以把盐加在密码后面,同时也可以加在中间,如果还嫌不够安全,也可以加多个盐值,也就是多重加盐,会更安全更保险。
生成盐的方法
//length用户要求,随机产生字符串的长度 public static String getRandomString(int length){ String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for(int i = 0;i < length ; i++){ int number = random.nextInt(62); sb.append(str.charAt(number)); } return sb.toString(); }
MD5加密工具类
public class EncryptionUtils { public static String encryptMD5(String password) { MessageDigest md = null; byte[] digest = null; try { md = MessageDigest.getInstance("MD5"); digest = md.digest(password.getBytes(StandardCharsets.UTF_8)); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } assert digest != null; return new BigInteger(1, digest).toString(16); } public static void main(String[] args) { System.out.println(encryptMD5("0")); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)