2016-04-22 32 views
0

Pycryptoを試してみたところ、メッセージの暗号化と復号化を始めましたが、このコードを組み合わせるとエラーが発生しました。Python:Pycrypto RSA公開鍵暗号化エラー

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') 

'ボブ' を暗号化するために意図されている2つのコマンドはこれらのエラーを生成し、はい、私は今、最初の方法はあまり安全ではないということです。

+0

オブジェクトが単にデータを暗号化および復号化するだけで、公開鍵/秘密鍵のペアが必要ない場合は、AESなどの対称暗号化を使用します。非対称暗号化を使用する場合でも、データは通常、対称暗号化で暗号化されます。非対称暗号化は鍵のサイズに制限され、対称暗号化よりもはるかに** **です。 – zaph

答えて

1

Python 3では、文字列とバイトの間に違いがあります。 PyCryptoはバイトで動作するので、バイトを与える必要がありますが、"Bob"は文字列です。文字列aを、デフォルトのエンコーディングを使用するa.encode()のバイトに変換することができます。別のエンコーディングを念頭に置いている場合は、それを指定する必要があります。

リテラル文字列には、bという接頭辞を付けることで、バイトとしてマークすることもできます。例:b"Bob"

関連する問題