Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   md5.pas bringt anderes Ergebnis als php md5 (https://www.delphipraxis.net/176482-md5-pas-bringt-anderes-ergebnis-als-php-md5.html)

tofse 9. Sep 2013 06:54

md5.pas bringt anderes Ergebnis als php md5
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe verschiedene md5.pas getestet, alle möglichen, die ich im Netz gefunden habe, aber die Funktionen bringen immer ein anderes Ergebnis als die md5 Funktion von php.
Hat da irgendjemand eine Idee?
Delphi-Quellcode:
.....
var
   cryptpass:string;
    i:Integer;
    c:String;
    a,o,n:byte;
begin  
    cryptpass:='';
    for i := 0 to Length(EditPW1.Text)-1 do
    begin
      c:=copy(EditPW1.Text,i+1,1);
      a:=ord(c[1]);
      o:=a-65;
      n:=(177+o+i);
      cryptpass:=cryptpass+chr(n);
    end;
    showmessage(cryptpass+#13+MD5Print(MD5String(cryptpass)));
...
Code:
<?php
$i=$c=$o=$n=$nc="";
$cryptpass="";
$test="123abc";      

for ($i=0;$i<strlen($test);$i++) {
      $c=substr($test,$i,1);
      $a=ord($c);            
      $o=($a-65);
      $n=(177+$o+$i);            
      $nc=chr($n);            
      $cryptpass.=$nc;
}
echo $cryptpass."<br>";
echo md5($cryptpass);
?>
Wie man im Anhang sieht, liegt es wirklich nur am md5 Teil, diese For Schleife davor (die übringens nicht von mir ist, die ich aber verwenden muss) erzeugt sowohl in php als auch in Delphi den gleichen String.

Also, vielleicht hat jemand eine md5.pas, die verwendet werden kann oder liegt es an was anderem?

Danke
Christof

Klaus01 9. Sep 2013 07:18

AW: md5.pas bringt anderes Ergebnis als php md5
 
Hallo,

versuche es mal so...

Delphi-Quellcode:
var
   cryptpass:ansiString;
    i:Integer;
    c:ansiString;
    a,o,n:byte;
Grüße
Klaus

tofse 9. Sep 2013 07:21

AW: md5.pas bringt anderes Ergebnis als php md5
 
Leider nicht, bringt genau das gleiche wie mit "String"

Christof

DeddyH 9. Sep 2013 07:36

AW: md5.pas bringt anderes Ergebnis als php md5
 
Liste der Anhänge anzeigen (Anzahl: 1)
Klappt es mit der Datei im Anhang?

tofse 9. Sep 2013 07:44

AW: md5.pas bringt anderes Ergebnis als php md5
 
JAAAAAAAAAAAAA, super :thumb:

Delphi-Quellcode:
LowerCase(MD5DigestToStr(MD5String(cryptpass)))
Funktioniert !
Vielen Dank

sx2008 9. Sep 2013 09:28

AW: md5.pas bringt anderes Ergebnis als php md5
 
Bei Hashfunktionen sollte man immer eine Selbstest-Funktion mit an Bord haben!
Testvektoren findet man auf Wikipedia.
Also ungefähr so:
Delphi-Quellcode:
procedure MD5Selftest;
begin
  if MD5DigestToStr(MD5String('Franz jagt im komplett verwahrlosten Taxi quer durch Bayern')) <>
    'a3cca2b2aa1e3b5b3b5aad99a8529074' {bitte alles in Goßbuchstaben, bin gerade zu tippfaul} then
    raise Exception.Create('MD5 Selftest failed');
end;

CCRDude 9. Sep 2013 14:34

AW: md5.pas bringt anderes Ergebnis als php md5
 
Zitat:

Zitat von sx2008 (Beitrag 1227690)
{bitte alles in Goßbuchstaben, bin gerade zu tippfaul}

Dafür vergleiche ich Hashes gerne per AnsiCompareText, dann ist das upper/lowercase egal :) (nicht weil ich keine Konventionen bzgl. des cases hätte, sondern weil es spätestens beim Testen anderer Algo-Implementierungen dann doch wieder übersehen wird und zu Fehlersuche führt).

Zacherl 9. Sep 2013 18:07

AW: md5.pas bringt anderes Ergebnis als php md5
 
Hatte letztens ein ähnliches Problem. Eine MD5 Unit, die ich vor Ewigkeiten mal hier im Forum gefunden hatte, hat unter XE4 auf einmal mehr oder weniger zufällige Hashs produziert. Konnte das Problem leider nicht identifizieren, aber vermute, dass es am eingestreuten Assembler Code lag.

Namenloser 10. Sep 2013 03:20

AW: md5.pas bringt anderes Ergebnis als php md5
 
Zitat:

Zitat von sx2008 (Beitrag 1227690)
Bei Hashfunktionen sollte man immer eine Selbstest-Funktion mit an Bord haben!
Testvektoren findet man auf Wikipedia.
Also ungefähr so:
Delphi-Quellcode:
procedure MD5Selftest;
begin
  if MD5DigestToStr(MD5String('Franz jagt im komplett verwahrlosten Taxi quer durch Bayern')) <>
    'a3cca2b2aa1e3b5b3b5aad99a8529074' {bitte alles in Goßbuchstaben, bin gerade zu tippfaul} then
    raise Exception.Create('MD5 Selftest failed');
end;

Für solche Tests sind eigentlich Assertions prädestiniert – das ist schöner als if und raise Exception.

sx2008 10. Sep 2013 06:53

AW: md5.pas bringt anderes Ergebnis als php md5
 
Zitat:

Zitat von NamenLozer (Beitrag 1227792)
Für solche Tests sind eigentlich Assertions prädestiniert – das ist schöner als if und raise Exception.

Kommt drauf an...
Hier habe ich if und raise verwendet, weil ich möchte dass die Prüfung auch in der Releaseversion der Software stattfindet um Manipulationen an sicherheitsrelevanten Funktionen vorzubeugen.
Ansonsten hast du natürlich recht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.
Seite 1 von 2  1 2      

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