Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi sha1 verschlüsslung und jedi ? (https://www.delphipraxis.net/83635-sha1-verschluesslung-und-jedi.html)

agm65 5. Jan 2007 09:47


sha1 verschlüsslung und jedi ?
 
guten morgen leute, ich bin auf der suche nach einer sha1 verschlüsslung ...hat jedi so einen befehl dabei ?

danke für hilfe...sollte doch nur eine funktion sein oder nicht ?

bzw kann mir einer sagen , was ich oben bei den uses statt tools nehmen muss ?
SHA1

Corpsman 5. Jan 2007 09:55

Re: sha1 verschlüsslung und jedi ?
 
hättest du Links gelesen da steht dein
Tools
das must nur auch laden.

agm65 5. Jan 2007 09:56

Re: sha1 verschlüsslung und jedi ?
 
lol, okay..danke

agm65 5. Jan 2007 10:02

Re: sha1 verschlüsslung und jedi ?
 
weiss jetzt jemand noch, wie ich einen normalen string in dieses sha1 format bekomme ? also den aufruf ?

mkinzler 5. Jan 2007 10:25

Re: sha1 verschlüsslung und jedi ?
 
Schau dir mal SHA1SelfTest an.
BTW. SHA ist keine Verschlüsselungs- sondern ein Hashverfahren.

agm65 5. Jan 2007 10:27

Re: sha1 verschlüsslung und jedi ?
 
kannst du mir schnell den unterschied erklären ..die von drüben (die phpler) haben nur gesagt das muss sha1 verschlüsselt sein und ich versteh hier überhaupt nichts...

mkinzler 5. Jan 2007 11:21

Re: sha1 verschlüsslung und jedi ?
 
Ein Hash ist ein Einwegverfahren, d.h. nicht eineindeutig und deshalb nicht umkehrbar.

agm65 5. Jan 2007 11:28

Re: sha1 verschlüsslung und jedi ?
 
achso, also wie zB md5 ? hey ich hock hier die ganze zeit dran , ich krieg es nicht hin einen einfachen string in dieses sha1 umzuwandeln ...kannste mir da nochmal helfen ?

faux 5. Jan 2007 11:32

Re: sha1 verschlüsslung und jedi ?
 
Ja, MD5 ist auch ein Hashverfahren. SHA-1, MD5, Whirlpool, RIPEMD-160, etc. das sind alles Hashverfahren.

Zitat:

Zitat von agm65
sollte doch nur eine funktion sein oder nicht ?

Nein. Ich kenne deine Library nicht, aber bei den meisten Libraries musst du vorher die Klasse initialisieren, etc. So einfach wie bei PHP ist das leider selten.

Grüße
Faux

mkinzler 5. Jan 2007 11:39

Re: sha1 verschlüsslung und jedi ?
 
Zitat:

achso, also wie zB md5 ?
Ja MD5 ist auch ein Hashverfahren
Icj kenne die Funktion nicht, habe aber nur gesehen, daß die Testfunktion den String 'abc' hasht. Nachher müßte der Hash im Context stehen.

Weitere Libraries:
http://www.michael-puff.de/Developer...agen_Reddmann/
http://sourceforge.net/projects/tplockbox/
http://torry.net/pages.php?id=312
http://torry.net/pages.php?id=519

negaH 5. Jan 2007 11:44

Re: sha1 verschlüsslung und jedi ?
 
Zitat:

musst du vorher die Klasse initialisieren
korrekt bei den meisten Libs ist das so, versuche mal mit DEC (vorheriges Post 1. Link)

Delphi-Quellcode:
Result_String_as_HEX := THash_SHA1.CalcBinary(Dein_String_hier, TFormat_HEX);
Eine Zeile genügt dann.

Gruß Hagen

agm65 5. Jan 2007 12:21

Re: sha1 verschlüsslung und jedi ?
 
dachte ich könnte diese function irgendwie umschreiben , so dass ich diesen hash string bekomme ?
Delphi-Quellcode:
function SHA1SelfTest2(s:String): string;
const
  //s: string= 'abc';
  OutDigest: TSHA1Digest=
    ($a9,$99,$3e,$36,$47,$06,$81,$6a,$ba,$3e,$25,$71,$78,$50,$c2,$6c,$9c,$d0,$d8,$9d);
var
  Context: TSHA1Context;
  Digest: TSHA1Digest;
begin
  SHA1Init(Context);
  SHA1Update(Context,@s[1],length(s));
  SHA1Final(Context,Digest);
  if CompareMem(@Digest,@OutDigest,Sizeof(Digest)) then
    //Result:= true ;

  else
    //Result:= false;
end;
aber ich bekomme nichts zurück

faux 5. Jan 2007 12:25

Re: sha1 verschlüsslung und jedi ?
 
Zitat:

Zitat von agm65
aber ich bekomme nichts zurück

Könnte damit zusammenhängen, dass du nichts zurückgibst. :mrgreen:
Du weist der Variable Result nichts zu. ;)

Grüße
Faux

agm65 5. Jan 2007 12:28

Re: sha1 verschlüsslung und jedi ?
 
;) ja du hast recht :) ..aber was muss ich da zurück geben ? ich steh grade echt aufm schlauch ...1000 dank

faux 5. Jan 2007 12:31

Re: sha1 verschlüsslung und jedi ?
 
Ich bin mir nicht sicher, aber ich tippe mal, dass du Digest irgendwie zurückgeben musst (mit irgendwie meine ich, dass du es als String zurückgeben müsstest). Die Konstante OutDigest brauchst du imho auch nicht, da diese nur dazu da ist, um den Vergleich in Zeile 13 durchzuführen (welchen du auch nicht brauchst).

Grüße
Faux

agm65 5. Jan 2007 12:32

Re: sha1 verschlüsslung und jedi ?
 
hmm ..damn ...okay ich versuch nochmal weiter danke dir

agm65 5. Jan 2007 12:57

Re: sha1 verschlüsslung und jedi ?
 
hey ich dreh gleich ab mit dem zeugs ich krieg das einfach nicht hin
erbitte hilfe

faux 5. Jan 2007 13:15

Re: sha1 verschlüsslung und jedi ?
 
Zitat:

Zitat von agm65
erbitte hilfe

Nunja, da diese Komponente anscheinend niemand so wirklich in und auswendig kennt, wäre es hilfreich, wenn du z. B. die Deklaration der Klasse TSHA1Digest lieferst. ;)

agm65 5. Jan 2007 13:19

Re: sha1 verschlüsslung und jedi ?
 
ich poste mal die ganze unit. 1000 dank für deine hilfe

Delphi-Quellcode:
unit SHA1;

interface
uses
  Sysutils, Tools;

type
  TSHA1Digest= array[0..19] of byte;
  TSHA1Context= record
    Hash: array[0..4] of DWord;
    Hi, Lo: integer;
    Buffer: array[0..63] of byte;
    Index: integer;
  end;

function SHA1SelfTest: boolean;
procedure SHA1Init(var Context: TSHA1Context);
procedure SHA1Update(var Context: TSHA1Context; Buffer: pointer; Len: integer);
procedure SHA1Final(var Context: TSHA1Context; var Digest: TSHA1Digest);

//******************************************************************************
implementation
{$R-}

function SHA1SelfTest: boolean;
const
  s: string= 'abc';
  OutDigest: TSHA1Digest=
    ($a9,$99,$3e,$36,$47,$06,$81,$6a,$ba,$3e,$25,$71,$78,$50,$c2,$6c,$9c,$d0,$d8,$9d);
var
  Context: TSHA1Context;
  Digest: TSHA1Digest;
begin
  SHA1Init(Context);
  SHA1Update(Context,@s[1],length(s));
  SHA1Final(Context,Digest);
  if CompareMem(@Digest,@OutDigest,Sizeof(Digest)) then
    Result:= true
  else
    Result:= false;
end;

//******************************************************************************
function F1(x, y, z: DWord): DWord;
begin
  Result:= z xor (x and (y xor z));
end;
function F2(x, y, z: DWord): DWord;
begin
  Result:= x xor y xor z;
end;
function F3(x, y, z: DWord): DWord;
begin
  Result:= (x and y) or (z and (x or y));
end;

//******************************************************************************
function RB(A: DWord): DWord;
begin
  Result:= (A shr 24) or ((A shr 8) and $FF00) or ((A shl 8) and $FF0000) or (A shl 24);
end;

procedure SHA1Compress(var Data: TSHA1Context);
var
  A, B, C, D, E, T: DWord;
  W: array[0..79] of DWord;
  i: integer;
begin
  Move(Data.Buffer,W,Sizeof(Data.Buffer));
  for i:= 0 to 15 do
    W[i]:= RB(W[i]);
  for i:= 16 to 79 do
    W[i]:= LRot32(W[i-3] xor W[i-8] xor W[i-14] xor W[i-16],1);
  A:= Data.Hash[0]; B:= Data.Hash[1]; C:= Data.Hash[2]; D:= Data.Hash[3]; E:= Data.Hash[4];
  for i:= 0 to 19 do
  begin
    T:= LRot32(A,5) + F1(B,C,D) + E + W[i] + $5A827999;
    E:= D; D:= C; C:= LRot32(B,30); B:= A; A:= T;
  end;
  for i:= 20 to 39 do
  begin
    T:= LRot32(A,5) + F2(B,C,D) + E + W[i] + $6ED9EBA1;
    E:= D; D:= C; C:= LRot32(B,30); B:= A; A:= T;
  end;
  for i:= 40 to 59 do
  begin
    T:= LRot32(A,5) + F3(B,C,D) + E + W[i] + $8F1BBCDC;
    E:= D; D:= C; C:= LRot32(B,30); B:= A; A:= T;
  end;
  for i:= 60 to 79 do
  begin
    T:= LRot32(A,5) + F2(B,C,D) + E + W[i] + $CA62C1D6;
    E:= D; D:= C; C:= LRot32(B,30); B:= A; A:= T;
  end;
  Data.Hash[0]:= Data.Hash[0] + A;
  Data.Hash[1]:= Data.Hash[1] + B;
  Data.Hash[2]:= Data.Hash[2] + C;
  Data.Hash[3]:= Data.Hash[3] + D;
  Data.Hash[4]:= Data.Hash[4] + E;
  FillChar(W,Sizeof(W),0);
  FillChar(Data.Buffer,Sizeof(Data.Buffer),0);
end;

//******************************************************************************
procedure SHA1Init(var Context: TSHA1Context);
begin
  Context.Hi:= 0; Context.Lo:= 0;
  Context.Index:= 0;
  FillChar(Context.Buffer,Sizeof(Context.Buffer),0);
  Context.Hash[0]:= $67452301;
  Context.Hash[1]:= $EFCDAB89;
  Context.Hash[2]:= $98BADCFE;
  Context.Hash[3]:= $10325476;
  Context.Hash[4]:= $C3D2E1F0;
end;

//******************************************************************************
procedure SHA1UpdateLen(var Context: TSHA1Context; Len: integer);
var
  i, k: integer;
begin
  for k:= 0 to 7 do
  begin
    i:= Context.Lo;
    Inc(Context.Lo,Len);
    if Context.Lo< i then
      Inc(Context.Hi);
  end;
end;

//******************************************************************************
procedure SHA1Update(var Context: TSHA1Context; Buffer: pointer; Len: integer);
type
  PByte= ^Byte;
begin
  SHA1UpdateLen(Context,Len);
  while Len> 0 do
  begin
    Context.Buffer[Context.Index]:= PByte(Buffer)^;
    Inc(PByte(Buffer));
    Inc(Context.Index);
    Dec(Len);
    if Context.Index= 64 then
    begin
      Context.Index:= 0;
      SHA1Compress(Context);
    end;
  end;
end;

//******************************************************************************
procedure SHA1Final(var Context: TSHA1Context; var Digest: TSHA1Digest);
type
  PDWord= ^DWord;
begin
  Context.Buffer[Context.Index]:= $80;
  if Context.Index>= 56 then
    SHA1Compress(Context);
  PDWord(@Context.Buffer[56])^:= RB(Context.Hi);
  PDWord(@Context.Buffer[60])^:= RB(Context.Lo);
  SHA1Compress(Context);
  Context.Hash[0]:= RB(Context.Hash[0]);
  Context.Hash[1]:= RB(Context.Hash[1]);
  Context.Hash[2]:= RB(Context.Hash[2]);
  Context.Hash[3]:= RB(Context.Hash[3]);
  Context.Hash[4]:= RB(Context.Hash[4]);
  Move(Context.Hash,Digest,Sizeof(Digest));
  FillChar(Context,Sizeof(Context),0);
end;


end.

Klaus01 5. Jan 2007 13:55

Re: sha1 verschlüsslung und jedi ?
 
Hallo Peter,

musst Du die Jedis einsetzen?
Hier eine Alternative: http://www.koders.com/delphi/fid872E...AE.aspx?s=sha1

Grüße
Klaus

agm65 5. Jan 2007 13:57

Re: sha1 verschlüsslung und jedi ?
 
lol, klaus..ich benutze die jedis nicht..-.ich will genau das benutzen wie du an der unit die ich gepostet habe siehst..
aber jetzt hab ich halt das problem das ich keinen string in diesen hash kriege...

Klaus01 5. Jan 2007 14:11

Re: sha1 verschlüsslung und jedi ?
 
Sollte in etwas so gehen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  context: TSha1Context;
   Digest: TSHA1Digest;
   i:byte;
begin
  edit2.text:='';
  sha1init(context);
  sha1Update(context,@edit1.text[1],length(edit1.Text));
  sha1Final(context,digest);

  // HexAusgabe:
  for i:=low(digest) to high(digest) do
    edit2.Text:=edit2.Text+IntToHex(digest[i],2);
end;
Grüße
Klaus

agm65 5. Jan 2007 14:16

Re: sha1 verschlüsslung und jedi ?
 
sieht nicht schlecht aus werde ich mal abgleichen lassen !!! danke dir !
klaus, du bist der beste das geht 1a, noch nen lowercase davor und es ist mit den phpler kompatibel ! danke dir :)!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.

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