密码加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package org.security; import org.apache.commons.codec.digest.DigestUtils; import java.util.UUID; import cn.hutool.core.util.StrUtil; /** * @author 50649 */ public class PasswordUtils{ /** * 1.加盐并生成最终的密码 * @param password 明文的密码 * @return 最终生成的密码 */ public static String encrypt(String password){ //a.产生盐值 //UUID.randomUUID()会生成32位数字+4位-,是随机的唯一的,将4位-去掉就得到32位数字的盐值 String salt = UUID.randomUUID().toString().replace( "-" , "" ); //生成加盐后的密码(需要使用MD5) String saltPassword = DigestUtils.md5Hex((salt + password).getBytes()); //生成最终的密码格式 String finalPassword = salt + "$" + saltPassword; return finalPassword; } /** * 2.加盐并生成最终密码格式(方法一的重载),区别于上面的方法:这个方法是用来解密的,给定了盐值,生成一个最终密码, 后面要和正确的最终密码进行比对 * @param password 需要验证的明文密码 * @param salt * @return */ public static String encrypt(String password, String salt){ //1.生成一个加密后的密码 String saltPassword = DigestUtils.md5Hex((salt + password).getBytes()); //2.生成最终的密码(待验证) String finalPassword = salt + "$" + saltPassword; return finalPassword; } /** * 3.验证密码 * @param inputPassword 登录用户输入的明文密码 * @param finalPassword 数据库中实际的最终密码格式 * @return */ public static boolean check(String inputPassword, String finalPassword){ //首先判断这两个参数到底有没有值,数据库中的最终密码是不是65位 if (StrUtil.isNotBlank(inputPassword) && StrUtil.isNotBlank(finalPassword) && finalPassword.length() == 65 ){ //a.首先从最终的密码中得到盐值 //使用$将finalPassword划分成两个部分,前面的32位的部分就是盐值 //注意:这里的$是被认为是一个通配符,所以要转义一下 String salt = finalPassword.split( "\\$" )[ 0 ]; //b.使用之前加密的方法,生成最终的密码格式(待验证) String checkPassword = encrypt(inputPassword,salt); if (checkPassword.equals(finalPassword)){ return true ; } } return false ; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)