Hilfe bei AES Verschlüsselung mit Crypto

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
Gondii
User
Beiträge: 24
Registriert: Freitag 11. September 2015, 05:56

Hallo,

Ich kenne mich leider so gar nicht mit Verschlüsselung aus, brauche aber ein Script um Dateien verschlüsseln zu können. Ich hab im Internet diesen Code hier aufgegriffen:

Code: Alles auswählen

import os
from Crypto.Cipher import AES
from Crypto.Hash import SHA256
from Crypto import Random

def encrypt(self, key, infile_name, outfile_name):
    chunksize = 64*1024
    outputFile = outfile_name
    filesize = str(os.path.getsize(infile_name)).zfill(16)
    IV = Random.new().read(16)

    encryptor = AES.new(key, AES.MODE_CBC, IV)

    with open(infile_name, 'rb') as infile:
        with open(outputFile, 'wb') as outfile:
            outfile.write(filesize.encode('utf-8'))
            outfile.write(IV)

            while True:
                chunk = infile.read(chunksize)

                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != 0:
                    chunk += b' ' * (16 - (len(chunk) % 16))
                    
                outfile.write(encryptor.encrypt(chunk))

def decrypt(self, key, infile_name, outfile_name):
    chunksize = 64*1024
    with open(infile_name, 'rb') as infile:
        filesize = int(infile.read(16))
        IV = infile.read(16)

        decryptor = AES.new(key, AES.MODE_CBC, IV)

        with open(outfile_name, 'wb') as outfile:
            while True:
                chunk = infile.read(chunksize)

                if len(chunk) == 0:
                    break

               outfile.write(decryptor.decrypt(chunk))
            outfile.truncate(filesize)

def get_key(self, password):
    hasher = SHA256.new(password.encode('utf-8'))
    return hasher.digest()
Naja auf jeden Fall scheint damit was nicht zu stimmen, denn wenn ich damit beispielsweise eine Audio- oder Videodatei verschlüssel und wieder entschlüssel, ist die Datei danach beschädigt.

Abgesehen davon würde ich den Dateizugriff (schreiben / lesen) gerne seperat machen... ich will eigentlich nur zwei Funktionen haben, die Binärdaten (binär eingelesene Datei-Inhalte oder halt binäre Strings) ver- bzw entschlüsseln.

Könnt ihr mir da weiter helfen? Ich hab zwar schon einiges über Verschlüsselung gelesen, aber ich bekomme es alleine nicht hin.

Vielen Dank im Vorraus.

Gruß, Gondii
Zuletzt geändert von Anonymous am Sonntag 10. Januar 2016, 10:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Gondii
User
Beiträge: 24
Registriert: Freitag 11. September 2015, 05:56

BlackJack hat geschrieben:@Gondii: Würde das hier tun was Du brauchst: https://cryptography.io/en/latest/fernet/ ?
Ich bin schon an AES interessiert... von Fernet hab ich noch nie was gehört.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Gondii hat geschrieben:Ich bin schon an AES interessiert... von Fernet hab ich noch nie was gehört.
Fernet ist ja auch nur der Name der Bibliothek, nicht der Verschlüsselung.

Wenn du dem Link gefolgt wärest und etwas gelesen hättest, dann hättest du zur verwendeten Verschlüsselung folgendes gefunden: "AES in CBC mode with a 128-bit key for encryption; using PKCS7 padding.".
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mit anderen Worten Fernet ist dass gleiche was du probierst bloß in funktionierend, standardisiert und von Leuten designed und implementiert die wissen als sie tun.
Gondii
User
Beiträge: 24
Registriert: Freitag 11. September 2015, 05:56

Ok danke, dann schau ich da mal rein.
Gondii
User
Beiträge: 24
Registriert: Freitag 11. September 2015, 05:56

Das Modul ist echt gut. Hab dort einige nützliche Dinge entdeckt.
Aber mein aktuelles Problem bleibt leider bestehen. Wenn ich Dateien in kleineren Chunks ( read(chunksize) ) einlesen, verschlüsseln und direkt wieder schreiben will, muss ich runter auf die low level Ebene, wo es kompliziert wird :/ Ich hab ne Menge rum probiert, bekomme immer wieder den gleichen Fehler beim Entschlüsseln: Invalid Token.

Ich werd mich also wohl oder übel da rein lesen müssen.

Edit: Ja ich weiß, ich hab oben geschrieben, ich wolle Dateizugriff und Ver / Entschlüsselung voneinander trennen... hab aber nicht bedacht, dass ich dann die komplette Datei auf einmal einlesen muss... das ist mir zu speicherlastig.
Antworten