AES Verschlüsselung



  • Hallo,
    ich arbeite im Moment an Verschlüsselungsprogrammen in C++. Ich habe bereits erfolgreich Cäsar und XOR Verschlüsselungsprogramme geschrieben. Nun überlege ich wie man ein AES Verschlüsselungsprogramm schreiben könnte. Ich habe bereits viel mit Google gefunden allerdings nur Programme die kurze Strings verschlüsseln können keine Text oder exe Dateien. Habt ihr eine Idee wie man neben Textdateien auch exe Dateien mit AES verschlüsseln kann?
    Danke im Voraus!



  • AES ist eine blockchiffre. Das heißt es werden immer Blöcke einer bestimmten Größe verschlüsselt. Wenn du mehr verschlüsseln willst musst du schauen wie du daraus Blöcke bauen kannst. Übliche Verfahren findest du hier: https://de.m.wikipedia.org/wiki/Betriebsmodus_(Kryptographie)



  • Danke für die Antwort!
    Wie würdest du das denn dann in C++ machen?



  • Kommt auf deine Anforderungen an. Wenn du es ganz einfach haben willst, einfach AES-ECB, sprich in Bloecke (16 Byte fuer AES, wenn ich mich nicht taeusche) teilen und einfach verschluessen; fuer den letzten Block irgendwie padden und hoffen, dass das Dateiformat keinen Schluckauf kriegt, wenn hintenraus noch Muell steht nach dem entschluesseln.

    Wenn es wirklich sicher sein soll, dann nimm AES-CBC. Wie das funktioniert ist ja im Artikel beschrieben, immer den letzten Block (oder IV) per Xor vor dem Verschluesseln einmischen. Dann muesstest du aber entweder den IV fest aus deinem Key erzeugen oder mitspeichern; in dem Fall koenntest du ein Containerformat drum herum basteln, was IV und auch die urspruengliche Dateigroesse gleich mitspeichert. So musst du zwar immernoch padden zum verschluesseln, kannst aber beim entschluesseln die exakte Dateigroesse wiederherstellen.



  • Eigentlich kommt es mir gar nicht so darauf an das es am Ende wieder zusammen ist. Es kommt mir für mein Gesamtvorhaben recht gelegen das es am Ende kleine Bruchstücke sind. Aber hat jemand denn einen Code was das Zerstückeln angeht. Ich kann mir das bei Textdateien noch vorstellen aber bei Videos oder Musik bin ich verloren. Habt ihr dafür einen Code dafür also nur für das Zerteilen? Vielen Dank im Voraus!



  • Du packst die Daten in einen String oder einen Vector (oder was auch immer dir beliebt und hintereinander im Speicher liegt) und wuselst dich halt mit einem Pointer oder Iterator, der jeweils um 16 erhoeht wird, durch. Muesstest halt vorher nur padden (also bis zu ner 16er-Grenze auffuellen), damit das nicht schiefgeht. Und dann nimmst du halt immer den Pointer/Iterator als Datenanfang und fuehrste eine Operation auf 16 Bytes durch.



  • The_Scorpion schrieb:

    Ich kann mir das bei Textdateien noch vorstellen aber bei Videos oder Musik bin ich verloren.

    Auch Videos und alle anderen Dateien bestehen nur aus Bytes. Bei großen Dateien würde es sich anbieten nicht die ganze Datei aufeinmal zu lesen sondern in kleineren Stücken, meinetwegen direkt in der Blockgröße. Dann hast du immer einen Block von Bytes den du verschlüsseln kannst und das Ergebniss schreibst du dann wieder irgendwo hin.



  • Ja klar ich weiss das alles aus bytes besteht aber wie würdet ihr das Zerkleinern in C++ realisieren?
    Danke für die Antworten!



  • The_Scorpion schrieb:

    Ja klar ich weiss das alles aus bytes besteht aber wie würdet ihr das Zerkleinern in C++ realisieren?
    Danke für die Antworten!

    Datei im Binärmodus komplett in ein Array einlesen.
    Dieses Array dann eben durchiterieren, mit dem jeweiligen Beginn/Ende Index eines Blocks: beginn_i=16*i, ende_i=16*(i+1)
    Mit den beiden Indizes hast du nun den jeweiligen Bereich, den du verschlüsseln willst. Danach i um eins erhöhen für den nächsten Block usw.


Log in to reply