现在项目,用户注册登录部分很少有涉及到了,原因:现在热门开发框架都已经在底层帮我们做了一套用户注册,密码加密,登录认证,权限控制,缓存数据等基本功能。

这有利于项目的快速完成,只需要搬砖码畜们专注于业务逻辑,会利用底层的业务逻辑就行了。这些快速开发框架的出现,也降低了我们java行业的就业门槛,但这不利于我们个人的成长(个人竞争力的体现不能只是会写业务逻辑代码,需要的是拥有绝对的技术壁垒,你有我优,你无我有!)

实际过程中使用过md5和sha1消息摘要算法,也看别人用过spring security的BCryptPasswordEncoder

sha1算法介绍及代码:java学习-sha1散列算法

bit:比特或位

byte:字节

sha1消息摘要后得到的是byte[] bytes=new byte[20] ,即20字节长度,160位(20byte * 8=160)二进制长度,
  40(20byte * 2=40,一个byte转为一个的十六进制)个十六进制字符串长度的数据

MD5算法介绍及代码:java学习-MD5消息摘要算法

MD5得到的是 128位,16字节长度, 32个十六进制字符串长度的数据。

BCryptPasswordEncoder

这个spring security的密码加密算法,对相同密码加密每次得到的加密字符串都是不一样的。
这个框架自定义hash加密方法。
源码好复杂:
1.生成指定长度的随机salt字节数组
2.对salt和password进行base64解码、字节数组截取等操作后将salt和password执行spring security自定义的加密算法。
3.将加密后的hash数据和其他数据进行一定的组合得到加密后的字符串

存在问题:

md5 和 sha1 两种散列算法,无论执行多少次,对同一个密码进行加密后的字符换都是一样的,这虽然加密的密码是不可逆的,但可以通过密码字典进行查找比对获得用户真正的密码。
如果是简单的密码,如123456 或 admin 这些很容易被人破解。

现在框架底层加密密码都是在 MD5 和 SHA-1 这两种算法的基础上进行改造。跟spring security的密码加密算法原理类似。

先随机生成一个salt,然后和用户的密码一起使用 md5 或者sha1 进行哈希获得加密字符串。

然后在将salt和加密后的字符换拼接组成加密密码字符串存储到数据库中。

这种改进方法有很多变化性,比如这个salt字符串的长度不确定性,可以由开发人员随意指定。还有这个 md5 或 sha1 哈希这个密码的次数。这个也可以由开发 指定。

这可以更有效的防止用户的密码被暴力破解。

最新总结的密码加密源码地址(不需要依赖第三方jar包)

https://gitee.com/zwh_9527/passwordUtil

java工具类学习,系统中用户密码加密总结的更多相关文章

  1. java工具类学习整理——集合

    好久没有总结一些东西了,同时集合部分的知识点也学习的比较早了,但是从来没有抽时间去研究和学习,今天正好有时间就总结一下map常用的遍历方法: package runningwhile; import ...

  2. Java中使用最频繁及最通用的Java工具类

    在Java中,工具类定义了一组公共方法,Java中使用最频繁及最通用的Java工具类. 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流.so ...

  3. Java:类集框架中集合的学习

    Java:类集框架中集合的学习 集合 Java:Set的学习 Set是类集框架中的集合类.集合是不按特定的方式排序,并且没有重复对象的一种类. Q:Set如何操作?Set中的不按特定方式排序是怎么排序 ...

  4. java工具类之按对象中某属性排序

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...

  5. 常用高效 Java 工具类总结

    一.前言 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码 ...

  6. 排名前 16 的 Java 工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  7. 排名前16的Java工具类

    原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...

  8. 干货:排名前16的Java工具类

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  9. 几种高效的Java工具类推荐

    本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...

随机推荐

  1. CSRF(cross-site request forgery )跨站请求攻击

    CSRF(cross-site request forgery )跨站请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,通过 ...

  2. 剑指Offer的学习笔记(C#篇)-- 左旋转字符串

    题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...

  3. AutoMapper 的简单使用

    var config = new MapperConfiguration( cfg => cfg.CreateMap<SYS_Menu, MenuTreeNode>() .ForMe ...

  4. windows下mysql5.6.x的日志正确配置方法(my.ini) (网上的都是5.6之前的版本)

    https://blog.csdn.net/databatman/article/details/49951853 感谢楼主,找了好久,试了一下楼主的,果然是对的,网上的日志配置都是5.6之前的版本: ...

  5. hbase实践之flush and compaction

    本文主要涉及flush流程,探讨flush流程过程中引入的问题并阐述2种解决策略,最后简要说明Flush执行策略. 对于Compaction,本文主要探讨Compaction要解决的本质问题以及由Co ...

  6. python查看文件夹下所有文件

    实现查看所有文件,重点在于文件夹下又有文件夹时怎样处理,这里通过os模块来解决. 方法一 : 通过递归实现遍历所有文件夹 import os def func(path): for i in os.l ...

  7. Java8-Lambda-No.03

    import java.util.Comparator; import java.util.Objects; import java.util.UUID; import java.util.concu ...

  8. springAop Schedule,注解annotation 实现任务监控

    我们有很多定时任务在任务工程中执行,但是如果我们不加以监控,很有可能定时任务死掉或者卡住我们都不知道. 所以需要做一个任务监控.监控任务当前执行的状态. 还是那样,先让定时任务启动起来,当前我们使用的 ...

  9. js数据类型自动转化规律

    1. 原始数据遇运算符 1. +运算符 1) 如果算子两侧都是字符串,返回拼接结果: 2) 如果算子两侧不全是字符串,则根据实际情况: 如果需要字符串,就调用String(); true + &quo ...

  10. GitHub 在国内无法访问

    解决方法: 1.打开Dns检测|Dns查询 - 站长工具 2.在检测输入栏中输入http://github.com官网 3.把检测列表里的TTL值最小的IP输入到hosts里,并对应写上github官 ...