Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

XOR-Verschlüsselung mit File (Datenspeicherung (Persistenz))

Schreiben Sie ein Programm, das eine Datei mit dem sog. XOR Verfahren verschlüsselt. Bei diesem Verfahren wird jedes Zeichen (Byte) mit einem Code-Byte (codeByte) verschlüsselt. In Java wird dazu der XOR-Operator (^) verwendet:

byte original, codeByte, chiffrat;
chiffrat = (byte) (original ^ codeByte);

Mit chiffrat wird der geheime (verschlüsselte) Text bezeichnet. Mit codeBytes wird der geheime ausgetauschte Schlüssel bezeichnet. Das Spezielle am XOR-Verfahren ist nun, dass ein zweimaliges Anwenden des codeBytes wieder das original liefert. Weiter speziell ist, dass das Verfahren mathematisch absolut sicher ist, wenn nur einige wenige Voraussetzungen erfüllt sind:

a) Nur der Sender und der Empfänger sind in Kenntnis einer Folge von codeBytes[];

b) diese Folge sollte nur einmal verwendet werden;

c) die Folge sollte aus einem "zufälligen" Bitmuster bestehen und

d) die Folge sollte mindestens so lange sein, wie das zu verschlüsselnde Original.

Schreiben Sie das Programm so, dass es zwei Dateien (Files) entgegennimmt, und daraus eine chiffrierte Ausgabedatei erzeugt. Das erste Eingabefile bezeichnet das Original (original[]) und das zweite File beinhaltet die codeBytes[], also den geheimen Schlüssel. Nun wird die Eingabedatei (original-File) Byte für Byte behandelt. Jedes Byte des Originals wird mit dem nächsten Byte der Schlüsseldatei mittels XOR verknüpft. Das Resultat (chiffrat) wird alsdann in die Ausgabedatei geschrieben. Nur, wer im Besitz der Schlüsseldatei ist, kann das Original wieder entschlüsseln. Bem.: Diese Aufgabe kann gut paarweise gelöst werden: Zwei Gruppen (od. Schüler) tauschen vorab eine Schlüssldatei aus (z.B. ein MP3 Musikstück) und schreiben danach die oben beschriebene Methode. Nun können Sie jede beliebige Datei verschlüsselt und unknackbar austauschen.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

1 Lösung(en)

// C++ 14 | VS-2022
#include <iostream>
#include <fstream>
#include <string>

std::string read_file(const std::string& path) {
    std::string line;
    std::ifstream input(path);
    if (!input) {
        std::cerr << "Pfad nicht gefunden: " << path << "\n";
        return "";
    }
    while (std::getline(input, line)) {}
    return line;
}

void write_file(const std::string& path, const std::string& str) {
    std::ofstream out(path);
    out << str;
}

std::string de_encrypt(const std::string& txt, const std::string& key) {
    if (txt.length() != key.length()) return "unusable key";
    std::string g{};
    for (auto i{ 0 }; i < txt.length(); i++)
        g.push_back(txt[i] ^ key[i]);
    return g;
}

int main() {
    const std::string txt_in{ read_file("C:\\Users\\...\\txt.txt") };
    std::cout << "text: " << txt_in << "\n";
    const std::string key_in{ read_file("C:\\Users\\...\\key.txt") };
    std::cout << "key: " << key_in << "\n";
    const auto encr{ de_encrypt(txt_in, key_in) };
    write_file("C:\\Users\\...\\encrypt.txt", encr);
    std::cout << "encrypt: " << encr << "\n";
    const auto decr{ de_encrypt(read_file("C:\\Users\\...\\encrypt.txt"), key_in) };
    std::cout << "decrypt: " << decr << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 2-4
Schwierigkeit: k.A.
Webcode: 7dae-sm4d
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Zu Aufgabenblatt hinzufügen