JavaMD5工具类(加盐加密)[通俗易懂]

JavaMD5工具类(加盐加密)[通俗易懂]代码如下,粘进去直接可以使用packagecom.study.utils;importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.util.Random;publicclassMD5Utils{/***byte[]字节数组转换成十六进制

大家好,又见面了,我是你们的朋友全栈君。

代码如下,粘进去直接可以使用

 package com.study.utils;
 
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
 
public class MD5Utils { 
   
 
  /** * byte[]字节数组 转换成 十六进制字符串 * * @param arr 要转换的byte[]字节数组 * * @return String 返回十六进制字符串 */
     private static String hex(byte[] arr) { 
   
	     StringBuffer sb = new StringBuffer();
	     for (int i = 0; i < arr.length; ++i) { 
   
		     sb.append(Integer.toHexString((arr[i] & 0xFF) | 0x100).substring(1, 3));
	     }
	     return sb.toString();
     }
 
 
 
 
   /** * MD5加密,并把结果由字节数组转换成十六进制字符串 * * @param str 要加密的内容 * * @return String 返回加密后的十六进制字符串 */
     private static String md5Hex(String str) { 
   
       try { 
   
           MessageDigest md = MessageDigest.getInstance("MD5");
           byte[] digest = md.digest(str.getBytes());
           return hex(digest);
       } catch (Exception e) { 
   
           e.printStackTrace();
           System.out.println(e.toString());
           return "";
       }
     }
 
 
 
   /** * 生成含有随机盐的密码 * * @param password 要加密的密码 * * @return String 含有随机盐的密码 */
     public static String getSaltMD5(String password) { 
   
		// 生成一个16位的随机数
        Random random = new Random();
        StringBuilder sBuilder = new StringBuilder(16);
        sBuilder.append(random.nextInt(99999999)).append(random.nextInt(99999999));
        int len = sBuilder.length();
        if (len < 16) { 
   
              for (int i = 0; i < 16 - len; i++) { 
   
                sBuilder.append("0");
            }
        }
        // 生成最终的加密盐
        String salt = sBuilder.toString();
        password = md5Hex(password + salt);
        char[] cs = new char[48];
        for (int i = 0; i < 48; i += 3) { 
   
            cs[i] = password.charAt(i / 3 * 2);
            char c = salt.charAt(i / 3);
            cs[i + 1] = c;
            cs[i + 2] = password.charAt(i / 3 * 2 + 1);
        }
        return String.valueOf(cs);
     }
 
 
 
   /** * 验证加盐后是否和原密码一致 * * @param password 原密码 * * @param password 加密之后的密码 * *@return boolean true表示和原密码一致 false表示和原密码不一致 */
     public static boolean getSaltverifyMD5(String password, String md5str) { 
   
        char[] cs1 = new char[32];
        char[] cs2 = new char[16];
        for (int i = 0; i < 48; i += 3) { 
   
            cs1[i / 3 * 2] = md5str.charAt(i);
            cs1[i / 3 * 2 + 1] = md5str.charAt(i + 2);
            cs2[i / 3] = md5str.charAt(i + 1);
        }
        String Salt = new String(cs2);
        return md5Hex(password + Salt).equals(String.valueOf(cs1));
     }
 
 
    
    public static void main(String[] args) { 
   
        // 原密码
        String plaintext = "123456";
        // 获取加盐后的MD5值
        String ciphertext = MD5Utils.getSaltMD5(plaintext);
        System.out.println("加盐后MD5:" + ciphertext);
        System.out.println("是否是同一字符串:" + MD5Utils.getSaltverifyMD5(plaintext, ciphertext));
    }
 
}
 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159602.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量。 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量、环境变量、语系变量、位置参数变量和预定义变量。

    2022年2月26日
    40
  • 加密通讯协议SSL编程

    加密通讯协议SSL编程1.   示例包readme为包内容说明,run_server.sh用来运行服务端,run_client.sh用来运行客户端,mk_server.sh用来编译服务端,mk_client.sh用来编译客户端,make_key.sh用来生成钥匙KEY。2.   什么是SSL?在学习openssl编程之前,先了解一下什么是SSL,有助于后续的学习。SSL是一个缩写,代表的是

    2022年6月4日
    29
  • Spring Boot 拦截器

    Spring Boot 拦截器上一篇对过滤器的定义做了说明,也比较简单。过滤器属于Servlet范畴的API,与Spring没什么关系。Web开发中,我们除了使用Filter来过滤请web求外,还可以使用Spring提供的HandlerInterceptor(拦截器)。HandlerInterceptor的功能跟过滤器类似,但是提供更精细的的控制能力:在request被响应之前、request被响应之后、视图渲染之前

    2022年4月27日
    38
  • intellijidea激活码_通用破解码

    intellijidea激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    84
  • java多线程

    java多线程

    2022年1月11日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号