java工具类学习,系统中用户密码加密总结
现在项目,用户注册登录部分很少有涉及到了,原因:现在热门开发框架都已经在底层帮我们做了一套用户注册,密码加密,登录认证,权限控制,缓存数据等基本功能。
这有利于项目的快速完成,只需要搬砖码畜们专注于业务逻辑,会利用底层的业务逻辑就行了。这些快速开发框架的出现,也降低了我们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工具类学习,系统中用户密码加密总结的更多相关文章
- java工具类学习整理——集合
好久没有总结一些东西了,同时集合部分的知识点也学习的比较早了,但是从来没有抽时间去研究和学习,今天正好有时间就总结一下map常用的遍历方法: package runningwhile; import ...
- Java中使用最频繁及最通用的Java工具类
在Java中,工具类定义了一组公共方法,Java中使用最频繁及最通用的Java工具类. 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流.so ...
- Java:类集框架中集合的学习
Java:类集框架中集合的学习 集合 Java:Set的学习 Set是类集框架中的集合类.集合是不按特定的方式排序,并且没有重复对象的一种类. Q:Set如何操作?Set中的不按特定方式排序是怎么排序 ...
- java工具类之按对象中某属性排序
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...
- 常用高效 Java 工具类总结
一.前言 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码 ...
- 排名前 16 的 Java 工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- 排名前16的Java工具类
原文:https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法 ...
- 干货:排名前16的Java工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- 几种高效的Java工具类推荐
本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...
随机推荐
- [ 转载 ]hashCode方法的相关用法
想要明白hashCode的作用,你必须要先知道Java中的集合. 总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set. 你知道它们的区别吗?前者集合内的元素是有 ...
- proc文件系统详解
/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux内核空间和用户间之间进行通信.在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段, ...
- Python+requests r.json()获取的内容,控制台显示中文Unicode转为utf-8《九》
在接口测试中,直接使用r.json()获取到的结果,难免会在结果中带有中文,但是在控制台的中文输出默认是Unicode编码,不能通过统一在设置中进行设置utf-8,因此为了在控制台更显而易见的显示出中 ...
- 表单文本字段预期描述(placeholder="请输入产品名称"以及prompt:'输入价格')
普通html文本标签设置: <input id="xxx" placeholder="请输入产品名称"/> 带有jQueryEasyUI插件的htm ...
- 2018HDU多校联赛第六场 6373 Pinball——水题&&物理题
题意 给定一个斜面,从某处让一个小球作自由落体运动,求小球与斜面的碰撞次数(假设都为弹性碰撞). 分析 题图如下,x轴.y轴是虚拟的. 根据高中物理的套路,沿斜面方向分解重力加速度即可. #inclu ...
- luogu 2515
对于软件的依赖可以转化为图上点之间的边的关系发现对于一个强联通分量内的软件,一安则全安Tarjan缩点缩点后,从虚拟节点 0 向所有入度为 0 的点连边这样就构成了一棵树树形 dp$dp[i][j]$ ...
- thinkphp5 大量数据批量插入数据库的解决办法
对于数据量很小,怎么玩都是可以的. but!!! 如果有几十万或者百万级别的数据,该怎么处理,请往下面看
- SIGCHLD函数
SIGCHLD的产生条件 子进程终止时 子进程接收到SIGSTOP信号停止时 子进程处在停止态,接受到SIGCONT后唤醒时 借助SIGCHLD信号回收子进程 子进程结束运行,其父进程会收到SIGCH ...
- loadrunner11安装
今天虚拟机里面装了下lr11,虚拟机版本是vm9.0,先在虚拟机里面装了windows2003,当然lr也是可以装在自己电脑上面的,但是最好是纯净的环境,由于我电脑东西比较多,所以我就装在虚拟机里面了 ...
- MySQL inodb cluster部署
innodb cluster是基于组复制来实现的. 搭建一套MySQL的高可用集群innodb. 实验环境: IP 主机名 系统 软件 192.168.91.46 master RHEL7.4 mys ...