我想生成一个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'对象没有属性'encrypt'”。
我该如何解决?
要解决您的问题,请使用:
public_key = key.public_key()
您不应该使用public_key = key.public_key().public_bytes(...)
,因为您将获得字节。您正在混合字节和密钥。