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

Ed25519私钥签名结果编码格式及JSON序列化问题求助

解决Ed25519签名无法JSON序列化的问题

你的问题核心是二进制签名属于原始字节序列,并非基于文本编码(如UTF-8)的字节,无法直接转为JSON可序列化类型。直接尝试解码成字符串必然失败,正确做法是用Base64编码将二进制签名转换为标准字符串,就能安全放入JSON请求体。

具体实现步骤

  1. 导入Python内置的base64库
  2. 对生成的签名bytes执行Base64编码,得到可序列化的字符串

修改后的代码示例:

import base64
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend

# 加载私钥(保留你的原有逻辑)
private_key = serialization.load_ssh_private_key(
    open('ed25519', 'rb').read(), 
    b'123456', 
    default_backend()
)

# 生成Ed25519签名(该算法默认使用SHA-512,无需额外哈希/填充参数,你的写法正确)
signature = private_key.sign(authCodeBytes)

# 将二进制签名转为Base64字符串
signature_b64 = base64.b64encode(signature).decode('utf-8')

# 此时signature_b64可直接放入API请求的JSON体中

额外说明

  • 你引用的是RSA签名文档,但实际用的是Ed25519算法,两者签名逻辑差异很大:Ed25519是确定性签名算法,底层哈希规则固定,不需要手动指定哈希函数或填充方式,你注释掉的RSA相关参数完全不需要。
  • API接收方拿到Base64字符串后,需要先用base64.b64decode()转回原始bytes,再用对应公钥完成验签操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:01:12