AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

hagen reddman dec Umlaute MD5

Ein Thema von Pro_RJ · begonnen am 12. Okt 2012 · letzter Beitrag vom 14. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#1

hagen reddman dec Umlaute MD5

  Alt 12. Okt 2012, 14:59
Delphi-Version: 2006
Hallo,
ich versuche gerade einen MD5 von einem Sting zu erstellen. Leider erhalte ich bei Umlauten (ä,ü,ö) ein falsches Ergebnis.
Ich verwende die DEC von Hagen Reddmann,
bzw. den CRC von Wolfgang Ehrhardt
und ich vergleiche das Ergebnis mit diversen "Online-Md5-Rechnern"
ich verwende dabei folgenden Code,
Delphi-Quellcode:
Var B : Byte;
begin
  B := byte('ö'); // Hier ist B = Decimal 246 ist OK kleines oe
// Label1.Caption := THash_MD5.CalcStream(Str,Str.size,TFormat_HEX);
  Label1.Caption := THash_MD5.CalcBinary('ö',TFormat_HEX);
  // Richtig wäre a172480f4e21d0a124bac19c89569c59 (lt Internet)
  // Berechnet ist 44F2C50B838F92970D2C11E2FA98BC7D
end;
Bei "normalen" Strings ohne Umlaute stimmt das Ergebnis, nur bei umlauten kommt eben ein falsches Ergebnis.
Ich habe bereits getestet :
Das "ö" als String ,
Das "ö" als Decimal 246,
Das "ö" als Hex F6
aber das Ergebnis ist immer das gleiche


Woran kann das liegen bzw. wie kann ich den Fehler beheben?
Ich verwende BDS 2006 und lie Libs von Hagen Reddmann,Wolfgang Ehrhardt
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: hagen reddman dec Umlaute MD5

  Alt 12. Okt 2012, 15:20
aber das Ergebnis ist immer das gleiche
Wenn die Ergebnisse zweier Programmautoren und bei drei verschiedenen Datentypen immer die gleichen sind, was macht Dich dann so sicher, daß sich beide Programmautoren irrten - und dann anscheinend noch mit demselben Fehler? Zwei gegen einen?!

Ansonsten rege ich an, beide anzuschreiben (wenigstens auf diese Diskussion hinzuweisen, vielleicht äußern sie sich ja öffentlich), denn das ist so speziell und beide so eingearbeitet, daß sie die besten "Auskunfteien" dafür sind.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: hagen reddman dec Umlaute MD5

  Alt 12. Okt 2012, 15:21
Versuch mal die UTF8-Variante deines Strings.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: hagen reddman dec Umlaute MD5

  Alt 12. Okt 2012, 16:18
In der grauen Vorzeit (vor UTF8,16....) wurden einem Wert je nach Codepage unterschiedliche Zeichen(Bedeutungen) zugewiesen.
Wenn du Den MD5 mit einem solchen (üöäߧ...) fütterst, kommt je nach verwendeter codepage etwas anderes bei der MD5-Routine an.
Letztendlich werden Wert-ketten und keine Texte verarbeitet.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#5

AW: hagen reddman dec Umlaute MD5

  Alt 12. Okt 2012, 19:01
Danke für die Antworten.
1.
aber das Ergebnis ist immer das gleiche
Wenn die Ergebnisse zweier Programmautoren und bei drei verschiedenen Datentypen immer die gleichen sind, was macht Dich dann so sicher, daß sich beide Programmautoren irrten - und dann anscheinend noch mit demselben Fehler? Zwei gegen einen?!

Ansonsten rege ich an, beide anzuschreiben (wenigstens auf diese Diskussion hinzuweisen, vielleicht äußern sie sich ja öffentlich), denn das ist so speziell und beide so eingearbeitet, daß sie die besten "Auskunfteien" dafür sind.
Das ganze hat einen Hintergrund
Die Daten stammen aus einer Datenübertragung an Amazon ( wo in diversen Artikelbeschreibungen diese umlaute enthalten sind). Hier wird eben dieser MD5 benötigt. Lasse ich den MD5 mit einem beliebigen Online-Rechner berechnen ist der MD5 richtig.Also als Ergebnis kommt genau das raus, was Amazon auch errechnet und auch benötigt. Lasse ich die anfrage aber eben über diese Tools errechnen komme ich auf einen anderen MD5. Nach langem suchen und vergleichen bin ich eben darauf gekommen, das es an den Umlauten liegt. Dann habe ich es speziell auf die Umlaute getestet und bin drauf gekommen, das da eben nicht das erwartet Ergebnis errechnet wird.Daher bin ich mir sicher, das die 2 Tools, das nicht korrekt berechnen.


2. Das mit der Formatierung verstehe ich nicht, die Berechnung vom MD5 ist doch eine eine Bit-weise Verknüpfung? (ich muss gestehen, das ich die eigentliche berechnungslogik noch nicht verstanden habe)
bzw wie soll ich die Formatierung ändern? im BDS2006 ist ein String ja noch KEIN Unicode. Und wenn ich die übergabe als Byte Deklariere also B := $F6 dann ist die darstellung bzw. die Formatierung eigentlich egal. Oder hab ich das nicht richtig verstanden?
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: hagen reddman dec Umlaute MD5

  Alt 13. Okt 2012, 08:00
Daher bin ich mir sicher, das die 2 Tools, das nicht korrekt berechnen.
Das ist eben falsch.

Die richtige Schlußfolgerung ist: Der Input ist unterschiedlich. Ein ö ist eben kein ö.
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#7

AW: hagen reddman dec Umlaute MD5

  Alt 13. Okt 2012, 08:43
Ok aber wie kann ich dann die eingabe berichtigen? so das ein "ö" eben ein "ö" ist also Hex F6 oder Dezimal 246?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#8

AW: hagen reddman dec Umlaute MD5

  Alt 13. Okt 2012, 10:28
Wenn bei dir der String ein AnsiString ist und wenn dein Windows (die aktive CodePage in deinem Programm) die Deutsche ist,
dann "stimmt" bei dir das mit dem "ä" schon.

Die Frage ist dann eher, wie machen die Webseiten das, also was verwenen die für eine Codepage, bzw. welches Encoding nutzen sie.

probier mal AnsiToUtf8
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#9

AW: hagen reddman dec Umlaute MD5

  Alt 13. Okt 2012, 21:37
Danke für die Tips,
ich habe jetzt auch erste Ergebnisse,
Also wenn ich die Strings in UTF8 umwandel ist alles ok,
Danke.
Allerdings funktioniert das leider nicht mit Buffern( also Array of byte) da die länge nicht mehr passt.
oder mache ich bei bei der Umwanddlung einen Fehler?


Delphi-Quellcode:
Var // Str : TMemorystream;
    B : Array of Byte;
    s : RawByteString;
    le : Integer;
begin
// s := UTF8Encode(memo1.lines.text);
  s := AnsiToUtf8(memo1.lines.text);

  le := length(S);
  setlength(B,le);
  move(s,B,le);
// B := byte('ö'); // Hier ist B = Decimal 246 ist OK kleines oe
// Label1.Caption := THash_MD5.CalcStream(Str,Str.size,TFormat_HEX);
  Label1.Caption := THash_MD5.CalcBuffer(b,le ,TFormat_HEX);
// Label1.Caption := THash_MD5.CalcBinary(S,TFormat_HEX);
  // Richtig wäre a172480f4e21d0a124bac19c89569c59 (lt Internet)
  // Berechnet ist 44F2C50B838F92970D2C11E2FA98BC7D
end;
Die Daten die ich per MD5 berechnen möchte stammen aus einem XML-Dokument (TXMLDocument) hier ist in der Formatierung UTF8 angegeben.Wenn das XML-Dokument fertig erzeigt ist wird alles per SaveToStream gespeichert und dieser Stream wird dann in einen Buffer geladen und aus diesem Buffer wid dann der MD5 berechnet.
Müsste ich dann den Stream erst wieder in UTf8 Konvertieren und dann den MD5 berechnen oder geht das nicht auch irgendwie einfacher?

Geändert von Pro_RJ (13. Okt 2012 um 22:04 Uhr) Grund: erweitert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#10

AW: hagen reddman dec Umlaute MD5

  Alt 13. Okt 2012, 23:15
Dein Fehler ist die falsche Verwendung von MOVE.

So wie du es jetzt machst, kopierst du die internen Zeiger der Arrays/String und nicht den Inhalt im String/Array.

Move(S[1], B[0], le);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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