2017-08-07 1 views
0

Ich muss den Eingabetext mit Python verschlüsseln und entschlüsseln, aber hier bekomme ich folgenden Fehler.Fehler beim Aufruf der Klassenmethode mit Python

Traceback (most recent call last): 
    File "crypto.py", line 21, in <module> 
    encrypt = AESCipher() 
TypeError: __init__() takes exactly 2 arguments (1 given) 

Ich erkläre meinen Code unten.

import base64 
from Crypto.Cipher import AES 
from Crypto import Random 

class AESCipher: 
    def __init__(self, thecarkey): 
     self.key = key 

    def encrypt(self, raw): 
     raw = pad(raw) 
     iv = Random.new().read(AES.block_size) 
     cipher = AES.new(self.key, AES.MODE_CBC, iv) 
     return base64.b64encode(iv + cipher.encrypt(raw)) 

    def decrypt(self, enc): 
     enc = base64.b64decode(enc) 
     iv = enc[:16] 
     cipher = AES.new(self.key, AES.MODE_CBC, iv) 
     return unpad(cipher.decrypt(enc[16:])) 

encrypt = AESCipher() 
passw = encrypt.encrypt('[email protected]') 
print(passw) 

Hier muss ich den Text verschlüsseln, die Crypto.Cipher innerhalb der Klasse definiert wurden, aber die oben genannten Fehler.

+1

Ich fühle mich wie die Fehlermeldung war offensichtlich genug zu lösen dieses Problem. Wie können Sie den obigen Code schreiben und nicht in der Lage sein, das Problem zu lösen? –

Antwort

1

Ihr AESCipher erfordert das Argument thecarkey für die Objektinitiierung.

so sollte es AESCipher('somekey') sein. Allerdings gibt es einen weiteren Fehler in Ihrer Klasse. Das Argument thecarkey wird nie benutzt, so dass ich davon ausgehen, es sollte nur key sein:

class AESCipher: 
    def __init__(self, key): 
     self.key = key 
... 
encrypt = AESCipher('somekey') 
Verwandte Themen