AttributeError:“字节”对象没有属性“n”

2024-04-29 03:03:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Crypto方法对一段文本进行编码

我需要使用RSA方法和给定的公钥对一段字符串进行编码,这是我在引用this link.之后当前编写的代码

我的代码

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64

def encrypt_private_key(a_message, private_key):
    encryptor = PKCS1_OAEP.new(private_key)
    encrypted_msg = encryptor.encrypt(a_message)
    encoded_encrypted_msg = base64.b64encode(encrypted_msg)
    return encoded_encrypted_msg


key = open('public.pem', 'r')
byte_key = bytes(key.read().encode())
byte_message = b'1200|2000.00'

output = encrypt_private_key(byte_message, byte_key)
print(byte_message)

然而,当我试图运行这段代码时,我被抛出了这个错误

File "C:\Users\Acer\Desktop\Web Development\Learning new features\Play video on scroll\venv\lib\site-packages\Crypto\Cipher\PKCS1_OAEP.py", line 107, in encrypt
    modBits = Crypto.Util.number.size(self._key.n)
AttributeError: 'bytes' object has no attribute 'n'

我不明白我到底做错了什么

非常感谢您的帮助。 谢谢


Tags: 方法key代码importmessage编码msgbyte
1条回答
网友
1楼 · 发布于 2024-04-29 03:03:57

加密使用收件人的公钥,因此只有收件人才能使用其私钥解密密文。相反,签名使用签名者的私钥,从而使用关联的公钥执行验证。在给定的情况下,消息将被加密,因此将应用收件人的公钥

在发布的代码中,缺少带有^{}的键的导入,这会导致错误。如果添加了导入,则加密成功:

from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
import base64

def encrypt_with_public_key(a_message, public_key):
    encryptor = PKCS1_OAEP.new(public_key)
    encrypted_msg = encryptor.encrypt(a_message)
    encoded_encrypted_msg = base64.b64encode(encrypted_msg)
    return encoded_encrypted_msg

x509pem = """  -BEGIN PUBLIC KEY  -
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAunF5aDa6HCfLMMI/MZLT
5hDk304CU+ypFMFiBjowQdUMQKYHZ+fklB7GpLxCatxYJ/hZ7rjfHH3Klq20/Y1E
bYDRopyTSfkrTzPzwsX4Ur/l25CtdQldhHCTMgwf/Ev/buBNobfzdZE+Dhdv5lQw
KtjI43lDKvAi5kEet2TFwfJcJrBiRJeEcLfVgWTXGRQn7gngWKykUu5rS83eAU1x
H9FLojQfyia89/EykiOO7/3UWwd+MATZ9HLjSx2/Lf3g2jr81eifEmYDlri/OZp4
OhZu+0Bo1LXloCTe+vmIQ2YCX7EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4i
GwIDAQAB
  -END PUBLIC KEY  -"""
# x509pem = open('public.pem', 'r').read() # load the key alternatively from the file system

key = RSA.import_key(x509pem)      # add the key import with import_key() or importKey()
byte_message = b'1200|2000.00'

encoded_encrypted_msg = encrypt_with_public_key(byte_message, key)
print(encoded_encrypted_msg.decode('utf-8'))

美国。另外this example在PyCryptodome文档中,使用OAEPadding实现RSA

相关问题 更多 >