Delphi-PRAXiS

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.

Furtbichler 10. Sep 2013 07:46

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

Zitat von sx2008 (Beitrag 1227797)
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.

Man lernt nie aus.:thumb:

sh17 10. Sep 2013 07:48

AW: md5.pas bringt anderes Ergebnis als php md5
 
"Sicher" ist MD5 aber nicht mehr

CCRDude 10. Sep 2013 08:33

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

Zitat von sh17 (Beitrag 1227802)
"Sicher" ist MD5 aber nicht mehr

Das kommt auf den Anwendungszweck an - und wen ich den Anwendungszweck hier zu erraten versuche (Passwort-Hash?), wäre ein Hinweis auf die Nutzung von Salts angebrachter (und daher hiermit genannt) - denn dank Rainbow Tables wäre hier auch ein SHA-2 nicht wesentlich "sicherer" als MD5.

BUG 11. Sep 2013 10:05

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

Zitat von CCRDude (Beitrag 1227806)
Nutzung von Salts angebrachter (und daher hiermit genannt) - denn dank Rainbow Tables wäre hier auch ein SHA-2 nicht wesentlich "sicherer" als MD5.

Auch wenn wir etwas vom Thema abkommen: Klassische Hashfunktionen ermöglichen Brute-Force-Angriffe, da sie zu effizient sind; deshalb wird meist zu Algorithmen wie bcrypt oder PBKDF2 geraten.

Zacherl 11. Sep 2013 10:53

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

Zitat von BUG (Beitrag 1227920)
Zitat:

Zitat von CCRDude (Beitrag 1227806)
Nutzung von Salts angebrachter (und daher hiermit genannt) - denn dank Rainbow Tables wäre hier auch ein SHA-2 nicht wesentlich "sicherer" als MD5.

Auch wenn wir etwas vom Thema abkommen: Klassische Hashfunktionen ermöglichen Brute-Force-Angriffe, da sie zu effizient sind; deshalb wird meist zu Algorithmen wie bcrypt oder PBKDF2 geraten.

Wobei die Effizienz des eigentlichen Hash Verfahrens hier sicherlich nicht das Hauptproblem ist, sondern eher die Tatsache, dass für MD5 sehr effiziente Algorithmen existieren, mit denen man innerhalb von recht kurzer Zeit Kollisionen berechnen kann. Aber auch hier kommt es natürlich immer auf den Anwendungszweck an. Wenn MD5 als Dateisignatur verwendet wird, könnte man mit Kollisionen Unfug betreiben und unbemerkt Daten manipulieren. Wird der Algorithmus zum "sicheren" Speichern von Passwörtern verwendet, bringen einem natürlich auch die Kollisionen nichts.

Aber gut ... ich glaube die eigentliche Frage wurde ja geklärt :D

BUG 11. Sep 2013 11:16

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

Zitat von Zacherl (Beitrag 1227925)
Wobei die Effizienz des eigentlichen Hash Verfahrens hier sicherlich nicht das Hauptproblem ist, sondern eher die Tatsache, dass für MD5 sehr effiziente Algorithmen existieren, mit denen man innerhalb von recht kurzer Zeit Kollisionen berechnen kann.

Ich bezog mich auf das Hashen der Passworte; dort will man ja verhindern, das jemand das originale Passwort wiederherstellt.
Bei Dictionary- und Brute-Force-Attacken spielt der Ressourcenverbrauch eine große Rolle, Kollisionen sollten dabei nicht unbedingt nützlich sein :mrgreen:

Es gibt auch einen Heise Security Artikel zu dem Thema.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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