Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: k.A.
Webcode: ptiy-pppg
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen