Я пытаюсь повторить кодировку base32 хэша sha256 из go в python.Я пытаюсь повторить логику, с помощью которой kube-router создает имена ipset для политики пространства имен namespace-network: https://github.com/cloudnativelabs/kube-router/blob/736757d942f173e19566eea0a512dfa819699126/pkg/controllers/netpol/network_policy_controller.go#L1476
Я просто не могу заставить python выдавать тот же вывод base32.Я, вероятно, делаю что-то явно неправильно.Помогите!
Go Code:
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 Code:
#!/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 вычисляется одинаково для каждой стороны.Вторая строка в каждой не совпадает, я не понимаю, почему - я пробовал много разных приведений chksum в коде python безрезультатно.Третья строка в каждой просто предполагает, что кодирование простой строки base32, кажется, работает с обеих сторон.