有以下任务:
但是当我运行代码时出现错误: ValueError:X25519 私钥长度为 32 字节
这是可以理解的,因为 sha256 返回一个等于 64 位的字符串。请告诉我哪里错了
这是我正在尝试的代码:
> from cryptography.hazmat.primitives import hashes
>
> from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey
> from hashlib import sha256
>
> from cryptography.hazmat.primitives.kdf.hkdf import HKDF
>
> #passphrase
> passphrase = "asdasfsdfsjddfueirgnuengigtnsenveigvuneirvneriuvniuvnrsbng"
> #hashing passphrase sha256
> passphrase_sha256 = sha256(passphrase.encode('utf-8')).hexdigest()
>
> #I pass the hash to cruve25519
> private_key = X25519PrivateKey.from_private_bytes(passphrase_sha256)
> peer_public_key = X25519PrivateKey.from_private_bytes(passphrase_sha256).public_key()
SHA-256 生成 64 个字符的十六进制字符串,但 X25519PrivateKey 期望输入是 32 字节的二进制字符串而不是十六进制字符串,这就是为什么您必须按照 @Topaco 的建议使用
bytes.fromhex()
:
passphrase_sha256_hex = sha256(passphrase.encode('utf-8')).hexdigest()
passphrase_sha256 = bytes.fromhex(passphrase_sha256_hex)
.....