Seite 1 von 1

Hilfe bei AES Verschlüsselung mit Crypto

Verfasst: Sonntag 10. Januar 2016, 07:12
von Gondii
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

Re: Hilfe bei AES Verschlüsselung mit Crypto

Verfasst: Sonntag 10. Januar 2016, 10:47
von BlackJack
@Gondii: Würde das hier tun was Du brauchst: https://cryptography.io/en/latest/fernet/ ?

Re: Hilfe bei AES Verschlüsselung mit Crypto

Verfasst: Montag 11. Januar 2016, 08:38
von Gondii
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.

Re: Hilfe bei AES Verschlüsselung mit Crypto

Verfasst: Montag 11. Januar 2016, 10:34
von /me
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.".

Re: Hilfe bei AES Verschlüsselung mit Crypto

Verfasst: Montag 11. Januar 2016, 12:45
von DasIch
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.

Re: Hilfe bei AES Verschlüsselung mit Crypto

Verfasst: Dienstag 19. Januar 2016, 15:41
von Gondii
Ok danke, dann schau ich da mal rein.

Re: Hilfe bei AES Verschlüsselung mit Crypto

Verfasst: Dienstag 19. Januar 2016, 23:33
von Gondii
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.