如何使用 Python 将 nacl SigningKey public 和私钥保存为纯文本?
How to use Python to save nacl SigningKey public and private keys as plain text?
我一定是在 nacl docs 中遗漏了什么。如何以纯文本格式保存私钥和 public 密钥?可用的编码器是 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
教程,以及各种变体。
- None 导致
SigningKey
的纯文本版本
- 我正在寻找纯文本的
-----BEGIN OPENSSH PRIVATE KEY-----
等
- 如何强制
b64decode
函数显示纯文本?
这与您在评论中附加的 link 基本相同,但这里有一个更简洁的示例,可能会对您有所帮助
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)
提供自己的种子
我一定是在 nacl docs 中遗漏了什么。如何以纯文本格式保存私钥和 public 密钥?可用的编码器是 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
教程,以及各种变体。- None 导致
SigningKey
的纯文本版本
- 我正在寻找纯文本的
-----BEGIN OPENSSH PRIVATE KEY-----
等 - 如何强制
b64decode
函数显示纯文本?
这与您在评论中附加的 link 基本相同,但这里有一个更简洁的示例,可能会对您有所帮助
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)