AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Streams usw.

Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Streams usw.

Ein Thema von himitsu · begonnen am 23. Mai 2008 · letzter Beitrag vom 19. Feb 2016
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von himitsu
himitsu

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

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream

  Alt 18. Feb 2010, 10:55
Delphi-Quellcode:
Type ThxMD5 = packed Record
  Function Calc(Const Input: AnsiString): ThxMD5; Overload;
  Function Calc(Const Input: WideString): ThxMD5; Overload;
Jupp, standardmäßig sind der Typ String und auch die Stringkonstanten ab Delphi 2009 als UnicodeString definiert,
welches natürlich Aufgrund der anderen binären Entsprechnung auch ein anderes Ergebnis liefert.

Delphi-Quellcode:
A := '123'; // A = AnsiString
S := MD5.Calc(A).asHexString;

S := MD5.Calc(AnsiString('123')).asHexString;
Einfach so den UnicodeString dann intern auf Ansi zu mappen, nur damit es bei so einfachen Dingen keine Probleme gibt, ist leider keine Lösung, da dann ja eventuell Unicodeinformationen verloren gehen und der Hash eines UnicodeStrings dann falsch wäre.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#2

Re: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Stream

  Alt 18. Feb 2010, 11:04
Ich war mal so frei, hier den Wertebereich "umzubrechen". Horizontal scrollen zu müssen ist nicht wirklich schön.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
KFAF

Registriert seit: 5. Mai 2011
12 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Streams usw.

  Alt 4. Jan 2014, 22:20
Ich weiß, der Thread ist tot. Aber falls jemand hierher kommen sollte:

Man kann die Record-Klasse für BigInteger unter Delphi XE3 (wahrscheinlich auch schon ab XE) nur nach geringfügigen Modifikationen nutzen.

1. Operatornamen haben sich geändert :
Code:
ShiftLeft -> LeftShift
ShiftRight -> RightShift
BitwiseNot -> LogicalNot
2. Obwohl jetzt Unicode den Ton angibt, funktionieren die String-basierten Funktionen alle. Einzig die Funktion "_ToString" muss modifiziert werden - das Inkrement kann nichts zuweisen, da die Byte-Umwandlung nur Zeiger aus AnsiChars machen kann.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Streams usw.

  Alt 5. Jan 2014, 23:06
Code:
ShiftLeft -> LeftShift
ShiftRight -> RightShift
Wer ist denn auf diese komische Idee gekommen, das einfach umzubennen?

Code:
BitwiseNot -> LogicalNot
Wobei ich hier noch nie vewrstanden hab, warum es in Delphi binäre und logische Operatoren gibt, da man das in Delphi nicht angeben kann.
(hier wird ja via Typ unterschieden, also bei boolischen Typen wird "normalerweise" logisch gearbeitet und sonst binär)

Also im Prinzip ist es nun falsch, da es sich nicht um einen boolischen Typ handelt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Jan 2014 um 23:08 Uhr)
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
669 Beiträge
 
Delphi 12 Athens
 
#5

AW: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Streams usw.

  Alt 19. Feb 2016, 08:45
Hallo zusammen,

ich muss hier auch noch mal gerade dieses tote Pferdchen reiten.

Ich nutze die MD5-Funktionalität aus der fhash-Unit seit Jahren, um einen Hash für Passwörter zu generieren (vielen Dank an himitsu dafür noch mal). Nun gibt es bestimmte Gründe, warum auch eine 64-Bit-Version meiner Anwendung sinnvoll sein kann (vor allem der Speicherbedarf in wenigen Ausnahmefällen), was sich auch überwiegend problemlos compilieren ließ. Nur an der fhash-Unit scheitert es, weil dort magischer Kram mit Assembler angestellt wird, der so unter 64-Bit nicht mehr geht.

Anweisungen wie
Code:
      ADD    EAX, [ECX * 4 + @@DataX]
führen dann zum Fehler "E2577 Für Assembler-Anweisung ist ein absolutes 32-Bit-Adressen-Fixup erforderlich. Dies ist für 64 Bit ungültig".

Bei Assembler bin ich leider völlig raus. Daher habe ich leider keine Ahnung, wie und ob man überhaupt diese Stellen fixen kann. Hat das schon mal irgendwer gemacht?

Das Problem für mich ist: prinzipiell könnte ich auch auf die Unit IdHashMessageDigest von den Indys und die Klasse TIdHashMessageDigest5 umsteigen, welche unter 32- und 64-Bit problemlos funktionieren. Leider liefert TIdHashMessageDigest5 ein anderes Ergebnis als fhash. Ein bisschen ausprobieren ergab, dass das wahrscheinlich durch die unterschiedlichen String-Typen (ANSI vs. Unicode) kommt (bei Interesse gerne mehr dazu), aber letztlich hilft mir das ja nicht weiter. Nun ist mir ja eigentlich egal, ob der Hash-Wert nun "richtig" oder "falsch" ist, Hauptsache, es ist in meiner Anwendung immer gleich - daher bin ich ein Stück weit an die fhash mit ihrem "falschen" Ergebnis gebunden.

Es wäre auch eine mögliche Alternative, den Kunden, die mein Programm mit einer Benutzerverwaltung mit Passwörtern benutzen (was nur ein kleiner Teil der Anwender insgesamt ist) zu erklären, dass sie ihre Passwörter neu anlegen müssen. Aber dazu müsste ich natürlich wissen, ob sich das lohnt...

Hat also zufällig schon mal jemand den Assembler für 64-Bit fit gemacht oder kennt eine "Faustformel" wie ich das selber machen könnte?

Bis denn
Bommel
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Unnamed-Projekt > BigInt, MD5, RipeMD320, SHA, Streams usw.

  Alt 19. Feb 2016, 08:53
Einfach http://docwiki.embarcadero.com/Libraries/de/System.Hash verwenden
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz