MD5&MD5盐值加密到BCryptPasswordEncoder
MD5&MD5盐值加密
Message Digest algorithm5,信息摘要算法:
- 压缩性:任意长度的数据,算出的MD5值长度都是固定的
- 容易计算:从原数据计算出MD5值很容易
- 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别·强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的
加盐:
- 通过生成随机数与MD5生成字符串进行组合
- 数据库同时存储MD5值与salt值,验证正确性时使用salt进行MD5即可
样例:
public void contextLoads(){
String s = DigestUtils.md5Hex("123456");
System.out.println(s);
}
//输出结果:e10adc3949ba59abbe56e057f20f883e
直接选用MD5作为加密方法会出现的问题:固定数值加密后的字符是一样的,即不会随运行次数的变化发生变化,因此可以根据彩虹表进行暴力破解。(例如:123456加密后一定是e10adc3949ba59abbe56e057f20f883e)
采用加盐方法:
public void Loads(){
String s = Md5Crypt.md5Crypt("123456".getBytes(),"$1$qq");//前面是密码,后面是加盐值
System.out.println(s);
}
//输出结果:$1$qq$JNfE/gqQCjwYwMohdv7Ql/
采用加盐方法进行机密仍存在问题:
- 在加盐值不变的情况下会出现先前一样的状况,即加密结果不会随时间和运行的次数发生变化;
- 需要在数据中再添加一个盐值,增加查找的负担
因此spring采用 BCryptPasswordEncoder方法:
public void Loads(){
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
String s = bCryptPasswordEncoder.encode("123456");
//加密后:第一次结果$2a$10$EEvMfgrpBU.YwOhMq.6CJ.fX/XMB9G2uJd/43GHrbu2t0OfHXGPPe
//第二次结果:$2a$10$Y.NZ1b6U/wcUwvn6hC59KONuslIhffGUMnGBmqoOUdMA6mf8EXJXq
boolean matches = bCryptPasswordEncoder.matches("123456", "要验证的加密结果");
System.out.println(matches);
}
经实验可得:使用 BCryptPasswordEncoder每次加密后得结果都不样,随后通过BCryptPasswordEncoder.matches()分别放入第一次和第二次加密结果都显示为true,即二者直接可进行校验。
MD5&MD5盐值加密到BCryptPasswordEncoder的更多相关文章
- c# MD5及盐值加密
using System;using System.Collections.Generic;using System.Linq;using System.Security.Cryptography;u ...
- shiro密码的比对,密码的MD5加密,MD5盐值加密,多个Relme
有具体问题的可以参考之前的关于shiro的博文,关于shiro的博文均是一次工程的内容 密码的比对 通过AuthenticatingRealm的CredentialsMatcher方法 密码的加密 ...
- c# MD5盐值加密
using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...
- Spring Security中的MD5盐值加密
在 spring Security 文档中有这么一句话: "盐值的原理非常简单,就是先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算,这样一来,就算密码是一个很常见的字 ...
- Java使用MD5加盐进行加密
Java使用MD5加盐进行加密 我使用的方法是导入了md5.jar包,就不需要再自己写MD5的加密算法了,直接调用方法即可 点击下载md5包 import com.ndktools.javamd ...
- SpringBoot整合shiro-MD5盐值加密
为什么要进行密码加密? 在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是qaq),假如应用程序或服务器出现漏洞,数据被窃取,用户的明文密码直接被暴露给黑客.显然后果将不堪设想 ...
- MD5盐值加密
加密思路 思路解析:(数据解析过程基于16进制来处理的,加密后为16进制字符串) 加密阶段: 对一个字符串进行MD5加密,我们需要使用到MessageDigest(消息摘要对象),需要一个盐值(sal ...
- MD5随机盐值生成法
public class Test3 { /** * 生成含有随机盐的密码 */ public static String generate(String password) { Random r = ...
- shiro盐值加密并验证
在数据表中存的密码不应该是123456,而应该是123456加密之后的字符串,而且还要求这个加密算法是不可逆的,即由加密后的字符串不能反推回来原来的密码,如果能反推回来那这个加密是没有意义的.著名的加 ...
- Java和JS MD5加密-附盐值加密demo
JAVA和JS的MD5加密 经过测试:字母和数据好使,中文不好使. 源码如下: ** * 类MD5Util.java的实现描述: * */public class MD5Util { // 获得MD5 ...
随机推荐
- web_枚举
网页枚举 使用工具 gobuster,Nikto,WPScan Gobuster 安装:sudo apt install gobuster 有用的全局标志 -t 线程 并发线程数(默认10) -v 冗 ...
- 理解ASP.NET Core - 全球化&本地化&多语言(Globalization and Localization)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 概述 在众多知名品牌的网站中,比如微软官网.YouTube等,我们经常可以见到"切换 ...
- 【园子资深博主直播】 冰蓝老师《ChatGPT 初探》
AI对经济增长.经济周期.经济形态.社会就业都有着非常巨大的影响,ChatGPT4.0发布后,燃起了我们每一个开发人的激情和恐惧,但各路自媒体信息杂乱无序,缺少非常系统性的ChatGPT原理解读. 此 ...
- Go语言中的原子操作
1. 引言 在并发编程中,多个协程同时访问和修改共享数据时,如果没有使用适当的机制来防止并发问题,这个时候可能导致不确定的结果.数据不一致性.逻辑错误等严重后果. 而原子操作是解决并发编程中共享数据访 ...
- 前端vue地图定位并测算当前定位离目标位置距离可用于签到打卡
前端vue地图定位并测算当前定位离目标位置距离可用于签到打卡, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id=12974 效果 ...
- TVM 源码阅读PASS — VectorizeLoop
本文地址:https://www.cnblogs.com/wanger-sjtu/p/17501119.html VectorizeLoop这个PASS就是对标记为ForKind::kVectoriz ...
- ASP.NET MVC4 学习笔记-4
添加验证--Adding Validation 现在我们要为程序增加数据验证.如果不增加数据验证的话,我们的用户可能会输入错误的数据或者提交一个空白的表格. 在MVC应用程序中,数据验证通常要在域模型 ...
- EasyExcel · 填充Excel
原文地址 Demo地址 最简单的填充 模版 效果 对象 @Getter @Setter @EqualsAndHashCode public class FillData { private Strin ...
- 运维自动化工具--Ansible
运维自动化工具Ansible 1. ansible安装 rocky安装 需要先安装 enel源 # yum install -y epel-release 然后再安装ansible # yum ins ...
- 【微信小程序的开发】初步认识
目录 项目结构 页面组成 json配置文件 app.json project.config.json sitemap.json 每个页面的json 实例 wxml 标签名称 ...