Computer & Technik

Clipper

Zeichenketten verschlüsseln

CRYPTSTR verschlüsselt einen Zeichenstring anhand eines Paßwortes. Bei der Verschlüsselung wird die grundsätzlich reversible logische XOR-Verknüpfung verwendet, die allerdings leicht modifiziert wurde. Als Ergebnis stellt sich eine auf den ersten Blick erstaunliche Eigenschaft heraus: die Verschlüsselung des Originalstrings ist nicht eindeutig! Der Algorithmus erzeugt für ein mehrfach in der Zeichkette vorkommendes Zeichen verschiedene verschlüsselte Zeichen. Ein Beispiel möge dies verdeutlichen:

Das Original : Copyright (C) 1990 INTEREST Verlag
verschlüsselt: rñû¼ÿ¥£ÆúUNvOTfcheF|têz|têzS|ÖºûÉ£
entschlüsselt: Copyright (C) 1990 INTEREST Verlag

Obwohl der Rückführung der verschlüsselten Zeichenkette eindeutig möglich ist, läßt sich die verschlüsselte Information auch mit großen Aufwand kaum knacken, wenn nicht ein Teil des Schlüssels oder der Original-Zeichenkette bekannt ist. Denn alle Verfahren auf statistischer Basis fallen wegen der nicht eindeutigen Zuordnung der Zeichen von vornherein weg.

Im vorliegenden Beispiel wurden die mehrfach vorkommenden Zeichen auf folgende Zeichen abgebildet:

" "       #032   ==>     #070 (F), #083 (S), #084 (T), #085 (U)

9         #114   ==>     #152 (ÿ), #157 (¥)

C         #104   ==>     #146 (Æ), #163 (ú)

E         #040   ==>     #078 (N), #118 (v)

g         #057   ==>     #099 (c), #102 (f)

r         #069   ==>     #116 (t), #122 (z)

T         #108   ==>     #150 (û), #167 (º)

 

Erreicht wird dieses Verhalten durch einen Algorithmus, der insgesamt fünf Größen berücksichtigt:

1. Original-Zeichenkette
2. Schlüssel-Zeichenkette
3. Länge der Schlüssel-Zeichenkette
4. Codewert
5. Konstanter Summand

Diese Größen werden über folgende Formel verknüpft:

source = Original-Zeichenkette
key    = Schlüssel-Zeichenkette
klen   = Länge der Schlüssel-Zeichenkette

für I von 0 bis letztes Zeichen der Original-Zeichenkette
BEGIN
  a    = source[I]                - KONSTANTE
  b    = (key[I MODULO klen + 1]) - KONSTANTE
  v[I] = (a+b) MODULO CODEVAL     + KONSTANTE
END

In v steht anschließend die verschlüsselte Zeichenkette.

Zum Entschlüsseln muß im Algorithmus nur ein Vorzeichen geändert werden:

  v[I] = (a-b) MODULO CODEVAL    + KONSTANTE

 

Selbst wenn dieser Algorithmus hier offen dargelegt wird, besteht keine Gefahr, daß Ihre Daten nicht mehr sicher verschlüsselt werden können. Denn bereits ein Verändern der Paßwortlänge bedeutet einen Rechenaufwand, der das Knacken des Codes mit normalen Mitteln nahezu unmöglich macht.

Wer dieser internen Variation nicht vertrauen mag, kann die beiden numerischen Eckwerte CODEVAL und KONSTANTE ändern, die im Source als #defines vereinbart sind. Allerdings ist hierbei Vorsicht geboten. Damit am Ende auch wieder die Original-Zeichenkette herauskommt, müssen CODEVAL und KONSTANTE zusammen immer 255 ergeben. Im vorliegenden FAll gelten folgende Defaults:

#define CODEVAL   = 224;
#define KONSTANTE =  31;

Funktionsbeschreibung:

Syntax:
ENCODESTR(CHARstring, CHARpasswort)

Parameter:
CHARstring   = die zu verschlüsselnde Zeichenkette
CHARpasswort = das zu verwendende Passwort.

Rückgabe:
Zeichenkette
Die verschlüsselte Zeichenkette.

─────────────────────────────────────────────────────────────────

Syntax:
DECODESTR(CHARstring, CHARpasswort)

Parameter:
CHARstring   = die verschlüsselte Zeichenkette
CHARpasswort = das verwendete Passwort.

Rückgabe:
Zeichenkette
Der Original-Zeichenstring.

 

Hinweise:
Die Funktion CRYPTSTR() arbeitet mit SAY und GET zusammen. Allerdings muß für die Eingabe über GET eine temporäre Variable verwendet werden, damit alles korrekt verläuft.

Wird das Modul CRYPT.C geändert, so muß es anschließend mit Microsoft-C Version 5.x und den folgenden Kommandozeilen-Optionen übersetzt werden:

CL /c /AL /Zl /Oalt /FPa /Gs /J CRYPT.C

Beim Linken ist CRYPT.OBJ mit in die LINK-Liste aufzunehmen.

 

Beispiele:
@ 1, 1 SAY DECODESTR(FELDXX, PASSWORT)

 

TempVar = DECODESTR(FELDXX, PASSWORT)
@ 1, 2 GET TempVar
READ
REPLACE FELDXX WITH ENCODESTR(TempVar, PASSWORT)





Sachgebiet


© 2009-2012 by Alojado Publishing. Alle Rechte vorbehalten. Ausgewiesene Marken gehören ihren jeweiligen Eigentümern.
Mit der Benutzung dieser Seite erkennen Sie die Nutzungsbedingungen und die Datenschutzerklärung an. Der Betreiber übernimmt keine Haftung für den Inhalt verlinkter externer Internetseiten.
Seite erzeugt 2012-05-22 08:25:49 von textarchiv.alojado.de