Thema: Delphi Zufallsnamen erzeugen...

Einzelnen Beitrag anzeigen

Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#40
  Alt 18. Feb 2003, 23:26
Hab ich mal gemacht, als mir langweilg war:
Delphi-Quellcode:
unit NailCrypt;

interface

type
    TKeyArray = Array of String; //Klasse mit dem Ergebnis
    TNailCrypt = Class //Die Crypt-Klasse mit Funktionen
        public
            function OpenKeyFile(Filename: String): TKeyArray;
            function Encrypt(Plain_Text: String; KeyToUse: TKeyArray; Offset: integer): String;
            function Decrypt(Crypted_Text: String; KeyToUse: TKeyArray; Offset: integer): String;
    end;


implementation

function TNailCrypt.Encrypt(Plain_Text: String; KeyToUse: TKeyArray; Offset: integer): String;
var
    i,j: integer; //Schleifenvariablen
    lpt,lks,lka: integer; //Längenangaben: PlainText, KeyStrings und KeyArray
begin
lka := length(keytouse); //Anzahl der Schlüsselzeilen
lks := Length(KeyToUse[0]); //Länge der Schlüssezeilen
lpt := Length(Plain_Text); //Länge des zu verschlüsselnden Textes
SetLength(Result,lpt); //Länge des Ergebnisses

for i := 1 to lpt do //Den kompletten String lang
 for j := 1 to lks do //Die komplette Schlüssel-Zeile
  if Plain_Text[i] = KeyToUse[lka-1,j] then //vergleichen
   begin
    Result[i] := KeyToUse[(i-1+offset) mod (lka-1),j]; //und den entsprechenden Eintrag
    Break; //wählen und abbrechen
   end
  else
   if j = lks then //Wenn nicht gleich und alle durch
     Result[i] := Plain_Text[i]; //alten nehmen
end;


function TNailCrypt.Decrypt(Crypted_Text: String; KeyToUse: TKeyArray; Offset: integer): String;
var
    i,j: integer; //Schleifenvariablen
    lct,lks,lka: integer; //Längenvariablen
begin
lka := Length(KeyToUse); //Anzahl der Schlüsselzeilen
lks := Length(KeyToUse[0]); //Länge der Schlüssezeilen
lct := Length(Crypted_Text); //Länge der zu entschlüsselnden Textes
SetLength(Result,lct); //Länge des Ergebnisses

for i := 1 to lct do //Den kompletten String lang
 for j := 1 to lks do //Die komplette Schlüssel-Zeile
  if KeyToUse[(i-1+offset) mod (lka-1),j] = Crypted_Text[i] then //vergleichen
   begin
    Result[i] := KeyToUse[lka-1,j]; //und den entsprechenden Eintrag
    Break; //wählen und abbrechen
   end
  else
   if j = lks then //Wenn nicht gleich und alle durch
     Result[i] := Crypted_Text[i]; //gleich lassen
end;

function TNailCrypt.OpenKeyfile(FileName: String): TKeyArray;
var SomeFile: TextFile;
    Buffer: String;
begin
AssignFile(SomeFile,FileName); //File Assign
Reset(SomeFile); //und Reset
SetLength(Result,0); //Schlüssellänge einstellen
while not eof(SomeFile) do //Die komplette File lang
    begin
        SetLength(Result, Length(Result) + 1); //Schlüssellänge erhöhen,
        Readln(SomeFile,Buffer); //Zeile einlesen
        Result[High(Result)] := Buffer; //und speichern
    end;
closefile(SomeFile); //File Close
end;

end.
schon länger her, aus meiner Anfangszeit. Ich hab ihn jetzt 1:1 gepostet. Also keine pingeligen Anmerkungen, ich weiß (vieles) mittlerweile selbst besser. Prinzipielle Anregungen natürlich gerne. Ich nutze den Code nicht mehr, ich nehme: www.cityinthesky.co.uk - Code. Ist echt top!!!

PS: Anwendungsbeispiele:
Delphi-Quellcode:
for Count := 1 to Listbox1.Items.Count do
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,0);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,(Count - 1) mod 10 + 1);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,(Count - 1) mod 10);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,Count);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,Count - 1);
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,1);
//einen davon
verschlüsselungen und entschlüsselungen (der gleichen art) kann man addieren, wenns 0 gibt, ist der Text wieder "plain".

Die Schlüsseldatei ist eine Textdatei mit allen erlaubten Zeichen. ("durchgeschüttelt"). Je mehr Zahlen, desto sicherer (obwohl das ganze nie wirklich sicher wird...).

PS: ich häng mal eine an:
Angehängte Dateien
Dateityp: txt keyfile.txt (1,7 KB, 6x aufgerufen)
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat