当前位置:网站首页 > Haskell函数式编程 > 正文

密码加密的方式有哪些(密码的加密与解密的方式)



哈喽,大家好呀!这里是码农后端。本篇将带你了解一些常见的密码加密方式。毋庸置疑,密码的安全性对于用户来说是非常重要的,如何保证密码的安全性使其不被激活成功教程也是一直以来的一个非常重要的话题。

5b807f4f5c168082714a46a2a4bf66d4.jpeg

1、密码加密方式

1.1 明文密码

最初,密码以明文形式存储在数据库中。但是恶意用户可能会通过SQL注入等手段获取到明文密码,或者也可能发生程序员将数据库数据泄露的情况。

1.2 Hash算法

Spring Security的PasswordEncoder接口用于对密码进行单向转换,从而将密码安全地存储。对密码单向转换需要用到哈希算法,例如MD5、SHA-256、SHA-512等。

注:哈希算法是单向的,只能加密,不能解密

因此,数据库中存储的是单向转换后的密码,Spring Security在进行用户身份验证时需要将用户输入的密码进行单向转换,然后与数据库的密码进行比较。

因此,如果发生数据泄露,只有密码的单向哈希会被暴露。由于哈希是单向的,并且在给定哈希的情况下只能通过暴力激活成功教程的方式猜测密码

注:暴力激活成功教程依赖于计算机的性能,只要激活成功教程的次数足够多,把所有的字母组合都列举出来,那么终究可以激活成功教程出密码。

1.3 彩虹表

由于暴力激活成功教程很吃计算机的性能,如果每次都要对一个原始的名文密码做哈希运算的话,是非常耗费计算机资源的,所以就有恶意用户创建出了名为彩虹表的查找表。

4c7a5ac40c852e2cabb08ccca93f1244.png

彩虹表是一个庞大的、针对各种可能的字母组合预先生成的哈希值集合,有了它可以快速激活成功教程各类密码(因为已经预先生成,所以直接来拿比对即可)。越是复杂的密码,需要的彩虹表就越大,主流的彩虹表都是100G以上,目前主要的算法有LM, NTLM, MD5, SHA1, MYSQLSHA1, HALFLMCHALL, NTLMCHALL, ORACLE-SYSTEM, MD5-HALF。

1.4 加盐密码

随着计算机性能的提升,用彩虹表激活成功教程的方式也变得非常简单。为了减轻彩虹表的效果,开发人员开始使用加盐密码不再只使用密码作为哈希函数的输入,而是为每个用户的密码生成随机字节(称为盐)

盐和用户的密码将一起经过哈希函数运算,生成一个唯一的哈希。盐将以明文形式与用户的密码一起存储。然后,当用户尝试进行身份验证时,盐和用户输入的密码一起经过哈希函数运算,再与存储的密码进行比较。唯一的盐意味着彩虹表不再有效,因为对于每个盐和密码的组合,哈希都是不同的。

1.5 自适应单向函数

随着硬件的不断发展,加盐哈希也不再安全。因为计算机可以每秒执行数十亿次哈希计算,并轻松地激活成功教程每个密码。

现在,开发人员开始使用自适应单向函数来存储密码。使用自适应单向函数验证密码时,故意占用资源(故意使用大量的CPU、内存或其他资源)。自适应单向函数允许配置一个“工作因子”,随着硬件的改进而增加。

一般建议将“工作因子”调整到系统中验证密码需要约一秒钟的时间,这种权衡可以让攻击者难以激活成功教程密码。由于计算机可以每秒执行数十亿次哈希计算,如果验证密码需要约一秒钟时间的话,就很难再激活成功教程了我们的密码了。

自适应单向函数包括bcrypt、PBKDF2、scrypt和argon2

2、PasswordEncoder

PasswordEncoder是一个密码解析器。

2.1 BCryptPasswordEncoder

使用广泛支持的bcrypt算法来对密码进行哈希。为了增加对密码激活成功教程的抵抗力,bcrypt故意设计得较慢。和其他自适应单向函数一样,应该调整其参数,使其在您的系统上验证一个密码大约需要1秒的时间。

BCryptPasswordEncoder的默认实现使用强度10。建议在自己的系统上调整和测试强度参数,以便验证密码时大约需要1秒的时间。

2.2 Argon2PasswordEncoder

使用Argon2算法对密码进行哈希处理。Argon2是密码哈希比赛的获胜者。为了防止在自定义硬件上进行密码激活成功教程,Argon2是一种故意缓慢的算法,需要大量内存。与其他自适应单向函数一样,它应该在系统上调整为大约1秒来验证一个密码。

当前的Argon2PasswordEncoder实现需要使用BouncyCastle库。

2.3 Pbkdf2PasswordEncoder

使用PBKDF2算法对密码进行哈希处理。为了防止密码激活成功教程,PBKDF2是一种故意缓慢的算法。与其他自适应单向函数一样,它应该在系统上调整为大约1秒来验证一个密码。

当需要FIPS认证时,这种算法是一个很好的选择

b27e7756b70429f3eefeb2336a3eb3c1.png

2.4 SCryptPasswordEncoder

使用scrypt算法对密码进行哈希处理。为了防止在自定义硬件上进行密码激活成功教程,scrypt是一种故意缓慢的算法,需要大量内存。与其他自适应单向函数一样,它应该在系统上调整为大约1秒来验证一个密码。

3、密码加密测试

在测试类中编写一个测试方法

运行得到密码

注:每次运行得到的密码是不一样的,因为在生成密码的过程中有一个随机数参与了盐运算

4.DelegatingPasswordEncoder

探索存储的密码形式:{bcrypt}10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW

Ctrl + N检索DelegatingPasswordEncoder.class源码,并添加断点跟踪,重新启动调试项目。在浏览器输入http://localhost:8080/ ,进行登录调试。

f876dd5b40e277a5111c15482aa41bd1.jpeg

通过如下源码可知:可通过{bcrypt}前缀动态获取和密码的形式类型一致的PasswordEncoder对象

目的:方便随时做密码策略的升级,兼容数据库中的老版本密码策略生成的密码

d657a0ea1c3b2b019f910371223cd814.png

780f9e069bf75000ad26cb21995007e8.png

4d97c3696530db724755de3773badd89.gif

喜欢就点击上方关注我们吧!

e400d16e6b193cf17bfff95d9dd4a9e3.png

cf14c004abf7aa8d77f80b6b0454f134.jpeg

什么是RESTful?相关的注解有哪些?

36408ffd2f33375d1d179bde248bd70f.jpeg

什么是Spring Security?具有哪些功能?

2d325f3a755cb429dc215206878e161b.jpeg

面试官:AOP有哪些使用场景?如何实现Spring事务?事务失效场景有哪些?

3a11553942513731ba5d8c1ee176fb08.jpeg

什么是redis的缓存穿透,缓存击穿和缓存雪崩?

到此这篇密码加密的方式有哪些(密码的加密与解密的方式)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 摩斯密码加密方式(摩斯密码加密方式最全)2025-02-10 20:09:10
  • max的函数功能是什么(max函数的含义)2025-02-10 20:09:10
  • 字符串转换字符代码的函数是(字符串转换字符代码的函数是)2025-02-10 20:09:10
  • 聚合函数 null(聚合函数中不忽略空值(null) 的是)2025-02-10 20:09:10
  • 阿里巴巴支付方式有哪些(阿里巴巴有几种付款方式)2025-02-10 20:09:10
  • 地铁支付方式怎么更换(支付宝地铁支付怎么修改支付方式)2025-02-10 20:09:10
  • max开窗函数(开窗函数使用)2025-02-10 20:09:10
  • canfd报文格式(can报文格式有哪几种)2025-02-10 20:09:10
  • sigmoid输出值(sigmoid函数输出)2025-02-10 20:09:10
  • 编程入门基础知识 那些符号是什么(编程入门基础知识 那些符号是什么)2025-02-10 20:09:10
  • 全屏图片