2016-11-03 1 views
0

In C# Ich habe ein byte [24] Byte-Array mit dem Schlüssel für Triple-DES-Verschlüsselung/Entschlüsselung. Alles funktioniert gut in C#.C# Entschlüsselung zu Python PyDes

Meine Frage ist, wie kann ich das gleiche Byte-Array in Python verwenden?

ich das PyDes Paket verwenden und ich bin neu in Python, damit ich nicht wissen, ob es PyDes ist, das nicht das Byte-Array akzeptiert oder es ist ich, es falsch zu machen ...

Mein Python-Code ist unten (Ich habe die Daten im Schlüssel für dieses Beispiel geändert).

from pyDes import * 

print ("Example of DES encryption using CBC mode\n") 

key = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
arr = bytearray(key) 

k = triple_des(key, CBC, pad=None, padmode=PAD_PKCS5) 
data = "DES encryption algorithm" 
print ("Key  : %r" % k.getKey()) 
print ("Data  : %r" % data) 

d = k.encrypt(data) 
print ("Encrypted: %r" % d) 

d = k.decrypt(d) 
print ("Decrypted: %r" % d) 
print ("") 

Der Fehler ist

Traceback (most recent call last): 
    File "test.py", line 8, in <module> 
    k = triple_des(key, CBC, pad=None, padmode=PAD_PKCS5) 
    File "/usr/lib/python2.7/site-packages/pyDes.py", line 710, in __init__ 
    self.setKey(key) 
    File "/usr/lib/python2.7/site-packages/pyDes.py", line 727, in setKey 
    self._padding, self._padmode) 
    File "/usr/lib/python2.7/site-packages/pyDes.py", line 409, in __init__ 
    self.setKey(key) 
    File "/usr/lib/python2.7/site-packages/pyDes.py", line 414, in setKey 
    self.__create_sub_keys() 
    File "/usr/lib/python2.7/site-packages/pyDes.py", line 462, in __create_sub_keys 
    key = self.__permutate(des.__pc1, self.__String_to_BitList(self.getKey())) 
    File "/usr/lib/python2.7/site-packages/pyDes.py", line 421, in __String_to_BitList 
    data = [ord(c) for c in data] 
TypeError: ord() expected string of length 1, but int found 

aktualisieren. Nach der Installation von Python 3 und dem Setzen meines Schlüssels und IV auf den Byte-Typ, funktioniert die Verschlüsselung. Das Problem ist, es entschlüsselt nicht richtig. Die verschlüsselten Daten in meinem C# -Programm sind: "Hallo Welt. Das ist nur ein Test. Goodbye World."

Es entschlüsselt in meinem Python-Skript als: "\ xc3n) \ xf8J \ xaf \ xab \ x01rld. Dies ist nur ein Test. Auf Wiedersehen Welt."

Was würde die Hälfte davon richtig entschlüsselt bekommen, aber der erste Teil nicht?

+0

Dieser Code funktioniert gut für mich. Welche Ausgabe sehen Sie, wenn Sie versuchen, es auszuführen? –

+0

3DES wirklich, das ist 2016, sollte AES für neue Arbeit verwendet werden. 3DES ist minimal sicher, die 24 Bytes sind nur ein 168-Bit-Schlüssel, aber aufgrund des Meet-in-the-Middle-Angriffs beträgt die effektive Sicherheit nur 112 Bit. – zaph

+0

@zaph Ich stimme zu. Es ist nur, dass dies keine neue Arbeit ist. – Giovanni

Antwort

0

Es scheint, dass CBCpyDes.CBC sein sollte und PAD_PKCS5 sollte pyDes.PAD_PKCS5 in

k = triple_des(key, CBC, pad=None, padmode=PAD_PKCS5) 

Veränderung sein:

k = triple_des(key, pyDes.CBC, pad=None, padmode= pyDes.PAD_PKCS5) 

Siehe auch: pyDes.

+0

Ich bekomme immer noch den gleichen Fehler. Ich schätze, weil pyDes eine Zeichenfolge anstelle eines Arrays erwartet, das mit Ints gefüllt ist. Vielleicht sollte ich ein anderes Kryptographie-Paket ausprobieren. – Giovanni

Verwandte Themen