java使用MD5加盐加密

编程入门 行业动态 更新时间:2024-10-23 09:28:33

java使用MD5<a href=https://www.elefans.com/category/jswz/34/1753758.html style=加盐加密"/>

java使用MD5加盐加密

废话不多说,直接上代码,主要代码已经加注释

package com.shop.utils;import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;import org.apache.tomcat.util.codec.binary.Base64;import com.shop.domain.User;
/** 实现MD5加盐加密与解密*/
public class SecurityTool {private static MessageDigest md5;//md5加密对象private static Base64 base64;//加密编码对象private static final int saltLen = 15;//盐长度private static String salt = "";//盐static{try {md5 = MessageDigest.getInstance("MD5");//获取MD5加密对象base64 = new Base64();//获取加密编码对象} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}/** 对password进行MD5加盐加密,返回加密过的password,并存储盐salt*/public static void encrypt(User user){Random random = new Random();String str = "qwertyuiopasdfghjklzxcvbnm1234567890+-=*;',.";for(int i=0;i<saltLen;i++){salt += String.valueOf(str.charAt(random.nextInt(str.length())));//从str中随机获取字符生成长度为saltLen的加密盐}String passwordSalt = user.getPassword() + salt;//将密码和盐拼接到一起System.out.println(passwordSalt);try {md5.reset();//初始化System.out.println(passwordSalt.getBytes("UTF-8"));md5.update(passwordSalt.getBytes("UTF-8"));//将加盐密码传给消息摘要对象byte[] bys=md5.digest();//创建消息摘要对象byte[] lastPassword=base64.encode(bys);//进行加密user.setPassword(new String(lastPassword));user.setSalt(salt);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}/** 用于登录时密码验证* 根据用户输入的未加密密码和用户的盐进行解密(实际上同样是MD5加密,只不过加密结果用来判断与数据库中的加密密码是否相同)* 返回解密结果*/public static String deciphering(String password,User user){String passwordSalt = password + user.getSalt();//将密码和盐拼接到一起System.out.println(passwordSalt);String lastPassword = "";try {md5.reset();//初始化System.out.println(passwordSalt.getBytes("UTF-8"));md5.update(passwordSalt.getBytes("UTF-8"));//将加盐密码传给消息摘要对象byte[] bys=md5.digest();//创建消息摘要对象byte[] lastPasswordStr=base64.encode(bys);//进行加密lastPassword = new String(lastPasswordStr);} catch (UnsupportedEncodingException e) {e.printStackTrace();}return lastPassword;}
}

注意:最后要通过new String(lastPasswordStr)将加密后的密码转成字符串(自己基础不扎实,一开始使用lastPasswordStr.toString(),结果导致同样的字符串加密后得到不同的结果,实际上lastPasswordStr.toString()获取到的是byte[] lastPasswordStr数组的地址,因此每次加密分配的地址块都不同。所以,写下此文章警示自己)

更多推荐

java使用MD5加盐加密

本文发布于:2024-02-06 05:15:06,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746721.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:加盐   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!