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的更多相关文章

  1. c# MD5及盐值加密

    using System;using System.Collections.Generic;using System.Linq;using System.Security.Cryptography;u ...

  2. shiro密码的比对,密码的MD5加密,MD5盐值加密,多个Relme

    有具体问题的可以参考之前的关于shiro的博文,关于shiro的博文均是一次工程的内容 密码的比对   通过AuthenticatingRealm的CredentialsMatcher方法 密码的加密 ...

  3. c# MD5盐值加密

    using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...

  4. Spring Security中的MD5盐值加密

    在 spring Security 文档中有这么一句话: "盐值的原理非常简单,就是先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算,这样一来,就算密码是一个很常见的字 ...

  5. Java使用MD5加盐进行加密

    Java使用MD5加盐进行加密    我使用的方法是导入了md5.jar包,就不需要再自己写MD5的加密算法了,直接调用方法即可 点击下载md5包 import com.ndktools.javamd ...

  6. SpringBoot整合shiro-MD5盐值加密

    为什么要进行密码加密? 在我们的日常生活中,许多人有着在不同网站上使用相同密码的坏习惯(包括我也是qaq),假如应用程序或服务器出现漏洞,数据被窃取,用户的明文密码直接被暴露给黑客.显然后果将不堪设想 ...

  7. MD5盐值加密

    加密思路 思路解析:(数据解析过程基于16进制来处理的,加密后为16进制字符串) 加密阶段: 对一个字符串进行MD5加密,我们需要使用到MessageDigest(消息摘要对象),需要一个盐值(sal ...

  8. MD5随机盐值生成法

    public class Test3 { /** * 生成含有随机盐的密码 */ public static String generate(String password) { Random r = ...

  9. shiro盐值加密并验证

    在数据表中存的密码不应该是123456,而应该是123456加密之后的字符串,而且还要求这个加密算法是不可逆的,即由加密后的字符串不能反推回来原来的密码,如果能反推回来那这个加密是没有意义的.著名的加 ...

  10. Java和JS MD5加密-附盐值加密demo

    JAVA和JS的MD5加密 经过测试:字母和数据好使,中文不好使. 源码如下: ** * 类MD5Util.java的实现描述: * */public class MD5Util { // 获得MD5 ...

随机推荐

  1. DB事物

    1.事物概念:一组逻辑操作单元 始数据从一种状态变换到另一种状态事物处理:所有事物 都作为一个工作单元来执行 , 即使出现了故障 都不能改变这种执行方式, commint提交之后 这些修改就永久的保存 ...

  2. C2简介

    C2简介 学习命令与控制的基本知识,帮助您成为更好的红队队员并简化您的下一次红队评估! thm:https://tryhackme.com/room/introtoc2 介绍 命令与控制 ( C2 ) ...

  3. 页面status:500,报错 server encountered an internal error that prevented it from fulfilling this request.

    The server encountered an internal error that prevented it from fulfilling this request.服务器遇到了一个内部错误 ...

  4. CF1810G The Maximum Prefix

    经典套路. 题意 你将随机生成一个长度为 \(k\) 的数组 \(a\),其中 \(a_i\) 有 \(p_i\) 概率为 \(1\),否则为 \(-1\).定义其前缀和数组 \(s_i = \sum ...

  5. jquery获取框值的数据,收藏一下吧

    效果图: html代码: <!DOCTYPE html> <html> <head> <title></title> <meta ch ...

  6. [solved] login to server failed: EOF

    问题 frp 报错:login to server failed: EOF 解决方案 客户端配置 common 下 添加 tls_enable = true [common] tls_enable = ...

  7. allure报告生成

    allure生成测试报告 ‍1.生成xml文件 pytest 测试文件所在路径 --alluredir 生成的测试结果数据保存的目录 pytest --alluredir=resport/xml/ D ...

  8. 一文帮你搞定H5、小程序、Taro长列表曝光埋点

    对于很多前端同学来说,"埋点"常常是一个不愿面对却又无法逃避的话题.为什么这么说呢,相信很多前端同学都深有体会:首先埋点这个事基本是前端"独享"的,服务端基本不 ...

  9. 图像处理_Retinex图像增强

    单尺度SSR (Single Scale Retinex) 图像 S ( x , y ) S(x,y) S(x,y)分解为两个不同的图像:反射图像 R ( x , y ) R(x,y) R(x,y), ...

  10. shell: logging + readlog

    logging #!/bin/bash # a small tool for logging sommething # # 1. read your input # 2. save to logs f ...