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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 动态规划经典题目_动态规划详解

    动态规划经典题目_动态规划详解一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向下 -> 向下向下 -> 向下 -> 向右向下 -> 向右 -&gt

    2022年8月9日
    9
  • 苹果手机录屏软件_4款手机录屏软件推荐,你觉得哪款更好用?

    苹果手机录屏软件_4款手机录屏软件推荐,你觉得哪款更好用?随着智能与科技的迅速发展,现在国内外基本上用户都用上了手机。据相关数据统计,在2016年的时候,全球的手机用户量已经超过了26亿人次。在2020年之后,全球手机的用户量预计将超过36亿。而如此大的用户群体下面,手机的作用也不仅限于通讯,更多的是追剧娱乐。所以,录屏的需求也就比较多了。那么,手机录屏软件哪个好呢?小编认为:简单、好用是关键!所以今天这期就给大家推荐一波录屏软件!↓↓一、简单类手机录屏…

    2022年9月24日
    4
  • linux查看硬盘smart信息_centos查看未挂载磁盘

    linux查看硬盘smart信息_centos查看未挂载磁盘1          编写目的在如今大数据的环境中,磁盘的性能和稳定性是非常重要的一个业务因素。在Linux系统中,smartctl是较为常用的磁盘检测工具。本文基于Linux系统中smartctl进行分析,目的在于说明相关工具的使用,并对SMART(Self-Monitoring,AnalysisandReportingTechnology)做一些分析。2          …

    2022年10月8日
    2
  • hvie hbase各自的使用场景

    hvie hbase各自的使用场景hvie hbase各自的使用场景

    2022年4月23日
    63
  • 怎么安装纯净版win10_影视大全纯净版app下载

    怎么安装纯净版win10_影视大全纯净版app下载文章目录1.制作系统安装盘1.1准备U盘以及一台用来制作安装盘的电脑1.2下载WIN10安装包1.3制作完成的系统安装盘1.4U盘格式化应选择的文件系统2.安装WIN10操作系统前的准备2.1插入系统安装盘2.2设置U盘(系统安装盘)为第一启动项2.3注意:启动引导方式的选择2.4补充:磁盘分区格式(MBR分区和GPT分区)和启动引导(Legacy和UEFI)的关系3.开始安装WIN10操作系统3.1将系统直接安装到固态硬盘内(不分区)3.2将固态硬盘分区后,将系统安装到其中一个

    2022年8月11日
    8
  • 少儿编程网站有哪些(少儿编程哪家好)

    20个热门少儿编程网站【2019】转载之本文链接:https://blog.csdn.net/shebao3333/article/details/85317936少儿编程是新的文化潮流,它涵盖了儿童学习的方方面面:逻辑思维训练、系统化思考训练、问题解决能力训练、团队协作、创造性思维培养…你可以利用我们整理的这些得到广泛认可的少儿编程网站教孩子学会编程,例如code.org、tynker.c…

    2022年4月18日
    39

发表回复

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

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