Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Sehr kleines Programm für eine RC4 Verschlüsselung (https://www.delphipraxis.net/109938-sehr-kleines-programm-fuer-eine-rc4-verschluesselung.html)

BigT 10. Mär 2008 14:01


Sehr kleines Programm für eine RC4 Verschlüsselung
 
Hi,
ich habe das Problem, dass ich es nicht schaffe ein Miniprogramm zu schreiben, dass ein kurzes Wort (welches in einer Editbox steht) mithilfe des RC4 Algorithmus in einen Code umzuwandeln.
Ich habe den Algorithmus schon im Forum gefunden, schaffe es aber nicht ihn einzubinden.

Ich hoffe ihr könnt mir hier helfen.
Bisher habe ich das aus dem Forum zusammengestellt.
Einige Sachen habe ich kommentiert und bei anderen habe ich drangeschrieben, was ich nicht verstehe.

Delphi-Quellcode:
type
  TRC4Context = record
    D: array[Byte] of Byte;
    I,J: Byte;
  end;

implementation

{$R *.dfm}


procedure RC4Init(var RC4: TRC4Context; const Key: String);       // Erstellen der S-Box
var
  R,S,T,K: Byte;
  U,L: Integer;
begin
  L := Length(Key);
  with RC4 do
  begin
    I := 0;            // die Zähler i und j werden am Anfang auf 0 gesetzt
    J := 0;
    for S := 0 to 255 do D[S] := S;     // die S-Box wird linear aufgefüllt
    R := 0;
    U := 0;
    for S := 0 to 255 do
    begin
      if U < L then K := PByteArray(Key)[U] else K := 0;        //Was bedeutet "PByteArray(Key)[U]"??
      Inc(U);
      if U >= L then U := 0;
      Inc(R, D[S] + K);
      T   := D[S];
      D[S] := D[R];
      D[R] := T;
    end;
  end;
end;

procedure RC4Code(var RC4: TRC4Context; const Source; var Dest; Count: Integer);
var
  S: Integer;
  T: Byte;
begin
  with RC4 do
    for S := 0 to Count -1 do
    begin
      Inc(I);
      T := D[I];
      Inc(J, T);
      D[I] := D[J];
      D[J] := T;
      Inc(T, D[I]);
      TByteArray(Dest)[S] := TByteArray(Source)[S] xor D[T];             // Was bedeutet das?? Kann man das verständlich umschreiben? Denn ich kenne den Befehl nicht.
    end;
end;


procedure RC4Done(var RC4: TRC4Context);
begin
  FillChar(RC4, SizeOf(RC4), 0);
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  x: TRC4Context; str1, str2, str3: string;
begin
  str1:=edit1.text;                     //hier soll die Verschlüsselung stattfinden
                                         //str1 soll hinein gegeben werden und in edit2 soll dann der codierte Schlüssel stehen.
 {RC4Init(x,'Passwort');                                        //Wie binde ich das ein?
  RC4Code(x, str1[1], str2[1], Length(str1)); // verschlüsseln
  RC4Done(x);   }

end;

end.
Vielen Dank im Voraus

gammatester 10. Mär 2008 15:39

Re: Sehr kleines Programm für eine RC4 Verschlüsselung
 
Hilft dies weiter?

Delphi-Quellcode:
A xor B = (A and (not B)) or ((not A) and B)
Aber eigentlich sollte jeder, der mit RC4 verschlüsseln will, wissen was xor ist; im äußersten Notfall gibt es noch die Delphihilfe.

Gruß Gammatester

BigT 10. Mär 2008 15:43

Re: Sehr kleines Programm für eine RC4 Verschlüsselung
 
hi,
was xor ist weiß aber was dieses
Delphi-Quellcode:
PByteArray(Key)[U]
bedeutet, weiß ich nicht.

Und in welcher Variable steht nachher der Verschlüsselungscode??

gammatester 10. Mär 2008 15:54

Re: Sehr kleines Programm für eine RC4 Verschlüsselung
 
Zitat:

Zitat von BigT
hi,
was xor ist weiß aber was dieses
Delphi-Quellcode:
PByteArray(Key)[U]
bedeutet, weiß ich nicht.

Und in welcher Variable steht nachher der Verschlüsselungscode??

PByteArray wird als Typecast auf die Konstante Key angewendet, damit man diese byteweise bearbeiten kann.

Der verschlüsselte Texte steht in Dest, also bei Dir in str2 (er ist allerdings in der Regel nicht lesbar, alle Zeichen von #0 bis #255 vorkommen können/werden).

Gruß Gammatester

BigT 10. Mär 2008 16:10

Re: Sehr kleines Programm für eine RC4 Verschlüsselung
 
ok, danke das hab ich dann jetzt verstanden.

aber wie komm ich denn an den Schlüssel ran und kann ihn mir ausgeben lassen?
Weil das Porgramm soll ja nur zeigen ,wie der ein Wort mit RC4 umgewandelt wird.

Könnt ihr mir da weiter helfen??

gammatester 10. Mär 2008 17:22

Re: Sehr kleines Programm für eine RC4 Verschlüsselung
 
Zitat:

Zitat von BigT
ok, danke das hab ich dann jetzt verstanden.

aber wie komm ich denn an den Schlüssel ran und kann ihn mir ausgeben lassen?
Weil das Porgramm soll ja nur zeigen ,wie der ein Wort mit RC4 umgewandelt wird.

Könnt ihr mir da weiter helfen??

Die Frage verstehe ich nicht. Ist denn nicht 'Passwort' Dein Schlüssel?

Gammatester

gammatester 10. Mär 2008 17:23

Re: Sehr kleines Programm für eine RC4 Verschlüsselung
 
Zitat:

Zitat von BigT
ok, danke das hab ich dann jetzt verstanden.

aber wie komm ich denn an den Schlüssel ran und kann ihn mir ausgeben lassen?
Weil das Porgramm soll ja nur zeigen ,wie der ein Wort mit RC4 umgewandelt wird.

Könnt ihr mir da weiter helfen??

Die Frage verstehe ich nicht. Ist denn nicht 'Passwort' Dein Schlüssel?

Gammatester

BigT 10. Mär 2008 19:44

Re: Sehr kleines Programm für eine RC4 Verschlüsselung
 
also ich habe ja das folgende problem:
ich gebe einen string z.B "ababa" ein.
Wenn ich dann auf den Button klicke, soll dieser String mithilfe von dem RC4 Algoirthmus verschlüsselt werden.

Jetzt ist eben meine Frage, wie ich das in die Procedure init, code und done eintragen muss??

Nett wäre, wenn ihr mir sagt was ich wo reinschreiben muss oder es direkt selber abändert...


Vielen Dank im Voraus

gammatester 10. Mär 2008 20:03

Re: Sehr kleines Programm für eine RC4 Verschlüsselung
 
Zitat:

Zitat von BigT
also ich habe ja das folgende problem:
ich gebe einen string z.B "ababa" ein.
Wenn ich dann auf den Button klicke, soll dieser String mithilfe von dem RC4 Algoirthmus verschlüsselt werden.

Jetzt ist eben meine Frage, wie ich das in die Procedure init, code und done eintragen muss??

Nett wäre, wenn ihr mir sagt was ich wo reinschreiben muss oder es direkt selber abändert...


Vielen Dank im Voraus

Du must im wesentlich das tun, was auskommentiert ist. Bau noch ein Label ein und verwende

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  x: TRC4Context; str1, str2, str3: string;
  i: integer;
begin
  str1:=edit1.text;
  RC4Init(x,'Passwort');
  setlength(str2,Length(str1));
  RC4Code(x, str1[1], str2[1], Length(str1)); // verschlüsseln
  RC4Done(x);
  str3 := '$';
  for i:=1 to length(str2) do begin
    str3 := str3 + inttohex(ord(str2[i]),2)
  end;
  label1.Caption := str3;
  {'ababa' -> $FCE0599566}
end;
Gammatester


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz