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

使用PyJWT的RS256算法编码JWT时报密钥反序列化错误如何解决

你遇到的报错是三个核心错误导致的:

  1. 密钥生成方式错误:RS256是非对称签名算法,需要使用标准PEM格式的RSA公私钥对,你用openssl rand -hex 32生成的只是随机十六进制字符串,不符合RSA密钥的格式要求。
  2. 密钥内容格式错误:你粘贴的私钥头尾标记不完整,-----BEGIN PRIVATE KEY----结尾少了1个短横线,不符合PEM格式规范。
  3. 编码参数错误:调用jwt.encode时传入的签名密钥是字符串"secret",没有传入你定义的RSA私钥变量。

步骤1:生成正确的RSA公私钥对

执行以下openssl命令生成2048位RSA私钥:

openssl genrsa -out private_key.pem 2048

再从私钥导出对应的公钥:

openssl rsa -in private_key.pem -pubout -out public_key.pem

生成的两个pem文件内容就是符合要求的PEM格式密钥,直接复制完整内容到代码中即可,不要修改文件内的换行、头尾标记。

步骤2:修正测试代码

修改后的代码如下:

import jwt

# 替换为private_key.pem的完整内容,保留所有换行和头尾标记
private_key = b"""-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAz......(完整的私钥内容)
-----END RSA PRIVATE KEY-----"""

# 替换为public_key.pem的完整内容,保留所有换行和头尾标记
public_key = b"""-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAO......(完整的公钥内容)
-----END PUBLIC KEY-----"""

# 签名用私钥,指定RS256算法
encoded = jwt.encode({"some": "payload"}, private_key, algorithm="RS256")
print("生成的JWT:", encoded)

# 验签用公钥
decoded = jwt.decode(encoded, public_key, algorithms=["RS256"])
print("解码后的payload:", decoded)

额外注意事项

  • 如果运行时提示依赖缺失,需要安装PyJWT的加密扩展:pip install pyjwt[crypto]
  • 生产环境中不要将私钥硬编码在代码里,建议通过环境变量、配置中心等安全方式存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:24:04