Verschlüsselung von unichr

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
52:45:53
User
Beiträge: 3
Registriert: Freitag 13. Dezember 2013, 01:40

Hallo.

wie verschlüsselt man nicht-numerische Zeichen, wie 'a', '&', oder die ersten 31 ASCII/UTF8 Zeichen

Beispiel mit Integern zum ausprobieren, es soll 85 verschlüsselt werden:

Code: Alles auswählen

plaintext = 85
pubKey = [3,101*113]
print pow(plaintext, pubKey[0], pubKey[1]) #9236
Es soll 9236 entschlüsselt werden:

Code: Alles auswählen

ciphertext = 9236
privKey = [7467,101*113]
print pow(ciphertext, privKey[0], privKey[1]) # 85
Anm.: pubKey und privKey sind korrekt. (Für die, die es interessiert siehe RSA, public-key cryptography)
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Ich glaube dein Problem ist nicht nur Python sondern auch die Mathematik.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Den Wert eines ASCII Zeichen bekommt man übrigens über die Funktion ord.
UTF-8 Zeichen gibts nicht und warum ist das Schlüsselpaar eine Liste?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
52:45:53
User
Beiträge: 3
Registriert: Freitag 13. Dezember 2013, 01:40

darktrym hat geschrieben:Den Wert eines ASCII Zeichen bekommt man übrigens über die Funktion ord.
Wird so verschlüsselt, funktioniert die Kodierung nicht, da je nach Modul eine Zahl > 2^7 rauskommt und diese dann nicht in chr umgewandelt werden kann. Würde man dann nochmals modulo 256 rechnen, würde die Verschlüsselung klappen allerdings nicht die Entschlüsselung
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Dann behandle Zahlen auch als Zahlen und nicht als Zeichen.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@52:45:53: Oder um es anders zu formulieren: man verschlüsselt in der Regel keine Zeichen sondern Bytewerte.

Dann kann man nämlich *alles* verschlüsseln, denn letztendlich wird im Rechner alles durch eine Folge von Bytewerten repräsentiert.

Wenn man etwas verschlüsseln möchte was in einer modernen Programmiersprache als abtrakter Datentyp verwendet wird, muss man das in eine Folge von Bytes überführen und dann verschlüsseln. Beim Entschlüsseln geht man den umgekehrten Weg. Die Umwandlung Unicode ↔ Bytes geht ganz einfach über die `encode()`- und `decode()`-Methoden. Da muss man jeweils die gleiche Kodierung angeben. Und es empfiehlt sich eine zu wählen, die alle Unicode-Zeichen abdeckt. Beispielsweise UTF-8.
52:45:53
User
Beiträge: 3
Registriert: Freitag 13. Dezember 2013, 01:40

darktrym hat geschrieben:Dann behandle Zahlen auch als Zahlen und nicht als Zeichen.
Ergebnis wäre ein Chiffrat aus einer Zahlenkette, wie soll man das dann korrekt entschlüsseln.
Vielleicht gibt es jemanden mit Praxiserfahrung, der mir einen Tipp geben könnte.

@BlackJack: Das hat geholfen. Aus deinem Post schliesse ich, dass das auch in Python geht. Werde das heute Abend ausprobieren.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@52:45:53: lies nochmal nach, für was man RSA verwenden kann.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Ich nehme mal an, dein Code wird später nicht produktiv irgendwo eingesetzt also dient nur dem Zweck der Bildung.
Eine sehr einfache Lösung wäre die Zahl als Hexstring abzuspeichern wobei noch dessen Länge davor stehen sollte.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Antworten