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

这有利于项目的快速完成,只需要搬砖码畜们专注于业务逻辑,会利用底层的业务逻辑就行了。这些快速开发框架的出现,也降低了我们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

最新文章

  1. [(ngModel)]的实现原理
  2. vs2008所有DTE.ExecuteCommand命令
  3. php http头设置相关信息
  4. NOI WC2016滚粗记
  5. 【Beta版本】冲刺-Day5
  6. C# 调用百度地图Web服务API
  7. 加速Eclipse使其成为超快的IDE
  8. jQuery.Autocomplete实现自动完成功能(详解)
  9. SqlServer数据文件增长也很快,到底是哪些表增长造成的呢?
  10. MySQL EER反向建表
  11. Photoshop技能167个经典的Photoshop技巧大全
  12. angular自定义分页组件(实用)
  13. SQLServer之集合
  14. 企微云CRM操作指南 – 道一云|企微
  15. mysql 索引查询 、创建 create index 与 add index 的区别
  16. centos LVM详解
  17. Jedis 之 初始<一>
  18. 20145118 《Java程序设计》第5周学习总结 教材学习内容总结
  19. ubuntu安装mysql-python
  20. 通过解读 WPF 触摸源码,分析 WPF 插拔设备触摸失效的问题(问题篇)

热门文章

  1. Java核心技术 卷一 复习笔记(丁
  2. [唐胡璐]Selenium技巧- dataProvider实现数据驱动
  3. 场效应管种类-场效应管N、P沟道与增强、耗尽型工作原理等知识详解 如何选用晶体三极管与场效应管的技巧
  4. linux下解决安装jdk后‘环境变量’不生效的问题
  5. pyinstaller打包程序包含openpyxl库问题解决
  6. P5312 [Ynoi2011]D2T1
  7. webuploader+文件夹上传
  8. win7虚拟机MAC系统
  9. 用python实现简易学生管理系统
  10. IdentityServer4入门二