ubuntuusers.de

Python + AES + RSA

Status: Ungelöst | Ubuntu-Version: Ubuntu 11.04 (Natty Narwhal)
Antworten |

Developer92 Team-Icon

Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

Hallo, folgendes Problem: Ich würde in Python gerne RSA und AES-Verschlüsselung benutzen. Am Besten beides im selben Modul. Wenn nicht, dann muss man halt 2 Module importieren. Was an sich auch kein Problem wäre. Das Problem besteht eher darin, dass man komischerweise unzählige Module findet und ich für keines bisher eine Anleitung gefunden habe, wie man das alles sinnvoll einsetzt.

Aktuell würde ich ja zum Modul OpenGPInterface tendieren (ist unter Ubuntu vorinstalliert), aber leider kann ich auch das nicht nutzen. Wenn also jemand Tipps, Anleitungen etc. hat, dan immer her damit ☺

Anm.: Die Suchmaschine meiner Wahl wurde bereits erfolglos genutzt

mfg

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

http://www.pycrypto.org/

Wenn man zu faul zum Doku lesen ist sieht es so aus:

python
>>> import Crypto
>>> help(Crypto)
>>> import Crypto.Cipher.AES
>>> x = Crypto.Cipher.AES.new("xy")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: AES key must be either 16, 24, or 32 bytes long
>>> x = Crypto.Cipher.AES.new("x"*32)
>>> x
<AES object at 0x2500ad0>
>>> help(x)
>>> dir(x)
['decrypt', 'encrypt', 'sync']
>>> x.encrypt("foobar")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Input strings must be a multiple of 16 in length
>>> x.encrypt("f"*16)
'\x8c\x94\x97\xfc\xfd:\xea6\xd5j+RC\xfa\xb7\xb8'
>>> x.decrypt(x.encrypt("f"*16))
'ffffffffffffffff'

Developer92 Team-Icon

(Themenstarter)
Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

Ich danke dir, dass du geantwortet hast, aber leider hilft mir das nicht weiter. Doku hab ich im übrigen schon gesehen.

Ich stelle mal ein konkretes Problem: Ich hab den Text "Das ist ein Satz" und das Passwort "Passwort". Wie verschlüssle ich das mit AES (und entschlüssle es wieder)? Ich komm einfach nicht drauf, wie das funktionieren soll. Klar kann ich ein "f"*16 auch verschlüsseln (so wie du es gezeigt hast) und auch wieder entschlüsseln. Aber es funktioniert einfach nicht mit einem ganzen Satz. Da kann ich machen was ich will.

Wenn du dazu ne Lösung wüsstest, dann wär das genial. Aber das gezeigte Beispiel bringt mir leider recht wenig. Sorry.

mfg

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

AES kann nur Blöcke von einer festen Länge verschlüsseln. Ein Block hat 128 Bit, das sind 16 Byte. Daher wird von der encrypt-Funktion ein String verlangt der ein vielfaches von 16 Byte lang ist. Das gleiche gilt auch für den Schlüssel, ein beliebiges Passwort als Schlüssel geht halt einfach nicht, sondern der muss eine feste Länge von 128, 192 oder 256 Bits haben. Überall wo eine Festplattenverschlüsselung o.ä. mit einem Passwort arbeitet, wird das Passwort daher erst durch eine Hashfunktion geschickt, die ein Ergebnis passender Länge ausspuckt. Und zur Verschlüsselung werden eben die passenden Blockgrößen benutzt. Dann muss eben der ganze Block neu verschlüsselt werden auch wenn du nur 1 Byte ändern willst.

Developer92 Team-Icon

(Themenstarter)
Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

Für mich bedeutet das also letztlich, dass ich den Rest meines zu verschlüsselten Textes mit Leerzeichen oder was auch immer auffüllen muss, damit man verschlüsseln kann, oder? (Damit er ein vielfaches von 16 entspricht)

Und das Passwort muss dann 16,24 oder 32 Zeichen haben, richtig?

Dann würde es nämlich für mich Sinn ergeben ☺

mfg

Maduser

Avatar von Maduser

Anmeldungsdatum:
3. Mai 2005

Beiträge: 1238

TDeveloper schrieb:

Für mich bedeutet das also letztlich, dass ich den Rest meines zu verschlüsselten Textes mit Leerzeichen oder was auch immer auffüllen muss, damit man verschlüsseln kann, oder? (Damit er ein vielfaches von 16 entspricht)

Leerzeichen sind aber eine schlechte Idee. Besser ist es eine Key Expansion Methode zu nutzten (siehe auch en WP: Key schedule). Die Funktion für AES ist auch im dem offiziellen AES Standard erklärt (pdf, Seite 17ff), wahrscheinlich gibt es das auch schon in Pyhton.

Antworten |