![]() |
Frage zu DEC Hash "Tiger"
Hallo zunächst einmal...
Ein Hobby-Programmierer der hier eher der Silent Reader ist, hat auch mal eine Frage Und nein, ich kann keinen anderen Hash nehmen, da ich für einen Kumpel etwas überprüfe und der hat sich nun mal in seinem Programm für diesen Hash entschieden Folgendes Programmfragment sei angenommen
Delphi-Quellcode:
Nun geht es mir eigentlich genau wie ihm (andere Verschlüsselungsbibliothek und andere Programmiersprache)
var
Tiger: THash_Tiger; aPlain: array[0..63] of byte; sTiger: string; begin Tiger := THash_Tiger.Create; Tiger.Rounds := 5; Tiger.Init; sTiger := Tiger.CalcBuffer(aPlain, 64, TFormat_HEX); end; Der Default Wert der zu absolvierenden Runden ist 3 Lt. DEC ist ein Wert von 3 - 32 möglich Nun ist aber egal welche Anzahl von Runden ich angebe, in diesem Fall 5, es kommt immer dergleiche Hash heraus! Sollte doch eigentlich verschieden sein, kann doch nicht sein, dass mit 5 Runden dasselbe Ergebnis kommt, wie mit 3 Runden? Vlt. sehe ich das auch falsch, habe einen Fehler im Code, oder verstehe das Erstellen eines Hashes nicht? Ich wäre echt dankbar, wenn mir jemand auf die Sprünge helfen könnte |
AW: Frage zu DEC Hash "Tiger"
Nur 3 oder 4 sollte man bei Tiger setzen. Alles andere dürfte keinen Sinn ergeben. (Ich habe kein DEC und kanns gerade nicht nachvollziehen)
![]() |
AW: Frage zu DEC Hash "Tiger"
Danke für die schnelle Antwort...
Ich sehe das zwar auch so (max. 5 Rounds), trotzdem habe ich das Problem etwas nicht zu verstehen, was ich gerne verstehen würde Das Ergebnis von 3 Durchläufen sollte doch ein anderes sein, als das mit 4 Durchläufen? Ansonsten macht die Angabe der Rounds doch keinen Sinn? Bin gerade ein wenig frustriert, ich mag es nicht, wenn ich etwas nicht verstehe Da werde ich sicher noch vor dem Einschlafen lange darüber grübeln Warum geht das nicht, was habe ich falsch gemacht, wieso bin ich so unfähig LOL Dann denkt man schon Profi müsste man sein, aber nee da bin ich lieber Rentner Habe zwar jetzt mein ungefähres Alter verraten, macht aber nix, vlt. gibt es ja so eine Art von Welpenschutz für meinesgleichen |
AW: Frage zu DEC Hash "Tiger"
Den Hash kann man nur über die Größe definieren (128, 160 oder 192)
Ich habe mal mit 3 und 4 durchgängen getestet. (String-Hash) String = "Das ist ein DP Test." <- ohne die "" * 3 = cfded0718598bca5dd9ebde4152bca4c28d24f67762a8816 * 4 = 4b245decc02ff5b447d4197642a8232ad2a92646c6e160a4 Also Unterschiede gibt es. Ps: Das ist ein 192 Ergebnis |
AW: Frage zu DEC Hash "Tiger"
Gut ich kann das in diesem speziellen Fall nicht mit einem String versuchen
Bin leider an ein Array gebunden, um auf der Linie des Kumpels zu bleiben, der in irgendeiner der möglichen Sprachen mit .NET herumhantiert Soll angeblich für ältere Hobbyprogrammierer einfacher sein Ich mag es nicht, ich bin seit der Schule meiner Kinder, bei Delphi geblieben Den Informatik Unterricht hat wohl ein Quereinsteiger gegeben, der halt Fan von Delphi war Nichtdestotrotz kann ich es einmal mit deinem String versuchen... Ich bin mir z. B. nicht sicher, ob Tiger.Rounds := 5; vor Tiger.Init; gehört oder dahinter? Vlt. liegts ja auch an dem alten Delphi 7, welches ich damals von ihnen bekommen hatte, um bei den Schulaufgaben zu helfen? |
AW: Frage zu DEC Hash "Tiger"
Habe es jetzt getestet...
Delphi-Quellcode:
Egal ob ich Tiger.Rounds := 3; oder Tiger.Rounds := 4; setze, das Ergebnis ist bei mir immer
var
Tiger: THash_Tiger; sTiger: string; sDummy: string; begin sDummy := 'Das ist ein DP Test.'; Tiger := THash_Tiger.Create; Tiger.Rounds := 4; Tiger.Init; sTiger := Tiger.CalcBinary(sDummy, TFormat_HEXL); cfded0718598bca5dd9ebde4152bca4c28d24f67762a8816 Bringt mich jetzt also zu der Gretchenfrage: Was mache ich falsch? |
AW: Frage zu DEC Hash "Tiger"
Zitat:
Delphi-Quellcode:
Keine Ahnung, warum Value=0 ist, ist halt OO:( Writeln(Tiger.Rounds) gibt immer den richtigen gesetzten Wert. Aber vielleicht kann jemand mit OO-Erfahrung sofort erkennen, wo daß Problem liegt.
class function TDECHash.CalcBuffer(const Buffer; BufferSize: Integer; Format: TDECFormatClass): Binary;
begin with Create do try Init; Calc(Buffer, BufferSize); Done; Result := DigestStr(Format); finally Free; end; end; procedure THash_Tiger.DoInit; begin SetRounds(FRounds); if FPaddingByte = 0 then FPaddingByte := $01; FDigest[0] := $89ABCDEF; FDigest[1] := $01234567; FDigest[2] := $76543210; FDigest[3] := $FEDCBA98; FDigest[4] := $C3B2E187; FDigest[5] := $F096A5B4; end; procedure THash_Tiger.SetRounds(Value: Integer); begin //Hier is Value=0 und deshalb wird FRounds := 3 gesetzt if (Value < 3) or (Value > 32) then Value := 3; FRounds := Value; end; |
AW: Frage zu DEC Hash "Tiger"
@gammatester
Ja vielen Dank für deine Ausführungen Bin zwar nicht so ganz bewandert mit den Sachen, die man im Debugger sehen kann, werde aber trotzdem versuchen das nachzuvollziehen. Klar wenn da kein Wert steht, wird der Default Wert genommen, also mache ich scheinbar nichts falsch? Schade das der Autor Hagen nicht so oft hier ist, der wüsste sicherlich was da schief läuft. Wenn ich mich recht erinnere, gibt es hier jemand der die Pflege des DEC übernommen hat, sein Nick ist mir gerade nicht geläufig, vlt. kann der ja etwas dazu sagen Jedenfalls toll, dass so einem Hobbymenschen, der nur liest und selten etwas sagt, hier so gut geholfen wird! PS: Ich denke irgendwo sollte ich auch eine 5.1 haben Da muss ich mal suchen und für alle Fälle auch mit dieser Version testen Mag sein, dass da der Unterschied zu finden ist Werde mich dann morgen dazu melden, jetzt bin ich nicht genervt, sondern entnervt, daher will ich nicht mehr die externe Festplatte durchforsten Misserfolge machen irgendwie müde LOL |
AW: Frage zu DEC Hash "Tiger"
Moderator
![]() Wenn ich da was gebastelt habe melde ich mich wieder. Ich pers. bin mehr Fan von DCPcrypt, bietet auch den Tiger an. Ohh gerade erst GTs Beitrag gelesen das da Value genullt wird, mit der Änderung sollte es ja nun klappen, oder? |
AW: Frage zu DEC Hash "Tiger"
Ob das wohl daran liegt, dass
Delphi-Quellcode:
eine
CalcBuffer
Delphi-Quellcode:
ist?
class function
In der wird eine neue Instanz erzeugt und die hat als Wert für
Delphi-Quellcode:
logischerweise 0 (Default-Wert für Integer).
Rounds
Also mich wundert das Verhalten nicht. |
AW: Frage zu DEC Hash "Tiger"
So gerade erst wieder hier gelesen
Also zunächst einmal geht es bei mir weder mit der 5.1 noch mit der 5.2, welche zunächst Verwendung gefunden hatte. Weiterhin geht es ja nicht nur mit CalcBuffer, sondern auch mit CalcBinary nicht. Klar könnte ich versuchen etwas zu basteln, entsprechend Schokohase und: "Wundert mich nicht" Mich hingegen wundert jetzt zunächst, das es bei KodeZwerg funktioniert und bei mir nicht. Wenn es bei einem funktioniert, sollte es doch auch bei allen anderen funktionieren, oder etwas nicht? Ich nehme mal stark an, dass keiner der hier Schreibenden noch mit Delphi 7 werkelt? Vlt. liegts ja daran und ich sollte versuchen eine 30 Tage Testversion eines neueren Delphis zu bekommen und damit mal testen. Zumindest hat bislang niemand moniert, dass mein Code-Schnipsel falsch wäre |
AW: Frage zu DEC Hash "Tiger"
Ich habe die Hash's nicht mit DEC generiert, ich schrieb doch davor das ich DEC nicht installiert habe.
|
AW: Frage zu DEC Hash "Tiger"
Zitat:
Und jetzt? Ok, dann eben ganz offiziell: Dein Code-Schnipsel ist "falsch", bzw. er wird nicht das machen, was du erwartest. Den aktuellen Code-Schnipsel könntest du erheblich verkürzen auf:
Delphi-Quellcode:
Und würde exakt das gleiche machen wie dein jetziger Code.
var
aPlain: array[0..63] of byte; sTiger: string; begin sTiger := THash_Tiger.CalcBuffer(aPlain, 64, TFormat_HEX); end; |
AW: Frage zu DEC Hash "Tiger"
@itsme: Was ich Dir empfehlen würde wäre folgendes, Besuche
![]() ![]() edit Ps: Delphi 7 reicht aus dafür. |
AW: Frage zu DEC Hash "Tiger"
Also ich würde es mal so probieren
Delphi-Quellcode:
PS:
var
Tiger: THash_Tiger; aPlain: array[0..63] of byte; sTiger: string; begin Tiger := THash_Tiger.Create; try Tiger.Rounds := 5; Tiger.Init; Tiger.Calc(aPlain, 64); Tiger.Done; sTiger := Tiger.DigestStr(TFormat_HEX); finally Tiger.Free; end; end; Wenn man sich fragt "Wie kommt der darauf?", na durch einfaches Abschreiben:
Delphi-Quellcode:
class function TDECHash.CalcBuffer(const Buffer; BufferSize: Integer; Format: TDECFormatClass): Binary;
begin with Create do try Init; Calc(Buffer, BufferSize); Done; Result := DigestStr(Format); finally Free; end; end; |
AW: Frage zu DEC Hash "Tiger"
Wie ich bereits sagte, bin kein Profi, nehme daher gerne entsprechende Hinweise an
Aus Fehlern kann man nur lernen, bin daher ja auch dankbar für die Hilfe hier Habe vorher gerade einmal die entsprechenden *.pas in das Projekt kopiert um debuggen zu können Ich bezweifele nicht, dass es so geht wie bereits vorher angegeben, trotzdem kam mir zwischendurch der Gedanke, geht's überhaupt? Das erste was auffiel, eigentlich braucht man kein Init vor CalcBinary, da CalcBinary respektive CalcBuffer es intern aufruft Damit hier niemand glaubt, ich würde selbst nix dafür tun und nur auf Lösungen von euch warten... :pale: Der Ablauf der Aufrufe ist wohl lt. Debugger folgender: CalcBinary => CalcBuffer => Init => DoInit => SetRounds(FRounds) und FRounds ist 0 daher immer 3 Runden So kann es mit meinem Code niemals gehen, ich werde immer bei 0 und 3 Runden landen Was das DCP betrifft, das habe ich auch auf der Platte gefunden, allerdings noch nie benutzt Habe gerade mal in die HTML der Hilfe geschaut, da gibt es doch eigentlich keine Möglichkeit die Anzahl der Runden zu variieren? Scheinbar würde ich auch damit nichts auf die Reihe bekommen... Ich teste jetzt mal und melde mich dann nochmals abschließend |
AW: Frage zu DEC Hash "Tiger"
Ok es funktioniert mit dem Code, den Schokohase gepostet hat, bis auf den Doppeltiger :thumb:
Wieder etwas dazu gelernt! Also vielen Dank an alle, die hier ihr knowhow mit mir geteilt haben. Hoffentlich muss ich wieder so lange nichts fragen, es ist einem schon ein wenig mulmig zu Mute, wenn man sich vorstellt, wie die ganzen Profis die Augen verdrehen. :lol: |
AW: Frage zu DEC Hash "Tiger"
DEC hat derzeit kein offizielles Update ja, aber es gibt einen aktiven Entwicklungszweig und wenn ich mich richtig erinnere ist da das Tiger Rounds Problem schon behoben.
Grüße TurboMagic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 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 by Thomas Breitkreuz