import java.security.MessageDigest;

import java.util.Random;

import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;

/**

* @fileName Md5PasswordUtil.java

* @Description 明文密码加密加盐操作

* 1:生成加密密码:首先使用randomSalt获取随机盐值,并保存;再将随机盐值和明文密码传入generate生成加密密文

* 2:密码校验:将明文密码和加密后的密文传入verify,校验成功返回true,反则返回false

* @author user

* @date 2017年9月6日

* @version 1.0

*/

public class Md5PasswordUtil {

/**

* 生成16位数的随机salt值

* @return

*/

public static String randomSalt(){

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();

return salt;

}

/**

* 生成含有随机盐的密码

* @param password 明文密码

* @param salt 盐值

* @return

*/

public static String generate(String password,String salt) {

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 new String(cs);

}

/**

* 校验密码是否正确

* @param password 明文密码

* @param md5 加密加盐后的密码

* @return

*/

public static boolean verify(String password, String 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));

}

/**

* 获取十六进制字符串形式的MD5摘要

*/

public static String md5Hex(String src) {

try {

MessageDigest md5 = MessageDigest.getInstance("MD5");

byte[] bs = md5.digest(src.getBytes());

new HexBin();

return new String(HexBin.encode(bs));

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

}

mysql 加盐_密码加盐相关推荐

  1. iframe懒加载_懒加载是如何实现的?

    作为网页内容的一部分,图像和视频通常要消耗很多资源加载.要提高网页应用的性能,如何避免资源浪费在加载图像和视频上就很重要了.但是,很多时候我们都不愿意减少网页上的媒体资源,所以我们经常无从下手.幸运的 ...

  2. java证书加签_证书加签、验签、加密、解密Demo

    package sslSocket; import javax.crypto.Cipher; import java.io.FileInputStream; import java.security. ...

  3. 浏览器中禁用某些js加载_禁用加载项以加快Internet Explorer 9中的浏览

    浏览器中禁用某些js加载 We've shown you how to enhance Internet Explorer with add-ons, similar to Firefox and C ...

  4. java 滚动加载_滚动加载 - java-苦苦甜甜的个人空间 - OSCHINA - 中文开源技术交流社区...

    html代码如下: 滚动条距离底部 #parse("front/common/include.html") $(function () { var i = 4; $(window) ...

  5. java pdf无法加载_无法加载PDF文档 - Angular JS - BLOB

    我试图从Web API获取PDF文档,并希望在Angular App中显示 . 获得"Failed to load PDF document error" . 我已经关注了&quo ...

  6. cura 4.8 加插件_不能自己加,只能使用市场的

    首先如何打开现有的插件安装界面,看知乎大佬 https://www.3dzyk.cn/thread-9811-1-1.html 屏幕有WIFI,想找驱动,找不到,找到了plugin,装不了,在市场找到 ...

  7. 密码加盐原理及其实现

    目录 1. 背景介绍 2. MD5加密算法 2.1 MD5算法的介绍 2.2 MD5算法的缺点 3. 加盐算法 3.1 什么是加盐算法 3.2 加盐算法的演示 4. 总结 1. 背景介绍 加密密码是现 ...

  8. SpringBoot Security 自定义登录验证逻辑+密码加盐

    密码加盐思路 JAVA 加盐加密方法_Teln_小凯的博客-CSDN博客 盐加密方法 @ApiOperation(value = "002-加密")@PreAuthorize(&q ...

  9. mysql 加盐_【mysql】当加盐算法需要改变,数据库该如何更新?

    假设网站上有大量的注册用户,因为某些情况需要改变用户密码的加盐算法,那么数据库里的用户信息该怎么更新? 我想到的方法是:新增一个字段,新的加盐算法正式上线后,用户第一次成功登录时就把新的加盐后的值存到 ...

最新文章

  1. 最大权值闭合子图的证明详解
  2. 通过ID在JavaScript对象数组中查找对象
  3. you aren‘t using a compiler supported by lombok, so lombok will not work and
  4. VTK:模型之FinanceFieldData
  5. ABAP Authorization trace工具
  6. 网易邮箱大师如何定时发送 定时发送邮件方法步骤详解
  7. weak_ptr打破环状引用
  8. 批量生成10个虚拟主机配置
  9. 设计模式学习笔记(1)——单例模式
  10. [Windows Server 2012] SQL Server 备份和还原方法
  11. 单片机c语言1602怎么接线,lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图 - 全文...
  12. Python爬虫理论 | (2) 网络请求与响应
  13. 教你七招记单词快又准
  14. RPM 包的构建 - SPEC 基础知识
  15. netty报错:LEAK: ByteBuf.release() was not called before it‘s garbage-collected
  16. 批量安装/卸载/fore-stop apk的脚本
  17. Mysql 多表连接查询
  18. 用计算机弹Despacit,《计算器:游戏》老师,这真的只是个长得好看的计算器而已!...
  19. Arduino的硬件:什么是单片机?什么是Arduino?Arduino和单片机区别?Arduino有哪些种类?Arduino扩展板有哪些?
  20. 2020中国高校计算机大赛网络技术挑战赛,风起云涌!2020 “中国高校计算机大赛-网络技术挑战赛”总决赛即将在浙南科技城开赛...

热门文章

  1. Java Lambda 连接字符串
  2. linux qmi接口,高通9X07模块QMI架构使用入门
  3. 拼多多直通车卡位成功技巧实操分享,商家必看!
  4. jsp页面文件上传的详细教程
  5. 在 mapper 中如何传递多个参数?
  6. 如何用iMindMap制作布局统一的思维导图?
  7. 关于test指令和add指令的区别,inc指令和add指令的区别
  8. 遥感底图制作中的植被彩色增强常用的几个方法
  9. linux 跳板机 外网,linux 基于ssh创建跳板机
  10. elastic golang