1、盐是什么

一串随机数

2、为什么要加盐

只要明文相同,那么生成的MD5码就相同,于是攻击者就可以通过撞库的方式来破解出明文。加盐就是向明文中加入随机数,然后在生成MD5,这样一来即使明文相同,但由于随机数是不同(极少相同),所以每次生成的MD5码也不同,如此一来就大大增加了暴力破解的难度,使其几乎不可能破解。

3、java实现

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;public class MD5Test {//生成普通的MD5码public static String MD5(String input) {MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException e) {return "check jdk";} catch (Exception e) {e.printStackTrace();return "";}char[] charArray = input.toCharArray();byte[] byteArray = new byte[charArray.length];for (int i = 0; i < charArray.length; i++)byteArray[i] = (byte) charArray[i];byte[] md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16)hexValue.append("0");hexValue.append(Integer.toHexString(val));}return hexValue.toString();}//生成“盐”和加盐后的MD5码,并将盐混入到MD5码中public static String generate(String password) {//生成一个16位的随机数,也就是所谓的“盐”Random r = new Random();StringBuilder sb = new StringBuilder(16);sb.append(r.nextInt(99999999)).append(r.nextInt(99999999));int len = sb.length();if (len < 16) {for (int i = 0; i < 16 - len; i++) {sb.append("0");}}String salt = sb.toString();//将“盐”加到明文中,并生成新的MD5码password = md5Hex(password + salt);//将“盐”混到新生成的MD5码中,之所以这样做是为了后期更方便的校验明文和秘文,也可以不用这么做,不过要将“盐”单独存下来,不推荐这种方式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 new String(cs);}//验证明文和加盐后的MD5码是否匹配public static boolean verify(String password, String md5) {//先从MD5码中取出之前加的“盐”和加“盐”后生成的MD5码char[] cs1 = new char[32];char[] cs2 = new char[16];for (int i = 0; i < 48; i += 3) {cs1[i / 3 * 2] = md5.charAt(i);cs1[i / 3 * 2 + 1] = md5.charAt(i + 2);cs2[i / 3] = md5.charAt(i + 1);}String salt = new String(cs2);//比较二者是否相同return md5Hex(password + salt).equals(new String(cs1));}//生成MD5private static String md5Hex(String src) {try {MessageDigest md5 = MessageDigest.getInstance("MD5");byte[] bs = md5.digest(src.getBytes());return new String(new Hex().encode(bs));} catch (Exception e) {return null;}}public static void main(String args[]) {String plaintext = "junfan";System.out.println("明文:" + plaintext);System.out.println("普通MD5码:" + MD5(plaintext));// 获取加盐后的MD5值String ciphertext = generate(plaintext);System.out.println("加盐后MD5码:" + ciphertext);System.out.println("是否是同一字符串:" + verify(plaintext, ciphertext));}}

用Java实现MD5加盐相关推荐

  1. Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理

    前言 在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的.最经典的就是密码了.如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的. 那么我们就 ...

  2. Scala / Java - 采用 MD5 加盐 实现 id 均匀分组

    一.引言 大量 id 场景下经常需要通过 id 进行 AB Test,最常见的就是使用尾号 hash 进行分组,但是由于 id 生成规则以及其他因素,按照尾号分组往往会造成 id 不匀,从而导致 AB ...

  3. java md5加盐与解密_md5加密,md5加盐加密和解密

    packagecom.java.test;importjava.security.MessageDigest;importjava.security.SecureRandom;importjava.u ...

  4. md5加密,md5加盐加密和解密

    package com.java.test;import java.security.MessageDigest; import java.security.SecureRandom; import ...

  5. MD5加盐加密工具类(可直接使用)

    MD5加盐加密工具类 在我们做项目时,涉及到用户密码,而正常来说数据库中不会直接存储明文的密码,都是加密之后的密码. 密码加密的方式有很多,比如: ① 3DES.AES.DES:使用对称加密算法,可以 ...

  6. SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计

    加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...

  7. 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密

    RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...

  8. 一文读懂md5,md5有什么用,什么是md5加盐

    md5是一种密码散列函数,在计算机安全领域得到广泛的应用.本文将带大家了解一些md5的知识点,什么是md5,md5有什么用,什么是md5加盐,为什么md5不可逆,为什么md5可能会被解密?帮助大家快速 ...

  9. 【甄选靶场】Vulnhub百个项目渗透——项目四十二:Moria1.1(MD5加盐爆破)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目四十二:Moria1.1(MD5加盐爆破)

  10. MD5流程以及安全性分析,MD5加盐,MD6,笔记

    版权归其所有论文作者所有. 并没写原始的地址,因为这是我整合的,作者太多,包括我.太匆忙,原作者可以联系我. 简介 MD5适用于数据完整性校验的.将任意长度的字节串(所以是基于底层的二进制串的),映射 ...

最新文章

  1. C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
  2. 数据库--循环语句:loop exit when/ end loop
  3. Centos 6.2部署CSVN服务器
  4. 如何预防光纤光缆布线中的雷击伤害
  5. 硬核数据研究:年轻人为什么这么喜欢“哈哈哈哈”?
  6. input失去焦点和获得焦点jquery焦点事件
  7. Mac上Gtk-WARNING **: cannot open display解决
  8. markdown字体颜色_Markdown转微信公众号格式
  9. 关于C++编写com和调用com组件的小例子以及个人所犯错误见解
  10. IDEA 常用设置 与 常用操作(一)
  11. 记一次去掉中间的某次merge代码
  12. 使用HBuilderX将H5网页打包成APP
  13. 信息系统项目管理师快速记忆口诀
  14. ppt(office365)之表格使用说明
  15. Java计算同比环比
  16. 第九课堂:人人都可以当老师
  17. 【网络安全】威胁情报信息
  18. C语言四分位数Quartile算法(附完整源码)
  19. Android程序员必装apk
  20. 稀疏矩阵 存储格式 COO CSR DIA ELL HYB

热门文章

  1. vs2013 Matlab 2018 (64)混合编程
  2. 打破信息茧房-我主动获取信息的方法 -#3
  3. 典型三种近场通信的特点以及未来趋势
  4. 考研——考研有用的“宝贝”(软件,公众号,网站,励志电影,音乐)
  5. 生信技能树课程记录笔记(五)20220528
  6. Linux基础知识以及常见面试问题
  7. 微信砍价小程序活动软件制作功能包含哪些方面?
  8. Docker学习笔记 1
  9. css 入场动画_进入css3动画世界(一)
  10. MDK/KEIL4/KEIL5 安装教程