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
相关产品推荐
相关产品推荐

