Ed25519私钥签名结果编码格式及JSON序列化问题求助
解决Ed25519签名无法JSON序列化的问题
你的问题核心是二进制签名属于原始字节序列,并非基于文本编码(如UTF-8)的字节,无法直接转为JSON可序列化类型。直接尝试解码成字符串必然失败,正确做法是用Base64编码将二进制签名转换为标准字符串,就能安全放入JSON请求体。
具体实现步骤
- 导入Python内置的
base64库 - 对生成的签名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
相关产品推荐
相关产品推荐

