Archiv verlassen und diese Seite im Standarddesign anzeigen : passwort verschlüsseln
darkskies2k
04.02.2001, 12:53
ich muss ein passwort in die registry schreiben, dass zu wichtig ist als dass es da im klartext drinsteht. welchen algorithmus verwend ich da am besten zum verschlüsseln. hätte vielleicht jemand ein beispiel für mich?
darkskies
Du kannst so ziemlich jeden Algorythmus den es gibt verwenden solange du meinst, dass er gut genug ist. Auf jeden fall empfehle ich dir mit XOR zu arbeiten. Ich habe daheim zwei selbstgeschriebene Verschluesselungsfunktionen (einmal XOR und ROT13, nicht weltbewegendes, aber es reicht fuer meine Zwecke ;)) die ich so schnell wie moeglich versuchen werde zu posten (wie immer nur im Stress :D).
nEKTON
Salute,
das dürfte reichen...
////////////////////////////////////////////////////////////////////////////
// Verschlüsselt einen String
var
s: string[255];
c: array[0..255] of Byte absolute s;
i: Integer;
begin
s := 'TEST';
for i := 1 to ord(s[0]) do c[i] := 23 xor c[i];
Result := s;
end;
////////////////////////////////////////////////////////////////////////////
// Entschlüsselt einen String
var
s: string[255];
c: array[0..255] of Byte absolute s;
i: Integer;
begin
s := Verschlüsselter TEXT;
for i := 1 to Length(s) do s[I] := (chr(23 xor ord(s[i])));
Result := s;
end;
WEBSTER
Salute,
der xor (s.o.) Verschlüsselung ist vielleicht noch zu beeachten, daß die 7 ein BLANK ist.......
WEBSTER
servus,
machs dir ganz einfach und verschluessele nur in dem sinne, dass du jeden character um ein byte erhoehst!
for i := 1 to length( s ) do
s[i] := chr( ord( s[i] ) + 1 );
so sieht es aus wie eine sinnlos kombination von buchstaben ...
oder schau mal auf meiner seite vorbei, da gibts eine crypter ...
www.rUbEUz.de.vu (http://www.rUbEUz.de.vu)
____________
`` rUbEUz ´´
Großmeister
13.02.2001, 15:57
Das ist wie schon gesagt alles eine Frage des Zwecks: Wenn du'n Passwort bei dir speichern willst und es wichtig ist, dann würde ich schon ein gutes Verfahren nehmen. Wenn du aber z.B. für'n Trojaner brauchst un der User keine Ahnung hat, dann kannst du ja ruhig was einfachen nehmen. Der Source vom Webmaster scheint aber ganz gut zu sein.
Großmeister
dschungelratte
23.01.2002, 22:10
Moin !
Ich hab da noch eine Frage zum Source von WEBSTER und zwar könntet ihr mir diese Zeile etwas näherbringen :
for i := 1 to ord(s[0]) do c[i] := 23 xor c[i];
.. bin hier gerade etwas ins grübeln gekommen *schäm*
danke.
spectrumizer
23.01.2002, 23:39
... ord(s[0]) bestimmt die Länge des Strings, ähnlich wie Length(s) ... halt nur ne kürzere Schreibweise *g* ... in s[0] wird die Länge des Strings gespeichert ... pos. 1 wäre dann das 1. Zeichen im String, pos. 2 das 2. usw... ;)
c[i] := 23 xor c[i] ... dabei wird die Zahl 23 bitweise durch ein logisches OR mit dem Wert aus c[i] "vertauscht" ...
z.B.
11011010 = 218
xor
10101001 = 169
=
01110011 = 115
Ich hoffe, des stümmt jetz *g* :D
Wobei ich bedenken hab, dass der Code richtig funzt ... weil, Delphi dürfte meckern, wg. Typumwanldung ... weil Byte mit Char nich zu xor'n gehen dürfte ... c[i] := Chr(23 xor Byte(c[i])) ... wäre wohl korrekter, wenn meine Annahme stümmt :)
ord(s[0]) bestimmt die Länge des Strings, ähnlich wie Length(s)
ord macht nix dergleichen, sondern gibt den dezimalen wert von 'nem char zurück...
stimmt, aber in string[0] wir die länge eines strings als Bytewert (also char) gespeichert...
aber ich glaube nicht, dass das in den "heutigen" Delphi-Versionen noch funktioniert, da hier die Strings > 255 Zeichen sein können...
*g*
/me lässt langsam nach, wenig geproggt in letzter Zeit...:(
aber die "reinen" pascal strings gehen noch immer...;)
ja aber die mus man per "shortstring" oder "string[255]" deklarieren, bei strings ist das nullte element nicht verfügbar.
dafür giebs da referenzzähler undso wenn man weis wie :)
spectrumizer:
... dabei wird die Zahl 23 bitweise durch ein logisches OR mit dem Wert aus c[i] "vertauscht
XOR ist aber ein exklusives Oder und kein "all inclusive".
Das Problem mit den Typen, würde ich so lösen:
procedure TForm1.Button1Click(Sender: TObject);
Var s: string[255];
c: array[0..255] of byte absolute s;
z: byte;
begin
s := Edit1.Text;
For z := 1 to c[0] do c[z] := 23 xor c[z];
Edit1.Text := s;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.MaxLength := 255;
end;
Naja, und das man jedes Zeichen mit dem selben Wert verknüpft ist wegen der Wahrscheinlichkeitsblabla auch nicht so doll.
spectrumizer
27.01.2002, 12:16
zitat:
--------------------------------------------------------------------------------
spectrumizer:
... dabei wird die Zahl 23 bitweise durch ein logisches OR mit dem Wert aus c[i] "vertauscht
--------------------------------------------------------------------------------
XOR ist aber ein exklusives Oder und kein "all inclusive".
Oh ... yo, stümmt ... XOR war ja X-klusiv *g*
Wenn das system das PW nicht wieder augeben sondern nur Validieren soll würde ich nen Hash vorschlagen.
MD5 ist zwar am besten, aber es reichen ja auch simplerre methoden.
z.B.: mal kurz was erfinden ... fertig nen 32bit Hash:
var
astr : string;
i : integer;
x : DWORD;
begin
aStr := Edit1.Text
x := 0x1234;
for i:=1 to Length(aStr) do
x := x xor ( Ord(aStr(i) shl ( ( (x+i)*7) mod 24) );
Edit1.Text := IntToHex( x , 8 );
end;
(ist nicht getestet, also ausm kopf aber müste gehen)