You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整Node.js代码匹配PHP的str_rot13+gzdeflate+base64加密结果?

解决PHP与Node.js密码加密结果不一致问题

问题根源

PHP的gzdeflate()默认使用原始DEFLATE格式(无Zlib头和校验和),而Node.js的zlib.deflateSync()默认生成带Zlib头的压缩数据,这是加密结果差异的核心原因。你的ROT13实现是正确的,无需调整。

修改后的Node.js加密函数

替换原encryptPassword函数为以下代码:

function encryptPassword(password) {
    const rot13Password = str_rot13(password);
    // 启用原始DEFLATE格式,匹配PHP gzdeflate的默认行为
    const deflatedBuffer = zlib.deflateSync(Buffer.from(rot13Password, 'utf-8'), {
        raw: true,
        level: zlib.constants.Z_DEFAULT_COMPRESSION // 对应PHP默认压缩级别6
    });
    return deflatedBuffer.toString('base64');
}

验证结果

对密码PAPITAS1执行加密:

  1. ROT13转换后得到:CNPVGNFF1
  2. 经原始DEFLATE压缩+Base64编码后,结果为c/ZzDnP3czMEAA==,与PHP生成的结果完全一致。

参数说明

  • raw: true:移除Zlib头和校验和,完全匹配PHPgzdeflate()的输出格式。
  • level: zlib.constants.Z_DEFAULT_COMPRESSION:显式设置压缩级别为6(PHP默认值),确保压缩行为一致。

内容的提问来源于stack exchange,提问作者Brandon D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:23:27