Probleme mit pycrypt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
m.schmidt
User
Beiträge: 4
Registriert: Freitag 5. Januar 2007, 11:48

Freitag 5. Januar 2007, 11:55

Folgendes Problem, zuerst einmal mein Script:

Code: Alles auswählen

from Crypto.Cipher import ARC4
obj = ARC4.new('myKey')
clear = 'Klartext'
ciph = obj.encrypt(clear)
#Variante 1, geht nicht, es wird nicht der Klartext ausgegeben:
print obj.decrypt(ciph)
#Variante 2, klappt
obj2 = ARC4.new('myKey')
print obj2.decrypt(ciph)
Warum klappt das entschlüsseln mit einem neuen Objekt, mit dem alten aber nicht? Gibt es dafür eine plausible Erklärung?
BlackJack

Freitag 5. Januar 2007, 13:42

Das `ARC4`-Objekt hat einen inneren Zustand der sich beim verschlüsseln oder entschlüsseln ändert. Mit dem Passwort wird dieser Zustand auf einen Anfangswert gesetzt.
m.schmidt
User
Beiträge: 4
Registriert: Freitag 5. Januar 2007, 11:48

Freitag 5. Januar 2007, 13:45

Und noch eine Ungereitheit, die ich nicht verstehe:
Script1:

Code: Alles auswählen

from Crypto.Cipher import ARC4
file = open('pwd_lh','w')
crypt = ARC4.new('mykey')      #Objekt zum Verschluesseln
file.write(crypt.encrypt('''Sample Passwords''')+'\n')
file.write(crypt.encrypt('''Msa,FW!''')+'\n')
file.write(crypt.encrypt('''MsaBA.''')+'\n')
file.close()
#Testweise entschluesseln
dec = ARC4.new('mykey')      #Objekt zum Entschluesseln
file = open('pwd_lh','r')
for line in file:
    print dec.decrypt(line[:-1])    
Das Scrip verhält sich korrekt. Ausgabe:
mschmidt@mschmidt-desktop:~/python/scripts$ ./crypt
Sample Passwords
Msa,FW!
MsaBA.

Nun, leicht abgeändert (Zeile 4 fehlt) sieht es so aus:

Script2:

Code: Alles auswählen

from Crypto.Cipher import ARC4
file = open('pwd_lh','w')
crypt = ARC4.new('mykey')      #Objekt zum Verschluesseln
file.write(crypt.encrypt('''Msa,FW!''')+'\n')
file.write(crypt.encrypt('''MsaBA.''')+'\n')
file.close()
#Testweise entschluesseln
dec = ARC4.new('mykey')      #Objekt zum Entschluesseln
file = open('pwd_lh','r')
for line in file:
    print dec.decrypt(line[:-1])    
Die Ausgabe klappt nun aber nichtmehr....
mschmidt@mschmidt-desktop:~/python/scripts$ ./crypt
Msa,
k
5j�

Was ist passiert?
Zuletzt geändert von m.schmidt am Samstag 6. Januar 2007, 15:28, insgesamt 1-mal geändert.
BlackJack

Freitag 5. Januar 2007, 17:03

Bei mir klappen beide. Kann es sein das Du hier nicht genau das gepostet hast, was Du auch wirklich ausgeführt hast? Die Ausgabe zu Deinem ersten Skript passt nämlich nicht zum Skript selbst.

Warum bei Dir das zweite nicht klappt, kann ich nicht sagen. Wo das generelle Problem liegt aber schon: Die Verschlüsselung hat Binärdaten als Ergebnis. Da kann jeder Bytewert von 0 bis 255 drin vorkommen. Unter anderem natürlich auch das ASCII-Zeichen für einen Zeilenwechsel. Damit haut das Zeilenweise lesen nicht mehr hin. Also lässt sich das so nicht in einer Textdatei speichern.

Du könntest die verschlüsselten Daten zum Beispiel 'base64' kodieren um wieder ASCII-Text zu erhalten. Das geht ganz einfach mit der `encode()`-Methode von Zeichenketten.
m.schmidt
User
Beiträge: 4
Registriert: Freitag 5. Januar 2007, 11:48

Samstag 6. Januar 2007, 15:27

Ja, da hatte ich mich wohl beim Posten vertan, sorry, aber deine Beschreibung traf den Nagel auf den Kopf, wenn ich die verschlüsselte Datei anschaue hat die 3, statt 2 Zeilen, damit kann natürlich alles nach dem ersten Zeilenumbruch nichtmehr korrekt codiert werden.

Das mit dem base64 ist eine Hervorragende Idee, danke.
Antworten