项目中密码如何存储?

简介: 密码存储安全至关重要。直接存储明文或仅使用MD5、SHA-2等哈希算法存在彩虹表攻击风险。为增强安全性,可提示用户设置复杂密码,或在密码中加入“盐值”并多次迭代哈希,增加破解难度。BCrypt算法因其多重迭代、加盐及可调成本因子,成为更安全的选择。

● 首先,明文肯定是不行的
● 第二,单纯使用 MD5、SHA-2 将密码摘要后存储也不行,简单密码很容易被彩虹表攻击,例如
○ 攻击者可以把常用密码和它们的 MD5 摘要结果放在被称作【彩虹表】的表里,反查就能查到原始密码
加密结果 原始密码
e10adc3949ba59abbe56e057f20f883e 123456
e80b5017098950fc58aad83c8c14978e abcdef
... ...
因此
● 要么提示用户输入足够强度的密码,增加破解难度
● 要么我们帮用户增加密码的复杂度,增加破解难度
○ 可以在用户简单密码基础上加上一段盐值,让密码变得复杂
○ 可以进行多次迭代哈希摘要运算,而不是一次摘要运算
● 还有一种办法就是用 BCrypt,它不仅采用了多次迭代和加盐,还可以控制成本因子来增加哈希运算量,让攻击者知难而退

目录
相关文章
|
20天前
|
NoSQL Redis
Redis的数据淘汰策略有哪些 ?
Redis 提供了 8 种数据淘汰策略,分为淘汰易失数据和淘汰全库数据两大类。易失数据淘汰策略包括:volatile-lru、volatile-lfu、volatile-ttl 和 volatile-random;全库数据淘汰策略包括:allkeys-lru、allkeys-lfu 和 allkeys-random。此外,还有 no-eviction 策略,禁止驱逐数据,当内存不足时新写入操作会报错。
49 16
|
11小时前
|
XML Java 数据库连接
Mybatis映射关系
简介:本文介绍了MyBatis框架中四种常见的关系映射方式,包括一对一、一对多、多对一及多对多。一对一通过简单属性映射实现;一对多通过在主对象中添加集合属性并使用`<collection>`标签映射子对象集合;多对一则利用`<association>`标签在主对象中映射单个子对象;多对多需引入第三方类,分别在两个主对象中添加对方的集合属性,并通过`<collection>`标签实现映射。
47 32
|
11小时前
|
关系型数据库 数据库
数据库如何保证事务的ACID特性?
InnoDB通过undo log实现事务的原子性,支持回滚;采用悲观锁与乐观锁确保事务隔离性;利用redo log保障事务持久性,记录数据页的物理修改并用于恢复;通过上述特性共同维护数据的一致性。
38 26
|
11小时前
|
存储 索引
什么情况下不应该创建索引?
索引应避免在很少使用的列、数据值少的列、text/image/bit类型列上创建,因为这些情况下索引不仅无助于提升查询速度,还会降低系统维护效率,增加存储开销。当数据修改频率远高于查询时,也不宜创建索引。
38 26
|
20天前
|
Java Spring
SpringBoot自动装配的原理
在Spring Boot项目中,启动引导类通常使用`@SpringBootApplication`注解。该注解集成了`@SpringBootConfiguration`、`@ComponentScan`和`@EnableAutoConfiguration`三个注解,分别用于标记配置类、开启组件扫描和启用自动配置。
52 17
|
20天前
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
在项目中,为了解决Redis与Mysql的数据一致性问题,我们采用了多种策略:对于低一致性要求的数据,不做特别处理;时效性数据通过设置缓存过期时间来减少不一致风险;高一致性但时效性要求不高的数据,利用MQ异步同步确保最终一致性;而对一致性和时效性都有高要求的数据,则采用分布式事务(如Seata TCC模式)来保障。
53 14
|
20天前
|
NoSQL Redis
Redis分布式锁如何实现 ?
Redis分布式锁通过SETNX指令实现,确保仅在键不存在时设置值。此机制用于控制多个线程对共享资源的访问,避免并发冲突。然而,实际应用中需解决死锁、锁超时、归一化、可重入及阻塞等问题,以确保系统的稳定性和可靠性。解决方案包括设置锁超时、引入Watch Dog机制、使用ThreadLocal绑定加解锁操作、实现计数器支持可重入锁以及采用自旋锁思想处理阻塞请求。
53 16
|
11小时前
|
存储 数据管理 关系型数据库
数据库分库分表的原因?
分库分表通过减少单库单表负担来提升查询性能。垂直切分按业务耦合度将表或列分布于不同库或表中,减少数据量,优化性能。水平切分则按数据逻辑关系将表分散至多库多表,减小单表数据量,实现分布式处理。选择方式需根据具体需求决定。
29 19
|
12小时前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree ?
在MySQL中,为了提高检索效率和稳定性,采用了B+树作为索引的数据结构。相比二叉树或B树,B+树的非叶子节点仅存储key和指针,使得每页能容纳更多key,树的层级更浅,检索更快;所有数据集中在叶子节点,形成双向链表,利于区间查询。以16KB页为例,三层B+树可容纳约2190万条数据。
8 1
|
12小时前
|
缓存 负载均衡 安全
什么是反向代理
反向代理是一种部署在服务器前端的代理技术,它接收客户端请求并转发给内部服务器,对外隐藏真实服务器。其主要功能包括负载均衡、安全防护和缓存加速,有效提升服务器性能和安全性。
15 5