C++ Datei verschlüsseln?

4 Antworten


bodoooosdfer 
Fragesteller
 03.12.2019, 15:21

Ich meine mit C++ eine Datei mit Passwort verschlüsseln.So das wenn ich die .exe ausführe, dass dann der gegebene Ordner/Datei verschlüsselt wir

0
MartinusDerNerd  03.12.2019, 15:26
@bodoooosdfer

Also so etwas, wie es z.B. der Packer 7Zip mit Archiven machen kann.

Das ist dann sogar mit selbstausführenden Archiven (.EXE) möglich. Zum Entpacken ist dann das vergebene Passwort einzugeben.

Grundsätzlich passende Algorithmen sollten in den genannten Links zu finden sein. Du musst nur ein für Dich geeignetes Verschlüsselungsverfahren aussuchen.

0
MartinusDerNerd  03.12.2019, 15:55
@bodoooosdfer

Da musst Du dann selber durch.

Hinweise dazu hast Du hier zur Genüge erhalten.

Du musst sie nur noch durcharbeiten.

0

Natürlich geht das. Wie auch in jeder anderen Turing-vollständigen Programmiersprache (ja, sogar in Brainfuck, da wirds dann halt nur etwas komplizierter ^^).

Als groben Entwurf könntest du z.B. das nehmen:

#include <fstream>
#include <string>

#include "sha512.h" //Siehe dazu: http://www.zedwood.com/article/cpp-sha512-function

void encrypt_file(const std::string &infile, const std::string &outfile, const std::string &password);
#define decrypt_file encrypt_file

void encrypt_file(const std::string &infile, const std::string &outfile, const std::string &password){
    std::string key = sha512(password);
    int key_offset = 0;
    std::ifstream source(infile, ios::in | ios::binary);
    std::ofstream destination(outfile, ios::in | ios::binary);
    char buffer[0xffff];
    int c;
    while(!source.eof()){
        source.read(buffer, 0xffff);
        c = source.gcount();
        if(c < 1) break;
        for(int i = 0; i < c; ++i){
            buffer[i] = (char)(buffer[i] ^ key[key_offset++]);
            if(key_offset == key.length){
                key_offset = 0;
                std::string key = sha512(key);
            }
        }
        destination.write(buffer, c);
    }
    source.close();
    destination.close();
}

int main(int argc, char *argv[]){
    encrypt_file("test.txt", "test-encrypted.txt", "covfefe");
    decrypt_file("test-encrypted.txt", "test-decrypted.txt", "covfefe");
    decrypt_file("test-encrypted.txt", "test-wrong_password.txt", "covfeff");
}

Ist im Grunde ein einfacher Stream-Chiffre basierend auf dem klassischen XOR-Chiffre, nur dass das Passwort nicht einfach so wie es ist verwendet, sondern gehasht und auch dann nicht einfach wieder und wieder durchlaufen, sondern vor jedem Durchlauf erneut gehasht wird.


bodoooosdfer 
Fragesteller
 03.12.2019, 16:40

Danach habe ich gesucht. Kuss

0

Einlesen, umwandeln, speichern.

Einfaches Beispiel: Umwandeln! A = 1, B = 2, C = 3, ... eine Textdatei hat dann den Inhalt: 4617 435414 16871354 31541784 634513483 ... Schwer zu lesen :-)

Woher ich das weiß:Hobby – Programmierer, EDV, ... seit den 80er :)

bodoooosdfer 
Fragesteller
 03.12.2019, 15:16

Ich meine den Ordner oder die Datei mit einem Passwort versehen

0
PeterP58  04.12.2019, 17:24
@bodoooosdfer

Lies die Datei ein, füge irgendwo ein Zeichen im Header hinzu und schon kann die Datei nicht mehr geöffnet werden, weil sie fehlerhaft ist.

0

Eine C++ Datei ist auch nur eine normale Textdatei. Du kannst sie also ebenso verschlüsseln, wie jede andere Textdatei auch.

Du musst sie halt vor dem Kompilieren/Bearbeiten wieder entschlüsseln.


bodoooosdfer 
Fragesteller
 03.12.2019, 14:29

Nein, ich meine eine andere mit C++ verschlüsseln.

0