python - AttributeError:“字节”对象没有属性“加密”
问题描述
我想生成一个 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(...)
,因为你会得到字节。您正在混合字节和密钥。
还使用公钥加密(非私有):
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
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
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()
message = b"encrypted data"
ciphertext = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
推荐阅读
- c# - Entity Framework 6.x Code First 来自数据库,添加列属性
- arrays - Angular - 如何在操作数组时将更改从变量绑定到 html
- c# - 在 C# 中从服务器端更新代码时出现空错误
- python - python 上的 xlsxwriter 中的“没有这样的文件或目录”作为服务
- ejs - 为什么我在简单的 ejs 文件上使用 eslint-ejs 插件时出现解析错误?
- c++ - 为什么 Eigen 对混叠做出不一致的默认假设?
- intellij-idea - 使用 Jackson 在 Intellij 中运行测试
- r - 如何从 R 中的转置结果中删除相似的值并创建新变量?
- azure-web-app-service - Linux 上的 Azure Web App 我更改了 Scale Up 和 down 然后我在网站上收到 Application Error
- r - 在 shinyapps.io 上加载 rgdal 库失败