🔒

“系统被拖库了!”
这可能是开发者最恐惧的噩梦。而当用户密码以明文暴露时,灾难将席卷每个用户——密码重用的惯性会让黑客轻松攻破他们在其他平台的账户。作为后端开发者,我们握有守护用户安全的第一道钥匙:科学的密码存储策略


🚨 血的教训:密码存储的三大禁忌

  1. ❌ 明文存储
    -- 致命操作!永远不要这样做!
    INSERT INTO users (username, password) VALUES ('alice', 'P@ssw0rd!');
    
    • 数据库泄露 = 密码直接暴露
  2. ❌ 弱哈希存储 (MD5, SHA-1)
    # 看似安全,实则脆弱不堪
    password_md5 = hashlib.md5("P@ssw0rd!".encode()).hexdigest() # 加密强度 ≈ 一张纸巾
    
    • 彩虹表攻击瞬间破解
    • GPU 每秒可计算数十亿次哈希
  3. ❌ 无盐哈希
    // 黑客破解一个密码,等于破解所有相同密码
    String hashedPwd = SHA256("P@ssw0rd!"); 
    
    • 相同密码产生相同哈希 → 批量破解

🛡️ 正确的防御姿势:现代密码存储方案

核心原则:单向哈希 + 唯一盐值 + 慢哈希函数
用户密码
生成随机盐
盐 + 密码拼接
慢哈希函数处理
存储 算法+盐+哈希值
🔑 关键组件解析:
  1. 盐(Salt)

    • 每个用户独有的长随机字符串(16字节+)
    • 作用:相同密码 → 不同哈希值,彻底摧毁彩虹表攻击
    • 存储方式:直接与哈希值一起存于数据库(无需保密)
  2. 慢哈希函数(Key Derivation Function, KDF)

    算法特点推荐度
    bcrypt内置盐,可调计算成本(work factor),抗 GPU/ASIC 优化⭐⭐⭐⭐
    scrypt内存密集型设计,大幅增加硬件攻击成本⭐⭐⭐⭐
    Argon22015 密码哈希竞赛冠军,可配置内存/CPU/线程数,当前最前沿⭐⭐⭐⭐⭐
    PBKDF2老牌标准,但较易被 GPU 破解⭐⭐

💻 代码实战:如何正确加密密码(Python示例)

import argon2# Argon2 加密(推荐!)
def hash_password(password):hasher = argon2.PasswordHasher(time_cost=3,          # 迭代次数(增加计算时间)memory_cost=65536,    # 内存开销(单位KB)parallelism=4,        # 并行线程数hash_len=32,          # 输出哈希长度salt_len=16           # 盐长度)return hasher.hash(password)  # 返回包含算法、盐、哈希的字符串# 验证密码
def verify_password(stored_hash, input_password):try:hasher = argon2.PasswordHasher()return hasher.verify(stored_hash, input_password)except:  # 捕获验证失败(哈希不匹配、格式错误等)return False# 使用示例
user_pwd = "S3cr3tP@ss!"  
hashed = hash_password(user_pwd)  # 存储到数据库的是这个哈希字符串# 登录验证
login_ok = verify_password(hashed, "S3cr3tP@ss!")  # True
login_ok = verify_password(hashed, "wrong!")       # False

⚙️ 关键配置参数:平衡安全性与性能

参数作用调整策略
time_cost增加哈希计算时间服务器能承受的最高延迟(通常 0.5-1秒)
memory_cost增加内存消耗量耗尽攻击者 GPU/ASIC 的内存资源
parallelism并行计算线程数根据服务器 CPU 核心数调整

📌 重要提示:随着硬件升级,需定期调高参数值(如每1-2年)。部分库支持自动迁移旧哈希。


🧩 进阶安全加固策略

  1. 加密前预哈希
    超长密码?先过一遍 SHA-256 再交给慢哈希函数,避免 DoS 攻击。

  2. 密钥层级分离

    主密钥 HSM/秘钥管理服务
    加密用户密钥
    数据库
    用户密码
    慢哈希
    用用户密钥加密

    即使数据库全泄露,黑客也无法解密密码哈希。

  3. 强制密码策略

    • 最小长度(≥12位)
    • 禁用常见弱密码(P@ssw0rd, 123456
    • 建议密码管理器(如 Bitwarden)

⚠️ 绝对禁区:开发者常踩的坑

  • 🚫 自己发明加密算法 → 99.9999% 概率造出废铁
  • 🚫 使用加密(Encryption)而非哈希 → 密码需要能被还原?错!
  • 🚫 日志中记录密码 → 即使星号(***)也可能意外泄露
  • 🚫 前端传明文密码 → 必须 HTTPS + 前端哈希(仅防窥探,后端仍需完整哈希)

🔭 未来趋势:无密码认证(Passwordless)

  • WebAuthn:基于生物识别/安全密钥的 FIDO2 标准
  • 魔法链接/邮件 OTP:点击即登录
  • 设备绑定:手机 App 扫码确认

但在此之前,科学存储密码仍是每个后端的必修课。


💎 总结

原则正确做法错误做法
存储形式单向哈希明文/可逆加密
算法选择bcrypt/scrypt/Argon2MD5/SHA-1
盐值管理长随机盐(每个用户独立)固定盐/无盐
计算成本高迭代次数/内存消耗单次快速哈希
密码传输HTTPS + 避免前端明文HTTP 明文传输

安全不是可选项,而是责任的起点。 每一次密码验证,都是用户对你托付的信任。用最强的算法,筑最硬的墙——因为最好的安全漏洞,是那个从未出现的漏洞。

行动号召: 立刻检查你的项目!
grep -r "md5\|sha1\|encrypt_password" your_codebase/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87742.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87742.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87742.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 3.29+使用isar构建失败

执行命令:flutter build apk --release 报错 Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!FAILURE: Build failed with an exception. …

SQL 转 Java 实体类工具

拿到数据库建表语句后怎么高效写 Java 实体类?这款工具直接帮你全自动生成! 作为一名后端 Java 工程师,你是不是也经历过以下情况: ✅ 拿到一份完整的建表 SQL,却要手动写 Java Bean ✅ 字段几十个,嵌套复…

创客匠人视角下:创始人 IP 打造与知识变现的深度耦合路径

在知识经济蓬勃发展的当下,创始人 IP 打造与知识变现的融合已成为行业破局关键。创客匠人作为深耕知识付费赛道多年的服务平台,其创始人老蒋提出的 “土壤构建能力” 理论,为理解这一融合逻辑提供了独特视角。从本质来看,创始人 I…

【网络协议安全】任务13:ACL访问控制列表

目录 一、概念 1、前言 2、应用场景 3、ACL分类 基于ACL标识方法的划分 基于对IPv4和IPv6支持情况的划分 基于ACL规则定义方式的划分 4、ACL的基本原理 ACL的组成 ACL的匹配机制 5、ACL常用匹配原则 6、ACL常用的匹配项 生效时间段 IP承载的协议类型 源/目的IP…

TensorFlow 安装使用教程

一、TensorFlow 简介 TensorFlow 是由 Google 开发的开源深度学习框架,支持数据流图计算,可运行于 CPU/GPU/TPU。它被广泛应用于语音识别、图像处理、自然语言处理等多个 AI 领域。 二、安装 TensorFlow 2.1 pip 安装(默认 CPU 版本&#x…

腾讯云认证考试报名 - TDSQL数据库交付运维专家(TCCE MySQL版)

数据库交付运维专家- 腾讯云TDSQL(MySQL版) 适合人群: 适合TDSQL(MySQL版)各组件扩缩容、运维、性能优化、故障解决、压力测试等数据库开发、运维、管理人员。 认证考试: 单选*40道多选*20道上机*20道 考试时长: 理论考试120分钟,上机考试…

webUI平替应用,安装简单,功能齐全

前言 在安装本地大模型后,我们都会为大模型安装一个用户界面,这样就可以实现语音输入,对话保存,微调,构建本地知识库等高阶功能。 目前最火的本地大模型UI,就是gihub上的webUI,但他不仅依赖较…

【Maven】Maven核心机制的 万字 深度解析

Maven核心机制的万字深度解析一、依赖管理机制全解(工业级依赖治理方案)1. 坐标体系的本质与设计哲学2. 依赖传递与仲裁算法的工程实现**冲突仲裁核心算法**企业级仲裁策略3. Scope作用域的类加载隔离原理4. 多级仓库体系架构设计二、构建生命周期底层原…

暑期前端训练day4

今天主要是有关周赛的,比赛的时候是用c写的并且是 ak了,但是就是想用js再复盘一下,也不能只是图一时之爽,如果是换在实际的场景里面我是不是只会用 c快速写出来。 最近也要从js逐渐转向ts,感觉Ts才是主旋律&#xff0c…

转Go学习笔记(2)进阶

前置:转Go学习笔记1语法入门 目录Golang进阶groutine协程并发概念梳理创建goroutine语法channel实现goroutine之间通信channel与range、selectGoModulesGo Modules与GOPATHGo Modules模式用Go Modules初始化项目修改模块的版本依赖关系Go Modules 版本号规范vendor …

无人机3控接力模式技术分析

一、运行方式 1. 接力控制流程 位置触发切换:飞控中心实时监测无人机位置,当进入预设的切换路线(如靠近下一个机库或控制器覆盖范围)时,触发切换流程。 控制权请求与验证: 当前控制器&#xff08…

Actor Critic对比PGValue-Based

目录 回顾一下policy gradient: QAC算法: A2C- advantage actor critic 问题: 1. 为什么要结合起来,能解决什么问题? 1. 策略梯度 (PG) 的优势与核心问题 2. 基于价值方法 (Value-Based) 的优势与局限性 3. 潜…

buuctf-re

1.findKey 打开是C而且有点乱,所以找关键步骤有一个加密进去是不能反编译的,有花指令, 这里有重复的部分把下面的NOP掉,重新定义函数’p’ 之后分析逻辑, // positive sp value has been detected, the output may be wrong! int __userpurge sub_40191F<eax>(int a1&l…

RuoYi、Vue CLI 和 uni-app 结合构建跨端全家桶方案

将 RuoYi、Vue CLI 和 uni-app 结合构建跨端全家桶方案&#xff0c;可以实现一套代码管理后台系统&#xff08;PC&#xff09;和移动端应用&#xff08;H5/小程序/App&#xff09;。以下是整合思路和关键步骤&#xff1a; 技术栈分工 RuoYi&#xff1a;后端框架&#xff08;Spr…

二十九、windows系统安全---windows注册表安全配置

环境 windows server 2012 原理 注册表简介: 注册表&#xff08;Registry&#xff0c;繁体中文版Windows操作系统称之为登录档&#xff09;是Microsoft Windows中的一个重要的数据库&#xff0c;用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候&#…

Android 一帧绘制流程

Android 一帧绘制流程揭秘&#xff1a;主线程与 RenderThread 的双人舞 核心目标&#xff1a;60帧/秒的丝滑体验&#xff0c;意味着每帧必须在16.67ms内完成所有工作&#xff01; 想象一下屏幕刷新就像放映电影&#xff0c;一帧接一帧。Android系统为了播放这“电影”&#xff…

智能网盘检测软件,一键识别失效链接

软件介绍 今天为大家推荐一款由吾爱论坛大神开发的网盘链接检测工具&#xff0c;专为网络资源爱好者设计&#xff0c;可快速批量检测分享链接的有效性。 核心功能 这款工具能够智能识别各类网盘分享链接的有效状态&#xff0c;用户只需批量粘贴链接&#xff0c;软件便会自…

408第三季part2 - 计算机网络 - 应用层

理解 客户机不能直接通信&#xff0c;要通过服务器才行 P2P可以 先记个名字 看图记查询流程 然后迭代就是 主机到本地 本地先查根&#xff0c;然后返回&#xff0c;再查顶级&#xff0c;然后返回&#xff0c;再查权限 然后注意这里主机到本地都是递归查询&#xff0c;其他的…

Modern C++(七)类

7、类 7.1、类声明 前置声明&#xff1a;声明一个将稍后在此作用域定义的类类型。直到定义出现前&#xff0c;此类名具有不完整类型。当代码仅仅需要用到类的指针或引用时&#xff0c;就可以采用前置声明&#xff0c;无需包含完整的类定义。 前置声明有以下几个作用&#xf…

4-6WPS JS宏自定义函数变长参数函数(实例:自定义多功能数据统计函数)学习笔记

一、自定义函数:自定义多功能数据统计函数。示例1&#xff1a;function jia1(x,...arr){//自定义变长函数&#xff0c;X第一参数&#xff0c;...arr为变长参数可放入无数个参数&#xff0c;就像是数组return xWorksheetFunction.Sum(arr)//返回&#xff0c;X第一参数WorksheetF…