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

Python中如何将SHA256哈希摘要转为大端格式并传递给签名接口

解决方案

默认情况下SHA256算法输出的摘要本身就是大端(网络字节序)格式,如果你确认现有hash.digest()的字节序不符合你的需求,可以通过自定义包装类的方式构造符合PKCS1_PSS.sign()入参要求的哈希对象,具体实现如下:

  1. 先调用原始SHA256对象获取摘要,调整字节序为你需要的大端格式
  2. 自定义一个满足PyCryptodome哈希接口要求的类,仅需要实现digest()方法和digest_size属性即可,sign()方法只会调用这两个成员
  3. 实例化自定义类的对象传入signer.sign()即可

代码示例

from Crypto.Hash import SHA256
from Crypto.Signature import PKCS1_PSS

msg = b'\x15\x00\xea'
orig_hash = SHA256.new(msg)
# 调整字节序为目标大端格式,此处[::-1]仅为翻转字节的示例,可根据实际需求修改转换逻辑
adjusted_digest = orig_hash.digest()[::-1]

# 自定义符合签名器入参要求的哈希包装类
class CustomHash:
    digest_size = SHA256.digest_size  # 保持和原SHA256的摘要长度一致
    def __init__(self, digest_content):
        self._digest = digest_content
    def digest(self):
        return self._digest

# 构造自定义哈希对象传入签名器
custom_hash = CustomHash(adjusted_digest)
signer = PKCS1_PSS.new(privKey)
signature = signer.sign(custom_hash)

注意事项

如果你的场景是和其他系统对接时出现字节序不匹配,优先确认对端的字节序要求,避免不必要的转换:SHA256标准规定输出的字节序列本身就是大端排序,绝大多数场景下不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:57:02