C++ Datei verschlüsseln?
Geht das oder eher nicht. Wenn es geht bitte mit Codebeispiel.
4 Antworten
Hallo!
Ein sehr einfacher Verschlüsselungs-Algorithmus wäre ROT13:
https://de.wikipedia.org/wiki/ROT13
https://www.geeksforgeeks.org/rot13-cipher/
Wesentlich aufwändiger wäre es mit der RSA-Verschlüsselung:
https://de.wikipedia.org/wiki/RSA-Kryptosystem
https://www.google.com/search?q=verschl%C3%BCsselung%2Brsa%2Bc%2B%2B
Weiteres findest Du hier:
https://www.google.com/search?q=kryptography%2Balgorithmus%2Bc%2B%2B
https://www.google.com/search?q=kryptographie%2Bverfahren
https://www.google.com/search?q=kryptographie%2Bgrundlagen%2Bc%2B%2B
Gruß
Martin
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.
Gibt es denn einen Befehl womit ich eine Datei mit Passwort versehen kann?
Im Explorer kann man eine Datei, oder Ordner markieren und dann per Kontextmenü 7Zip anwählen und dann "Zu einem Archiv hinzufügen" auswählen.
Auf der rechten Seite des erscheinenden Dialogs findest Du alle gewünschten Optionen.
https://www.youtube.com/results?search_query=7zip+anleitung+deutsch
https://www.youtube.com/results?search_query=7zip+archiv+verschl%C3%BCsseln
Ich will das ganze aber über C++ machen!
Da musst Du dann selber durch.
Hinweise dazu hast Du hier zur Genüge erhalten.
Du musst sie nur noch durcharbeiten.
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.
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 :-)
Ich meine den Ordner oder die Datei mit einem Passwort versehen
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.
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.
Klar geht das - oder dachtest Du, es gibt spezielle Programmiersprachen, die nur Dinge verschlüsseln können? :-D
Beispiel für RSA Verschlüsselung:
https://www.codeproject.com/Questions/602310/ImplementingplusRSAplusCryptographyplusinplusC-2b
Ne sollte eigentlich nur nicht drängend klingen
Hier noch ein besseres Beispiel:
https://stackoverflow.com/questions/9406840/rsa-encrypt-decrypt
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