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

求与OpenSSL SHA256+Base64编码等价的Python3实现

问题:将Bash的SHA256+Base64编码逻辑转为Python3代码

原始Bash脚本

这段Bash命令的作用是对输入的JSON内容计算SHA256二进制摘要,再将结果做Base64编码:

openssl dgst -binary -sha256 < $body | openssl enc -e -base64

注:$body为JSON格式的字符串内容

用户尝试的Python代码(结果与Bash脚本不匹配)

import hashlib, base64

hash_object = hashlib.sha256(body.encode('utf-8'))  
hex_dig = hash_object.hexdigest()

BYTE_ARRAY = bytearray.fromhex(hex_dig)

print(f"{BYTE_ARRAY}")
BASE64_VAL = base64.b64encode(BYTE_ARRAY)
print(f"{BASE64_VAL}")

问题原因

用户的代码多了冗余步骤:先把SHA256的二进制摘要转成十六进制字符串,再转回字节数组。这一步不仅没必要,还可能因编码细节导致结果偏差——实际上hashlib.sha256对象可以直接输出二进制摘要,不需要经过十六进制转换。

正确的等价Python代码

直接获取SHA256的二进制摘要,再做Base64编码即可:

import hashlib
import base64

# 假设body是JSON格式的字符串
binary_digest = hashlib.sha256(body.encode('utf-8')).digest()
base64_result = base64.b64encode(binary_digest).decode('utf-8')

print(base64_result)

代码说明

  1. body.encode('utf-8'):将JSON字符串转为UTF-8编码的字节流,和Bash处理文本的编码逻辑对齐
  2. hashlib.sha256(...).digest():直接获取SHA256的二进制摘要,对应Bash里的-binary参数
  3. base64.b64encode(...).decode('utf-8'):对二进制摘要做Base64编码,再转为字符串(如果需要bytes对象可以去掉.decode('utf-8'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:52:05