【发布时间】:2020-04-24 08:23:15
【问题描述】:
我想生成一个 RSA 密钥对,然后编写函数使用公钥解密并使用私钥加密。
目前我正在按如下方式生成我的密钥
from cryptography.hazmat.primitives import serialization as crypto_serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend as crypto_default_backend
key = rsa.generate_private_key(
backend=crypto_default_backend(),
public_exponent=65537,
key_size=2048
)
private_key = key.private_bytes(
crypto_serialization.Encoding.PEM,
crypto_serialization.PrivateFormat.PKCS8,
crypto_serialization.NoEncryption())
public_key = key.public_key().public_bytes(
crypto_serialization.Encoding.OpenSSH,
crypto_serialization.PublicFormat.OpenSSH
)
然后我按照密码学文档使用 RSA 进行加密,它说
message = b"encrypted data"
ciphertext = private_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
我用 private_key 替换了 public_key。
然后解密
plaintext = public_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
这里我用 public_key 替换了 private_key。
但是,运行加密部分会出现错误“AttributeError: 'bytes' object has no attribute 'encrypt'”。
我该如何解决这个问题?
【问题讨论】:
-
当你得到像
AttributeError这样的异常时,你还会得到一个堆栈跟踪,其中包含重要信息,包括异常发生的行号和导致它的调用链。您必须在问题中包含这些信息,它几乎总是有用的,而且通常是绝对必要的。
标签: python encryption cryptography rsa