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 ...
随机推荐
- GIT多场景下使用
git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree这样牛X的客户端工具,使得合并代码变的很方便.但找工作面试和一些需彰显个人实力的场景, ...
- ODOO升级模块后到系统进入不了,报错500
有时候安装后者升级odoo相关模块后会导致系统进入不了,报错500,此时我们可以通过Odoo命令行卸载相关模块 此方法适用于在安装或升级某个模块后导致崩库,进不去桌面的情况下使用.原理是通过odoo- ...
- 【Python&目标识别】调用百度智能云API实现植被识别
百度智能云于2015年正式对外开放运营,以"云智一体"为核心赋能千行百业,致力于为企业和开发者提供全球领先的人工智能.大数据和云计算服务及易用的开发工具.凭借先进的 ...
- [MAUI]写一个跨平台富文本编辑器
@ 目录 原理 创建编辑器 定义 实现复合样式 选择范围 字号 字体颜色与背景色 字体下划线 字体加粗与斜体 序列化和反序列化 跨平台实现 集成至编辑器 创建控件 使用控件 最终效果 已知问题 项目地 ...
- 尚医通-day12【token续期和就诊人管理】(内附源码)
页面预览 就诊人管理 就诊人列表 添加就诊人 查看就诊人 ![image-20230225060710 管理员系统用户管理 前面我们完成了用户登录.用户认证与就诊人管理,现在我们需要把这些信息在我们的 ...
- tvm relay IR 可视化
本文地址: https://www.cnblogs.com/wanger-sjtu/p/16819877.html 发现最近relay 的可视化已经在tvm主线上支持了,这里有一个简单的demo代码记 ...
- 前端:Uncaught TypeError: Cannot set property 'value' of null;
1.在写JS代码中的绑定事件时(将JS与HTML标签分开时),发现会有如下错误提示: Uncaught TypeError: Cannot set property 'onclick' of null ...
- JS逆向实战20——某头条jsvm逆向
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 网站 目标网站:aHR0c ...
- 为什么使用ioutil.ReadAll 函数需要注意
1. 引言 当我们需要将数据一次性加载到内存中,ioutil.ReadAll 函数是一个方便的选择,但是ioutil.ReadAll 的使用是需要注意的. 在这篇文章中,我们将首先对ioutil.Re ...
- expect: telnet2switch
#!/usr/bin/expect if {$argc != 1} { puts "usage: ./telnet2sswitch <r2|r3>" exit } if ...