为了账号安全,请及时绑定邮箱和手机立即绑定

无法让 python 遵循 go 的 base32 编码

无法让 python 遵循 go 的 base32 编码

Go
呼啦一阵风 2023-06-26 15:02:38
我正在尝试从 python 中复制 sha256 哈希值的 Base32 编码。我只是无法让 python 产生相同的 base32 输出。我可能正在做一些明显错误的事情。帮助!去代码:package mainimport (    "fmt"    "crypto/sha256"    "encoding/base32")func main() {    namespace := "my-ns"    policyName := "default-deny"    chksum := sha256.Sum256([]byte(namespace + policyName))    fmt.Printf("%x\n", chksum)    fmt.Println(base32.StdEncoding.EncodeToString(chksum[:]))    fmt.Println(base32.StdEncoding.EncodeToString([]byte("abc")))}运行这个会产生:dd684919ef4a1362b841409f5255ec963bd53d353804114779c4e6d66641eb283VUESGPPJIJWFOCBICPVEVPMSY55KPJVHACBCR3ZYTTNMZSB5MUA====MFRGG===Python代码:#!/usr/bin/env pythonimport hashlibimport base64namespace = "my-ns"policyName = "default-deny"sha256 = hashlib.sha256()sha256.update(namespace+policyName)chksum = sha256.hexdigest()print chksumprint base64.b32encode(chksum)print base64.b32encode(bytearray("abc"))运行这个会产生:dd684919ef4a1362b841409f5255ec963bd53d353804114779c4e6d66641eb28MRSDMOBUHEYTSZLGGRQTCMZWGJRDQNBRGQYDSZRVGI2TKZLDHE3DGYTEGUZWIMZVGM4DANBRGE2DONZZMM2GKNTEGY3DMNBRMVRDEOA=MFRGG===每个输出的第一行都一致,这很好。让我知道 sha256 校验和在每一侧的计算方式都是相同的。每个的第二行都不同意,我不明白为什么——我在 python 代码中尝试了许多不同的 chksum 转换,但没有成功。每个中的第三行只是表明简单字符串的 base32 编码似乎在双方都有效。
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

在 Python 方面,您将获得十六进制编码的 SHA256 哈希值,然后对十六进制数字进行 Base32 编码。要修复它,请使用以下命令:


sha256 = hashlib.sha256()

sha256.update(namespace+policyName)

chksum = sha256.digest() # Get hash as byte string

print chksum.encode('hex') # Convert byte string to hexadecimal for printing

print base64.b32encode(chksum)

print base64.b32encode(bytearray("abc"))


查看完整回答
反对 回复 2023-06-26
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

go 版本不是对摘要的十六进制版本进行 base32 编码。它对原始形式进行编码。您在每一面以不同的方式打印十六进制形式。



查看完整回答
反对 回复 2023-06-26
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信