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 ...
随机推荐
- RabbitMQ系列-Exchange介绍
RabbitMQ系列 RabbitMQ系列-概念及安装 1. Exchange RabbitMQ系列-概念及安装提到AMQP 0-9-1协议默认支持四种exchange,分别是Direct Excha ...
- 2021-i春秋秋季赛部分misc+re wp
两道re比较简单,没有什么好说的,misc的符号执行那题还有点意思,总的来说题目不难 CTFMakesMeAngr 给出了符号执行的中间语言,对着文档把汇编逻辑逆一下,发现是个凯撒加密,位移为14,注 ...
- StampedLock:高并发场景下一种比读写锁更快的锁
摘要:在读多写少的环境中,有没有一种比ReadWriteLock更快的锁呢?有,那就是JDK1.8中新增的StampedLock! 本文分享自华为云社区<[高并发]高并发场景下一种比读写锁更快的 ...
- 通过命令行创建ACFS文件系统
其实使用asmca图形创建ACFS文件系统既简单又不容易出错,但是考虑到某些客户场景不允许我们调取图形,所以本文演示下通过命令行创建ACFS文件系统的步骤. 可以通过MOS搜索到下面这篇文档: ASM ...
- Python 列表、字典、元组的一些小技巧
1. 字典排序 我们知道 Python 的内置 dictionary 数据类型是无序的,通过 key 来获取对应的 value.可是有时我们需要对 dictionary 中的 item 进行排序输出, ...
- Docker运行Django框架
Django框架 创建django-pg项目目录 [root@docker ~]# mkdir docker-compose-django [root@docker ~]# cd docker-com ...
- 【HarmonyOS】【ArkTS】如何使用HTTP网络请求获取动态数据刷新UI界面
[关键字] HttpRequest.ArkTS.网络数据请求.@ohos.net.http [前言] 在使用ArkTS开发HarmonyOS应用时,需要调用HTTP网络请求 @ohos.net.h ...
- 让AI支持游戏制作流程:从游戏设计到发布一个完整的生态系统
目录 引言 随着游戏产业的快速发展,人工智能(AI)技术在游戏开发中的应用越来越广泛.游戏设计人员可以通过利用AI技术来自动化游戏中的某些流程,提高游戏制作的效率,降低开发成本,同时还可以创造出更加具 ...
- Linux系统运维之FastDFS集群部署
一.简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.FastDFS服务端有两个 ...
- Electron App 安装包定制 -- Inno Setup 脚本 Pascal Scripting 初探
在做 Electron 项目时,有个需求是安装包安装时要给客户机上装上某个软件 在查看 Inno Setup 官网后发现是通过 .iss 脚本编写实现自定义安装过程 可在 .iss 内可以添加脚本为安 ...