Python : Pycrypto RSA public 密钥加密错误

Python : Pycrypto RSA public key encryption error

所以我刚开始尝试使用 Pycrypto 并想加密和解密一条消息,但是我放在一起的这段代码产生了一些错误。

他们在这里:

enc_data = public_key.encrypt 

TypeError: unsupported operand type(s) for pow(): 'str', 'int','int'

ciphertext = cipher.encrypt('Bob')

Traceback (most recent call last):

line 22, in ciphertext = cipher.encrypt('Bob')

File "C:\Anaconda3\lib\site-packages\Crypto\Cipher\PKCS1_OAEP.py", line 50, in encrypt
db = lHash + ps + bchr(0x01) + message

TypeError: can't concat bytes to str

代码:

import Crypto
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto import Random

random_generator = Random.new().read
key = RSA.generate(1024, random_generator)

public_key = key.publickey()

enc_data = public_key.encrypt('Bob', 32)

cipher = PKCS1_OAEP.new(key)
ciphertext = cipher.encrypt('Bob')

用于加密的两个命令 'Bob' 产生了这些错误,是的,我现在认为第一种方法不是很安全。

在Python3中,字符串和字节是有区别的。 PyCrypto 以字节为单位工作,所以你需要给它字节,但 "Bob" 是一个字符串。您可以使用默认编码将字符串 a 转换为字节 a.encode()。如果您有其他编码,则需要指定它。

您还可以通过在其前面加上 b 将文字字符串标记为字节。示例:b"Bob".