🧩 Argon2 密码哈希

📘 概述

argon2 是一种现代、安全的密码哈希算法 ,用于安全存储用户密码或其他敏感认证信息。 它不是加密(encryption),而是单向哈希(hashing) ------ 无法解密。

Argon2 是 2015 年密码哈希竞赛(PHC)的获胜算法,目前公认为业界最安全、最先进的哈希方案之一。


🧠 核心思想

概念 说明
哈希(Hash) 将明文密码转换为固定长度的随机字符串(不可逆)
加盐(Salt) 在哈希前加入随机数据,使每个结果唯一
验证(Verify) 用输入密码重新计算哈希并比对是否一致
不可逆 无法"解密"得到原始密码

🧰 Node.js 示例

js 复制代码
import argon2 from "argon2";

async function example() {
  const password = "123456";

  // 1️⃣ 生成哈希
  const hash = await argon2.hash(password);
  console.log("哈希结果:", hash);
  // 示例输出: $argon2id$v=19$m=65536,t=3,p=4$YWFh...ZGRk

  // 2️⃣ 验证密码
  const isValid = await argon2.verify(hash, "123456");
  console.log("验证结果:", isValid); // true

  // 3️⃣ 错误示例
  console.log(await argon2.verify(hash, "wrong")); // false
}

example();

🧩 Python 等价实现(argon2-cffi)

python 复制代码
from argon2 import PasswordHasher

ph = PasswordHasher()
hash = ph.hash("123456")
print(hash)

# 验证密码
ph.verify(hash, "123456")  # ✅ 正确

安装:

bash 复制代码
pip install argon2-cffi

🧩 自动加盐机制(Salt)

Argon2 在生成哈希时会自动加入随机盐(salt) 。 每次调用 argon2.hash(),即使输入的密码相同,生成的哈希也不同。

例子:

js 复制代码
const hash1 = await argon2.hash("123456");
const hash2 = await argon2.hash("123456");
console.log(hash1);
console.log(hash2);

输出(注意不同):

ini 复制代码
$argon2id$v=19$m=65536,t=3,p=4$4tYpH...$1mSw...
$argon2id$v=19$m=65536,t=3,p=4$kqC6z...$TnsA...

✅ 原因:每次都会生成一个随机盐。 盐会自动包含在哈希字符串中,无需手动保存或管理。


验证时的工作原理

argon2.verify(stored_hash, input_password) 会自动:

  1. 从哈希字符串中解析盐和算法参数;
  2. 用输入密码和解析出的盐重新计算哈希;
  3. 比对结果是否一致。

👉 所以只要保存这一整串哈希字符串,就足够验证密码,无需额外存盐。


🔒 哈希结果结构解析

ruby 复制代码
$argon2id$v=19$m=65536,t=3,p=4$<salt>$<hash>
字段 含义
argon2id 使用的 Argon2 类型(推荐)
v=19 算法版本
m=65536 内存成本(越大越安全)
t=3 迭代次数
p=4 并行度
salt 随机盐
hash 哈希结果

⚠️ 重要特性

特性 说明
自动加盐 ✅ 内置随机盐,每次不同
不可逆 ❌ 不能解密还原原文
可验证 ✅ 可用 verify() 检查密码是否匹配
抗暴力破解 ✅ 需要大量内存和 CPU 时间
可配置 可调整内存成本(m)、迭代次数(t)、并行度(p)

📎 小结

操作 方法
生成哈希 await argon2.hash(password)
验证密码 await argon2.verify(hash, inputPassword)
是否自动加盐 ✅ 是
盐需保存吗 ❌ 不需要(哈希中已包含)
Python 实现 argon2-cffi

🗒️ 记住: Argon2 是密码哈希算法,不是加密算法。 它的目标是让密码无法被还原,但能被安全地验证。

相关推荐
奈落241 小时前
AI辅助的另一面:从2026年国际AI安全报告的“故障”清单到国内专家的可靠性短板,自主行动的Agent为什么更难及时干预
人工智能·安全·agent·本地部署·ai 办公
火山引擎开发者社区3 小时前
eMudhra 证书失陷:容器用户最容易忽略的镜像信任链漏洞
人工智能
LabVIEW开发4 小时前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序
实名上网宋凯宣5 小时前
Django
后端·python·django
飞猫的边缘AI5 小时前
英特尔量子生意
人工智能·量子计算·边缘ai
深蓝AI5 小时前
桌面 Agent 缺的不是视觉:Vercel 开源 agent-desktop,用无障碍树 ref 替代截图坐标
人工智能·程序员
镜子AI5 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
向哆哆6 小时前
羊行为目标检测数据集:4类别、2,000张图像 | 目标检测
人工智能·yolo·目标检测·目标跟踪
如若1236 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python
利威尔xu7 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang