无法让 python 遵循 go 的 base32 编码

我正在尝试从 python 中复制 sha256 哈希值的 Base32 编码。

我只是无法让 python 产生相同的 base32 输出。我可能正在做一些明显错误的事情。帮助!

去代码:

package main


import (

    "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")))

}

运行这个会产生:


dd684919ef4a1362b841409f5255ec963bd53d353804114779c4e6d66641eb28

3VUESGPPJIJWFOCBICPVEVPMSY55KPJVHACBCR3ZYTTNMZSB5MUA====

MFRGG===

Python代码:


#!/usr/bin/env python


import hashlib

import base64


namespace = "my-ns"

policyName = "default-deny"


sha256 = hashlib.sha256()

sha256.update(namespace+policyName)

chksum = sha256.hexdigest()

print chksum

print base64.b32encode(chksum)

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

运行这个会产生:


dd684919ef4a1362b841409f5255ec963bd53d353804114779c4e6d66641eb28

MRSDMOBUHEYTSZLGGRQTCMZWGJRDQNBRGQYDSZRVGI2TKZLDHE3DGYTEGUZWIMZVGM4DANBRGE2DONZZMM2GKNTEGY3DMNBRMVRDEOA=

MFRGG===

每个输出的第一行都一致,这很好。让我知道 sha256 校验和在每一侧的计算方式都是相同的。每个的第二行都不同意,我不明白为什么——我在 python 代码中尝试了许多不同的 chksum 转换,但没有成功。每个中的第三行只是表明简单字符串的 base32 编码似乎在双方都有效。


呼啦一阵风
浏览 125回答 2
2回答

莫回无

在 Python 方面,您将获得十六进制编码的 SHA256 哈希值,然后对十六进制数字进行 Base32 编码。要修复它,请使用以下命令:sha256 = hashlib.sha256()sha256.update(namespace+policyName)chksum = sha256.digest() # Get hash as byte stringprint chksum.encode('hex') # Convert byte string to hexadecimal for printingprint base64.b32encode(chksum)print base64.b32encode(bytearray("abc"))

肥皂起泡泡

go 版本不是对摘要的十六进制版本进行 base32 编码。它对原始形式进行编码。您在每一面以不同的方式打印十六进制形式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go