求与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)
代码说明
body.encode('utf-8'):将JSON字符串转为UTF-8编码的字节流,和Bash处理文本的编码逻辑对齐hashlib.sha256(...).digest():直接获取SHA256的二进制摘要,对应Bash里的-binary参数base64.b64encode(...).decode('utf-8'):对二进制摘要做Base64编码,再转为字符串(如果需要bytes对象可以去掉.decode('utf-8'))
内容的提问来源于stack exchange,提问作者kiran25
相关产品推荐
相关产品推荐

