Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

Suche Algorithmus/Ideen zum String-Kodieren...

Mdl / 9 Antworten / Flachansicht Nickles

Suche Algorithmus/Ideen - vorzugsweise in C/C++ (aber nat. keine Vorraussetzung) - zum String-Kodieren...

mit einer wesentlichen Anforderung:

Wenn sich zwei Strings auch nur minimal unterscheiden, sollte die Ausgabe i.d.R. komplett unterschiedlich sein.

Obwohl ich eher eine Unkenntlichmachung, als eine wirksame Verschlüsselung benötige, habe ich, weil gerade greifbar, den DES-Algorithmus auf zwei ähnliche Strings - zwei Dateinamen mit unterschiedl. Extention - angewandt und festgestellt, dass der dafür nicht ideal ist. Grund: DES verschlüsselt in 8-Byte-Blöcken. Sind somit die ersten 8 Zeichen der Dateinamen identisch sind auch die ersten 8 Zeichen der Zielnamen identisch.

Also: Irgendwelche Ideen, Verweise, etc. ?

Vielen Dank,

Mdl

bei Antwort benachrichtigen
Mdl Borlander „Auch Interessant könnte ggf. noch mal ein Blick auf das ...“
Optionen
Dann solltest Du beim Einsatz eines beliebigen Verschlüsselungsverfahrens wie z.B. DES noch drüber nachdenken das Ergebnis anschließend noch so nachzubearbeiten, dass nur in Dateinamen erlaubte Zeichen auftreten können. Also kein "*" oder "/", z.B. mit base64url siehe https://de.wikipedia.org/wiki/Base64.

Ist klar. Danke für den Link.

Ich könnte meine 'Anforderung' ja auch verallgemeinern in dem Sinn:

Sei M eine Menge aus 'gültigen' Zeichen, S(M) (StringMenge) die Menge aller Strings, die aus M erstellt werden können, len(s) Fkt. die die Länge von string s bezeichnet.  Suche Funktionen/Algorithmen scramble()/unscramble(), für die gilt:

    scrample(s) €SM für alle s€S(M)

    s=unscramble(scramble(s)) € SM für alle s€S(M)

    len(s)==len(scamble(s)) für alle s€S(M)

    scamble(s1)==scramble(s2), falls s1==s2 (Eindeutigkeit)

und dann eben meine Spezialforderung:

   scramble(s1) nicht 'ähnlich' zu scramble(s2), falls s1,s2 ähnlich

wobei für ähnlich jetzt hier mal die intuitive Vorstellung stehen bleiben soll

(Sorry, konnte nicht widerstehen...) 

Ob ich damit jetzt Menge der am Posting potientiell Interessierten jetzt sprunghaft ansteigt? ;-)

Vereinfacht könnten wir aber (erstmal) davon ausgehen, dass M aus der Menge aller möglichen Zeichen (char-Werte, '\x00', ..., '\xff', 0-255) bestehen kann.

Was meinst Du mit gleichlang? (Ausgabelänge = Eingabelänge?)

Ja, genau.

Man beachte, dass es sich bei dem von mir gesuchtem Alg. eigentlich mehr um eine Umarrangierung bzw. einfache Kodierung handelt.

Und nicht um ein Verschlüsselungsverfahren, das theoretisch, z.B. mit DES ja noch danach erfolgen könnte. Kombiniert wären dann ja auch ähnliche Ausgangsstrings danach nicht mehr ähnlich, wie bei 'nur' DES.

Für diese Umarrangierung ist für mich nicht so recht ersichtlich, warum der Zielstring länger sein muss.

Sofern Du kein Verfahren hast mit einer Blocklänge die exakt der Eingabelänge entspricht wirst Du ein bisschen zusätzlichen Platz mit einplanen müssen. Gebräuchlicher als mein spontaner Vorschlag wäre die Verwendung eines Salt um für jeder Datei einen anderen Schlüssel zu versehen. Diesen Salt als Ergänzung des geheinem Schlüssels müsste man dann allerdings auch mit im Dateinamen ablegen. Hätte dann also erst mal ein Prefix im Dateinamen für den Salt.

Aha, neuen Begriff gelernt: 'Salt'. Auch interessant.

Was meinst Du mit zwei Ausgangsstrings?

s1, s2 von oben

Auch Interessant könnte ggf. noch mal ein Blick auf das FUSE-Dateisystem EncFS sein.

Interessant!

bei Antwort benachrichtigen