gpt4 book ai didi

python - 无法让 python 跟随 base32 编码

转载 作者:IT王子 更新时间:2023-10-29 02:00:39 25 4
gpt4 key购买 nike

我正在尝试从 python 中复制 sha256 散列的 base32 编码。我正在尝试复制 kube-router 为命名空间网络策略创建 ipset 名称的逻辑:https://github.com/cloudnativelabs/kube-router/blob/736757d942f173e19566eea0a512dfa819699126/pkg/controllers/netpol/network_policy_controller.go#L1476

我只是无法让 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 编码似乎在两边都有效。

最佳答案

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

关于python - 无法让 python 跟随 base32 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56508660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com