使用 pbkdf2 的 Python 哈希密码

我在 GoLang 上实现了一段代码,效果很好


package main


import (

    "crypto/sha256"

    "encoding/hex"

    "fmt"


    "golang.org/x/crypto/pbkdf2"

)


func main() {

    newPasswd := pbkdf2.Key([]byte("test"), []byte("Gare5vgHIo"), 10000, 50, sha256.New)

    fmt.Println(hex.EncodeToString(newPasswd), nil)

}

我正在尝试在 Python 上做同样的事情


def main():


    password = b'test'

    salt = b'Gare5vgHIo'

    iterations = 1000


    key = pbkdf2_hmac("sha256", password, salt, iterations, 50)


    print(key)

    print(key.decode())

但是key.decode()方法会抛出一个错误:


UnicodeDecodeError('utf-8', b'\xd9\xb2;\x0f$\x9a\x9c\t\x91\x16\x81\xb8a\x00\xd8\xdd{e.\xa9\x7f\xe9\x92dH\xa6\x05\x16\xd8\xbb\xfdy\x13\xc5D\x1c\xa2\x93e\xbf{\\\x19\xc1\x8df\xf4\xbft\xe2', 5, 6, 'invalid start byte')

我对 Python 代码做错了什么?


Helenr
浏览 136回答 1
1回答

婷婷同学_

.decode()试图通过将字节解释为 UTF-8 编码数据来从bytes转换为文本的编码表示)。UTF-8 是一种自校验编码;随机字节很少通过自检。strstr如果要将字节显示为十六进制字符串,请使用:print(key.hex())其中bytes.hex是一个bytes直接转换str为两倍长度的 a 的方法,将每个字节表示为两个十六进制字符。在非常旧的(pre-3.5)版本的 Python 上,bytes没有.hex()方法,所以你需要导入模块binascii并执行:print(binascii.hexlify(key))但这在任何当前支持的 Python 版本上都不是必需的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go