CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
安全加密

【安全加密】密码存储:加盐哈希与升级策略

2026-09-23 16:58 作者:996 技术组 0 阅读 996引擎Lua教程传奇脚本

实战应用:用在哪里

密码的存储只有一条铁律:库里永远不放明文,也不放裸哈希——盐加慢哈希是底线配置。库被拖走的那天,盐哈希让攻击者的破解成本从分钟级涨到年级级,这笔保险费是账号体系的底价。

存储的规范

lua

---注册与改密:盐哈希入库存
local function newSalt()
    local s = {}
    for i = 1, 16 do
        s[i] = string.char(math.random(65, 90))
    end
    return table.concat(s)
end

function Auth.setPassword(userId, plain)
    local salt = newSalt()
    local dk = Cipher.pbkdf(plain, salt, 1000)
    DB.exec("UPDATE accounts SET salt = ?, dk = ?, iter = ? WHERE id = ?",
        salt, dk, 1000, userId)
end

---登录校验:同参数重算比对
function Auth.verify(userId, plain)
    local row = DB.queryRow(
        "SELECT salt, dk, iter FROM accounts WHERE id = ?", userId)
    if not row then return false end
    return Cipher.pbkdf(plain, row.salt, row.iter) == row.dk
end

每账号独立 16 字节盐,密码加 盐 后过 1000 轮的慢哈希,库里存盐、派生密钥与轮数三件套。独立盐让相同密码的哈希互不相同,彩虹表的预计算失效;慢哈希让单次破解的计算成本翻千倍。校验按库里存的参数重算比对,轮数存进库的意义就在升级——下一节见。登录接口的失败频控与此配合,在线的暴力尝试被限速,离线的暴力尝试被慢哈希拖死。

算法的升级

lua

---透明升级:登录成功时顺带重哈希
function Auth.onLoginOk(userId, plain)
    local row = DB.queryRow(
        "SELECT iter FROM accounts WHERE id = ?", userId)
    if row.iter < 5000 then
        -- 参数升级:1000 轮提到 5000 轮
        local salt = newSalt()
        local dk = Cipher.pbkdf(plain, salt, 5000)
        DB.exec("UPDATE accounts SET salt=?, dk=?, iter=? WHERE id=?",
            salt, dk, 5000, userId)
    end
end

算法的升级难题在于旧哈希无法解回明文重算,透明的解法是登录成功的那一刻:明文在手,立刻用新参数重哈希入库,iter 字段记录版本。不强制全员重置密码,升级随登录自然完成,活跃账号一个月内完成迁移,沉睡账号在下次登录时补课。新参数的轮数提到 5000,服务器的校验耗时增加要压测兜底——安全与登录延迟的平衡点是 20 毫秒以内的校验耗时。迁移的完成度看 iter 分布的周报,旧参数的账号占比是升级进度的直接读数。

验证与监控

库字段的巡检:明文与裸 MD5 特征的扫描每周跑,违规存储当场告警;登录校验的耗时分位监控,参数升级后的耗时增幅控制在 30% 内。

踩坑记录

盐曾经全局共用一把,同密码的哈希相同让撞库者一眼识别共同密码群,独立盐覆盖。迭代参数曾经写死在代码里,升级要发版,iter 入库后参数与数据同生命周期。升级曾经用强制重置密码推进,一老玩家群体流失,透明升级的方案让流失归零。

上线要点

密码策略的文档写明参数与升级机制,交接不靠口口相传。改密与找回的接口同样走 setPassword 的规范路径,旁路的存储是漏洞的温床。管理员后台不提供密码查看,只提供重置,看得见的明文就是放不住的明文。

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

框架设计行会等级经验成长

【框架设计】行会等级:行会经验与等级成长框架

实战应用:用在哪里 行会等级是行会玩法的地基:建筑上限、商店货架、活动资格全部挂在等级上。行会经验与等级成长框架把升级路径做…

2026-09-23 19:15 996 技术组 · 0 阅读
玩法策划大事记里程碑展示

【玩法策划】行会大事记:里程碑事件的自动记录与展示设计

实战应用:用在哪里 行会走过两年,第一次拿下沙巴克、第一位满级成员、最强的一次攻防战,这些瞬间散落在聊天记录里无人记得。行会…

2026-09-23 19:15 996 技术组 · 0 阅读
案例复盘合服抢注重名复盘

【案例复盘】合服抢注:重名抢注引发的归属纠纷复盘

实战应用:用在哪里 两服合服时允许玩家自由抢注重名角色,结果原服老玩家“至尊战神”的名字被另一服新号抢先注册,老玩家两年的社…

2026-09-23 19:15 996 技术组 · 0 阅读
前端接口行会申请审批列表

【前端接口】行会申请列表:入会申请的批量审批界面

实战应用:用在哪里 热门行会一天几十份入会申请,逐条点开看效率极低还容易漏人。行会申请列表把申请铺成可批量操作的清单:每行显…

2026-09-23 19:15 996 技术组 · 0 阅读
引擎触发炼狱回廊递减增益

【引擎触发】炼狱回廊:逐层递减的增益触发设计

实战应用:用在哪里 炼狱回廊是高端玩家的试炼场:十层回廊逐层深入,每下一层全属性递减百分之五,越往深处怪物越强、自己越弱,奖…

2026-09-23 19:15 996 技术组 · 0 阅读
玩法策划跨服镖局押运跨服

【玩法策划】跨服镖局:跨服押运的高风险高回报设计

实战应用:用在哪里 本服押镖产出稳定但缺乏刺激,高战玩家押镖像散步。跨服镖局把押运拉到跨服边境:路线穿越两服交界的无主之地,…

2026-09-23 19:15 996 技术组 · 0 阅读