0

我一定在nacl 文档中遗漏了一些东西。如何以纯文本格式保存私钥和公钥?可用的编码器有 Raw(二进制?)、Hex、Base16/32/64 和 URLSafeBase64Encoder。

我以为我会使用该base64库来转换 Base64 编码的密钥。

例子:

from nacl.signing import SigningKey
from nacl.encoding import Base64Encoder
from base64 import b64decode


# Create SigningKey as base64-encoded bytes

signing_key = SigningKey.generate().encode(encoder=Base64Encoder)
print(type(signing_key))


# Convert base64-encoded bytes to string

signing_key = signing_key.decode('utf-8')
print(type(signing_key))


# Decode base64 string to plain text

signing_key = b64decode(signing_key)
print(type(signing_key))
print(signing_key)

结果:字节对象

<class 'bytes'>
<class 'str'>
<class 'bytes'>
b'e\xfa ?H\xd8\xe7^2\xfa1\x18\xa61\xca\x95\xec~\x8c\x011[\xf8\x05q!\xfc\xe4\x94\x13\xc2\x89'

试过:

  • 这里的Decoding Strings with Python教程,以及各种变体。
  • 它们都不会导致纯文本版本的SigningKey
  • 我正在寻找-----BEGIN OPENSSH PRIVATE KEY-----纯文本中的等
  • 如何强制该b64decode功能显示纯文本?
4

1 回答 1

1

这与您在评论中附加的链接基本相同,但这是一个更简洁的示例,可能会有所帮助

signing_key = SigningKey.generate()

priv_key_b64 = signing_key.encode(encoder=Base64Encoder)
pub_key_b64  = signing_key.verify_key.encode(encoder=Base64Encoder)

data = b'testtest'

signed_b64 = signing_key.sign(data, encoder=Base64Encoder)

print(priv_key_b64)         # private key in alpha-numeric encoding
print(pub_key_b64)          # public key in alpha-numeric encoding
print(signed_b64)           # data & signature over data in single chunk

verified = signing_key.verify_key.verify(signed_b64, encoder=Base64Encoder)

print(verified)             # origin 'data' (testtest)

为了回应您对种子的评论,我们会SigningKey.generate()为您生成一个随机种子并使用它来构造一个私有(签名)密钥。您可以使用提供自己的种子signing_key = SigningKey(seed, encoder=RawEncoder)

于 2022-03-05T22:22:26.910 回答