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

【安全加密】交易密码:二级密码与资金保护

2026-09-21 18:14 作者:996 技术组 安全加密

实战应用:用在哪里

盗号的第二道防线不是登录密码,是交易密码:账号丢了,仓库里那把裁决之杖还在——大额交易与仓库操作要求二级密码,第二把锁让盗号者拿到账号也搬不走资产。

二级密码的校验

lua

---大额交易的二级验证
local BIG_TRADE_GOLD = 100000

function Trade.execute(actor, targetName, gold, itemIdx)
    if gold >= BIG_TRADE_GOLD then
        local passed = getplayvar(actor, 2, "TradePassAt")
        -- 二级密码 5 分钟内有效
        if passed == nil or os.time() - tonumber(passed) > 300 then
            sendmsg(actor, 1, "大额交易请先输入交易密码")
            Trade.promptSecond(actor)
            return false
        end
    end
    -- 正常的交易结算
    return Trade.settle(actor, targetName, gold, itemIdx)
end

交易密码的触发线按金额划:单笔 10 万金币以上的交易、仓库的全部取出操作、装备的解除绑定,三类动作要求二级验证。验证通过后的 5 分钟窗口内连续操作免重复输入——频繁大额的行会商人不必每笔都敲,窗口的时效是安全与便利的平衡点。二级密码独立于登录密码,六位数字在仓库页首次设置,忘记只能走客服的实名通道找回。

验证的防护

lua

---校验:错误计数与锁定
function Trade.verifySecond(actor, input)
    local fails = tonumber(getplayvar(actor, 2, "TradeFailCnt")) or 0
    if fails >= 3 then
        sendmsg(actor, 1, "错误次数过多,请 30 分钟后再试")
        return false
    end
    local dk = getplayvar(actor, 2, "TradePinHash")
    if Cipher.pbkdf(input, actor:GetUserId(), 500) ~= dk then
        setplayvar(actor, "HUMAN", "TradeFailCnt", fails + 1, 1)
        sendmsg(actor, 1, "交易密码错误,剩余尝试 " .. (2 - fails) .. " 次")
        return false
    end
    setplayvar(actor, "HUMAN", "TradeFailCnt", 0, 1)
    setplayvar(actor, "HUMAN", "TradePassAt", os.time(), 0)
    return true
end

二级密码的存储同样是加盐哈希,明文不落任何库。错误的计数三次锁定 30 分钟——盗号者的穷举窗口被锁死,合法玩家输错也有明确的等待提示。验证通过的时间戳走内存不落库,重启后要求重新验证,窗口的有效期宁紧勿松。二级密码与交易的关系是资产分层:小额的自由交易保手感,大额的第二道锁保资产,分层的界限按服务器的经济规模定档。

验证与监控

二级验证的触发量与通过率的监控,触发量骤增提示大额交易的异常潮;锁定的次数统计与客服申诉的关联,锁定误伤的样本回驱动阈值的校准。

踩坑记录

验证窗口曾经持久化到库,重启后窗口依然有效,盗号者在窗口期搬空仓库,窗口改内存态。错误计数曾经不锁定只提示,暴力穷举的尝试一小时几千次,锁定的硬闸补上。设置流程曾经不验旧密码,被盗会话直接改掉交易密码,改密必须先验旧密。

上线要点

二级密码的设置引导放在首次大额交易前,设置的转化靠时机驱动。触发线按服务器物价季度校准,通胀让 10 万不再是门槛时阈值跟进。二级密码与设备绑定的组合:常用设备的验证窗口放宽到 30 分钟,新设备严格到单次。

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

作者履历与出处

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

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

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

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

玩法策划沙巴克税收

【玩法策划】沙城税务官:税收分配与廉政度的玩法设计

实战应用:用在哪里 沙巴克占领行会坐收税收却只进不出,非占领行会的玩家心里不平衡。税务官玩法把税收做成明账:占领行会对摆摊与…

2026-09-23 01:24 996 技术组
玩法策划比武社交

【玩法策划】比武招亲:比武切磋与社交绑定的玩法设计

实战应用:用在哪里 高端玩家婚姻系统只有仪式没有过程,社交绑定缺一个高光事件。比武招亲做成擂台玩法:擂主设擂摆彩头,攻擂者报…

2026-09-23 01:24 996 技术组
案例复盘限时礼包日期

【案例复盘】限时礼包少发一天的事故复盘

实战应用:用在哪里 开服七日限时礼包发到第六天断了粮,9 月 1 日当天领奖按钮灰的,投诉当天破千。事故根因是一条数字日期循…

2026-09-23 01:24 996 技术组
网络通信心跳假在线

【网络通信】心跳探测:半开连接的主动识别

实战应用:用在哪里 玩家拔线不退游戏,连接半开着,人不在指令也没有,在线数虚高,容量预案被假数据带着跑。心跳探测给每个在线玩…

2026-09-23 01:24 996 技术组
运维发布发布日历

【运维发布】发布日历:全月变更的集中排期

实战应用:用在哪里 周三发了合成系统补丁,周四又改强化概率,两条变更叠加后玩家分不清是哪个改出来的。发布日历把全月变更集中排…

2026-09-23 01:24 996 技术组
Lua实战滑动窗口计数

【Lua实战】时间窗口计数:滑动窗口的环形数组实现

实战应用:用在哪里 容量预案需要知道滚动一小时的副本进入峰值,而不是全天累计。滑动窗口用 60 个槽位每槽记一分钟的进入数,…

2026-09-23 01:24 996 技术组