XOR-Verschlüsselung mit Pseudozufallszahlen (Datenspeicherung (Persistenz))
Schreiben Sie ein zweites Programm (siehe vorangehende Aufgabe), das ebenfalls eine Datei mit dem XOR-Verfahren verschlüsselt. Diesmal soll jedoch nicht eine Schlüsseldatei verwendet werden, um die Bytes zu chiffrieren. Stattdessen werden diesmal die codeBytes mit einem Pseudozufallsgereratoren erzeugt. Pseudozufallszahlen können mit einem Initialwert (seed) gestartet werden und produzieren für einen Startwert immer exakt die selbe Folge von Zufallszahlen. Diesen Effekt machen wir uns zu Nutze, indem wir diesmal als Code eine Folge von (Pseudo)Zufalls-Bytes benutzen:
import java.util.Random;
…
Random rnd = new Random(4453); // Geheimzahl
…
byte codeByte = (byte) rnd.nextInt();
Vorab im Geheimen wird nun nicht die Schlüsseldatei, sondern lediglich der "seed" als Schlüssel ausgetauscht.
Bemerkung: Das Verfahren ist nun mathematisch nicht mehr absolut sicher, denn ein Spion (Angreifer) muss nun lediglich alle Initialwerte (seed) ausprobieren.
0 Kommentare
1 Lösung(en)
// C++ 14 | VS-2022
#include <iostream>
const std::string CHR{ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890" };
const int LEN{ (int)CHR.length() };
std::string get_key(size_t len, size_t seed) {
std::string k{};
srand(seed);
for (size_t i{ 0 }; i < len; i++)
k.push_back(CHR[rand() % LEN]);
return k;
}
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 size_t key_seed{ 987612345 };
const std::string txt_in{"Das ist ein Test!"};
const std::string key_in{ get_key(txt_in.length(), key_seed) };
const auto txt_encr{ de_encrypt(txt_in, key_in) };
const std::string key_out{ get_key(key_in.length(), key_seed) };
const auto txt_decr{ de_encrypt(txt_encr, key_out) };
std::cout << txt_decr << "\n";
}
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 1 |
Schwierigkeit: | k.A. |
Webcode: | ptiy-pppg |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |