用Java实现MD5加盐
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加盐相关推荐
- Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理
前言 在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的.最经典的就是密码了.如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的. 那么我们就 ...
- Scala / Java - 采用 MD5 加盐 实现 id 均匀分组
一.引言 大量 id 场景下经常需要通过 id 进行 AB Test,最常见的就是使用尾号 hash 进行分组,但是由于 id 生成规则以及其他因素,按照尾号分组往往会造成 id 不匀,从而导致 AB ...
- java md5加盐与解密_md5加密,md5加盐加密和解密
packagecom.java.test;importjava.security.MessageDigest;importjava.security.SecureRandom;importjava.u ...
- md5加密,md5加盐加密和解密
package com.java.test;import java.security.MessageDigest; import java.security.SecureRandom; import ...
- MD5加盐加密工具类(可直接使用)
MD5加盐加密工具类 在我们做项目时,涉及到用户密码,而正常来说数据库中不会直接存储明文的密码,都是加密之后的密码. 密码加密的方式有很多,比如: ① 3DES.AES.DES:使用对称加密算法,可以 ...
- SpringBoot 系列教程(八十五):Spring Boot使用MD5加盐验签Api接口之前后端分离架构设计
加密算法参考: 浅谈常见的七种加密算法及实现 加密算法参考: 加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用 目的: 通过对API接口请求报文签名,后端进行验签处理, ...
- 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密
RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...
- 一文读懂md5,md5有什么用,什么是md5加盐
md5是一种密码散列函数,在计算机安全领域得到广泛的应用.本文将带大家了解一些md5的知识点,什么是md5,md5有什么用,什么是md5加盐,为什么md5不可逆,为什么md5可能会被解密?帮助大家快速 ...
- 【甄选靶场】Vulnhub百个项目渗透——项目四十二:Moria1.1(MD5加盐爆破)
Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目四十二:Moria1.1(MD5加盐爆破)
- MD5流程以及安全性分析,MD5加盐,MD6,笔记
版权归其所有论文作者所有. 并没写原始的地址,因为这是我整合的,作者太多,包括我.太匆忙,原作者可以联系我. 简介 MD5适用于数据完整性校验的.将任意长度的字节串(所以是基于底层的二进制串的),映射 ...
最新文章
- C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
- 数据库--循环语句:loop exit when/ end loop
- Centos 6.2部署CSVN服务器
- 如何预防光纤光缆布线中的雷击伤害
- 硬核数据研究:年轻人为什么这么喜欢“哈哈哈哈”?
- input失去焦点和获得焦点jquery焦点事件
- Mac上Gtk-WARNING **: cannot open display解决
- markdown字体颜色_Markdown转微信公众号格式
- 关于C++编写com和调用com组件的小例子以及个人所犯错误见解
- IDEA 常用设置 与 常用操作(一)
- 记一次去掉中间的某次merge代码
- 使用HBuilderX将H5网页打包成APP
- 信息系统项目管理师快速记忆口诀
- ppt(office365)之表格使用说明
- Java计算同比环比
- 第九课堂:人人都可以当老师
- 【网络安全】威胁情报信息
- C语言四分位数Quartile算法(附完整源码)
- Android程序员必装apk
- 稀疏矩阵 存储格式 COO CSR DIA ELL HYB