AttributeError:'bytes'对象没有属性'encrypt'

问题描述 投票:0回答:1

我想生成一个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'”。

我该如何解决?

python encryption cryptography rsa
1个回答
0
投票

要解决您的问题,请使用:

public_key = key.public_key()

您不应该使用public_key = key.public_key().public_bytes(...),因为您将获得字节。您正在混合字节和密钥。

© www.soinside.com 2019 - 2024. All rights reserved.