需求:
登录和注册的密码涉及到网络安全,对密码的加密能够在一定程度上增加安全性,密码验证其实就是再次把密码明文和盐值再次重新组装进行加密,来判断加密后的结果是否匹配
完整代码
import org.apache.commons.codec.digest.DigestUtils; import java.security.SecureRandom; public class MD5Utils { private static final String SALT_CHAR_POOL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";//盐包含的字符串 private static final SecureRandom RANDOM = new SecureRandom();//随机数生成器 /** * 生成随机盐 * @param length 盐长度 * @return 盐文本 */ public static String generateSalt(int length) { StringBuilder sb = new StringBuilder(length); for (int i = 0; i < length; i++) { int idx = RANDOM.nextInt(SALT_CHAR_POOL.length()); sb.append(SALT_CHAR_POOL.charAt(idx)); } return sb.toString(); } /** * md5 加密 * @param password 密码明文 * @param salt 盐文本 * @return 加密后的文本 */ public static String hashPassword(String password, String salt) { String str = salt + password; return DigestUtils.md5Hex(str); } /** * 验证密码 * @param inputPassword 密码明文 * @param storedSalt 密码盐值 * @param storedHash 数据库里面保存的密码 * @return */ public static boolean verifyPassword(String inputPassword, String storedSalt, String storedHash) { String newHash = hashPassword(inputPassword, storedSalt); return newHash.equals(storedHash); } public static void main(String[] args) { String password = "123456"; String salt = generateSalt(16); // 16字节随机盐 String hashed = hashPassword(password, salt); System.out.println("随机盐: " + salt); System.out.println("加密后的密码: " + hashed); boolean isMatch = verifyPassword("123456", salt, hashed); System.out.println("验证结果: " + isMatch); } }

微信扫码查看本文
发表评论