TypeError: can't concat str to bytes - Python + pycryptodome

TypeError: can't concat str to bytes - Python + pycryptodome

我在尝试使用 pycryptodome 加密 + 解密文件时收到 TypeError。我环顾四周,但找不到与 pycryptodome 相关的东西。错误是: Error Image

我使用的代码是:

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



print("Now executing RSA")
# generate the RSA keys and print them on the console (as hex numbers and in the PKCS#8 PEM ASN.1 format)

keyPair = RSA.generate(3072)

pubKey = keyPair.publickey()
print(f"Public key:  (n={hex(pubKey.n)}, e={hex(pubKey.e)})")
pubKeyPEM = pubKey.exportKey()
print(pubKeyPEM.decode('ascii'))

print(f"Private key: (n={hex(pubKey.n)}, d={hex(keyPair.d)})")
privKeyPEM = keyPair.exportKey()
print(privKeyPEM.decode('ascii'))

# encrypt the message using RSA-OAEP encryption scheme (RSA with PKCS#1 OAEP padding) with the RSA public key
# msg = b'A message for encryption'
f = open("plaintext.txt", "r")
f = f.read()
encryptor = PKCS1_OAEP.new(pubKey)
encrypted = encryptor.encrypt(f)
print("Encrypted:", binascii.hexlify(encrypted))

# decrypt the message using RSA-OAEP with the RSA Private key

decryptor = PKCS1_OAEP.new(keyPair)
decrypted = decryptor.decrypt(encrypted)
print('Decrypted:', decrypted)

您需要将明文转换为字节或将文件读取为二进制数据。添加 b 以将文件读取为二进制数据。

f = open("plaintext.txt", "rb")

旁注您应该考虑在使用完文件后将其关闭

file = open("plaintext.txt", "rb")
f = file.read()
encryptor = PKCS1_OAEP.new(pubKey)
encrypted = encryptor.encrypt(f)
print("Encrypted:", binascii.hexlify(encrypted))
file.close()

确保两种数据类型相同。您可以尝试将文本文件转换为字节,以便数据类型相等,从而可以连接起来。