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

Paseto V3 Node.js报错:本地密钥需为32字节对称密钥问题

解决Paseto V3解密时的密钥长度错误问题
  • 问题根源:你传入的是十六进制字符串,panva/paseto库默认会将其当作UTF-8编码的字节序列处理。64位的十六进制字符串转成UTF-8字节后长度远超过32字节,因此触发了"必须是32字节对称密钥"的错误。

  • 解决方案:把十六进制字符串转换成Node.js的Buffer,还原出PHP生成的原始32字节二进制密钥,再传入decrypt方法。

修正后的代码如下:

const paseto = require('paseto');
const { V3: { decrypt } } = paseto;

(async () => {
  // 将十六进制密钥字符串转换为32字节Buffer
  const secretKey = Buffer.from("b244ac595fbe3a6ea8c3fad93f66d15221121428fd03dcccf32203e364f504ed", 'hex');
  const payload = await decrypt("example_token", secretKey);
  console.log(payload);
})()

补充说明:PHP中openssl_random_pseudo_bytes(32)生成的是32字节二进制数据,转十六进制后对应64个字符(每个字节对应两个十六进制字符)。通过Buffer.from(hexString, 'hex')可以精准还原出原始的32字节密钥,完全符合Paseto V3.local的密钥要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:27:23