Python中如何将SHA256哈希摘要转为大端格式并传递给签名接口
解决方案
默认情况下SHA256算法输出的摘要本身就是大端(网络字节序)格式,如果你确认现有hash.digest()的字节序不符合你的需求,可以通过自定义包装类的方式构造符合PKCS1_PSS.sign()入参要求的哈希对象,具体实现如下:
- 先调用原始SHA256对象获取摘要,调整字节序为你需要的大端格式
- 自定义一个满足PyCryptodome哈希接口要求的类,仅需要实现
digest()方法和digest_size属性即可,sign()方法只会调用这两个成员 - 实例化自定义类的对象传入
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
相关产品推荐
相关产品推荐

