![]() |
Delphi-Version: 7
hagen reddman dec
hallo hagen es geht um deine compnente dec wenn ich diesen code verwende
Delphi-Quellcode:
bekomme ich einen error an follgender stelle in meinem quellcode
function md4(s:string):string ;
begin s:=THash_MD5.Create.DigestStr(nil); result:=s; end;
Delphi-Quellcode:
Zu meiner frage wie muss ich es anpssen das ich deinen code wie diesen hier benutzen kann
result := GetMD5(IntToHex(x,0));
Delphi-Quellcode:
Da es bei dir diese function nicht gibt.
result := MD5DigestToStr(MD5String(s));//erstellt einen md5hash
|
AW: hagen reddman dec
MD4 oder MD5 ... was nun?
Wieso wird der Parameter "s" nicht genutzt? Wann gibst dudas mit
Delphi-Quellcode:
erstellte Objekt wieder frei?
THash_MD5.Create
Di übergist DigestStr ein nil und wunderst dich dann, daß es eventuell knallt? |
AW: hagen reddman dec
Es soll md5 sein die function heisst nur md4(testzwecke).
Selbst wenn ich es freigebe:
Delphi-Quellcode:
Der md5 string soll ja für diese functionen sein;
t:THash_MD5;
begin t:=THash_MD5.Create; t.init; Result:=t.DigestStr(TFormat_MIME64); t.done; end;
Delphi-Quellcode:
Wie gesagt das hier geht bei dec ja nicht.
function GetUser: string; // Function to get UserName
var // Declaring our variables StrUserName: PChar; // PointerChar Size: DWord; // DWORD integer Begin // Begin Size:=250; // Set size to 250 (max UN length) GetMem(StrUserName, Size); // Allocate some memory GetUserName(StrUserName, Size); // API to get UN result := StrPas(StrUserName); // Return the UN FreeMem(StrUserName); // Free up the allocated memory end; Procedure RSADecrypt(CT : String; D : String; N : String; var PT : String); Var c,d1,n1,p : TFGInt; Begin ConvertHexStringToBase256String(CT,CT); Base256StringToFGInt(CT,c); ConvertHexStringToBase256String(D,D); Base256StringToFGInt(D,d1); ConvertHexStringToBase256String(N,N); Base256StringToFGInt(N,n1); FGIntModExp(c,d1,n1,p); // C ^ D mod N FGIntToBase256String(P,PT); ConvertBase256StringToHexString(PT,PT); FGIntDestroy(c); // Destroy FGInt (important!) FGIntDestroy(d1); // Destroy FGInt (important!) FGIntDestroy(n1); // Destroy FGInt (important!) FGIntDestroy(p); // Destroy FGInt (important!) End; end; function HexToInt(s : string) : Int64; // Convert HEX to Int64 integers begin // Begin if (s <> '') and (s[1] <> '$') then // If s != ‘’ and s[1] is not $ then result := strToInt64('$' + s ) // Convert ‘$’+s to Int64 ($ = HEX) else // Else result := strToInt64(s); // Convert s to Int64 end; end; function Part1(s: string): string; // Part 1 var // Declaring variables i, x : integer; // Counter and Holder as integers begin // Begin x := 0; // Initialize x as 0 for i := 1 to length(s) do // For 1 to 32 do begin // Begin x := x + HexToInt(s[i]); // hier knallt es wenn ich oben den code verwende end; // End result := new_md5(IntToHex(x,0)); // Get the MD5 of x end; function Part2(s: string): string; // Part 2 var // Declaring Variables i, j, x : integer; // 2 Counters and a holder as integers begin // Begin i := 1; // Initialize i as 1 j := 2; // Initialize j as 2 x := 0; // Initialize x as 0 while i <= length(s) do // If i <= 32, then execute loop begin // Begin x := x + HexToInt(s[i] + s[j]); // Pair inc(i,2); // Increment counter inc(j,2); // Increment counter end; // End result := new_md5(IntToHex(x,0)); // Get the MD5 of x oder hier end; function Part3(s: string): string; // Part 3 var // Declaring variables arr : array [1..8] of string; // Array [1..8] of strings i, x : integer; // Counter and Holder as integers begin // Begin arr[1] := s[01] + s[02] + s[03] + s[04]; // I got a little lazy here... arr[2] := s[05] + s[06] + s[07] + s[08]; // Manually splitting the MD5 into arr[3] := s[09] + s[10] + s[11] + s[12]; // Groups of 4... made possible by arr[4] := s[13] + s[14] + s[15] + s[16]; // The creators of Copy/Paste ƒº arr[5] := s[17] + s[18] + s[19] + s[20]; // Still going... arr[6] := s[21] + s[22] + s[23] + s[24]; // And going... arr[7] := s[25] + s[26] + s[27] + s[28]; // Almost... arr[8] := s[29] + s[30] + s[31] + s[32]; // Finally! x := 0; // Initialize x as 0 for i := 1 to 8 do // 1 to length of the array do loop begin // Begin x := x + HexToInt(arr[i]); // Groups of 4 end; // End result := new_md5(IntToHex(x,0)); // Get the MD5 of x end; function Part4(s: string): string; // Part 4 var // Refer to Part 3 for more info... arr : array [1..4] of string; i, x : integer; begin arr[1] := s[01] + s[02] + s[03] + s[04] + s[05] + s[06] + S[07] + s[08]; arr[2] := s[09] + s[10] + s[11] + s[12] + s[13] + s[14] + s[15] + s[16]; arr[3] := s[17] + s[18] + s[19] + s[20] + s[21] + s[22] + s[23] + s[24]; arr[4] := s[25] + s[26] + s[27] + s[28] + s[29] + s[30] + s[31] + s[32]; x := 0; for i := 1 to 4 do begin x := x + HexToInt(arr[i]); end; result := new_md5(IntToHex(x,0)); end; function Part5(s: string): string; // Part 5 var // Refer to Part 3 for more info... arr : array [1..4] of string; x : int64; i : integer; begin x := 0; arr[1] := s[01] + s[02] + s[03] + s[04] + s[05] + s[06] + s[07] + s[08] + s[09] + s[10] + s[11] + s[12] + s[13] + s[14] + s[15] + s[16]; arr[2] := s[17] + s[18] + s[19] + s[20] + s[21] + s[22] + s[23] + s[24] + s[25] + s[26] + s[27] + s[28] + s[29] + s[30] + s[31] + s[32]; for i := 1 to 2 do begin x := x + HexToInt(arr[i]); end; result := new_md5(IntToHex(x,0)); end; procedure TForm1.btn1Click(Sender: TObject); Var // Declaring variables A,b: string; // Strings ‘a’ and ‘b’ (b = serial) begin // Begin a := Part1(new_md5(GetUser)); //Part 1 a := Part2(a); // Part 2 a := Part3(a); // Part 3 a := Part4(a); // Part 4 a := Part5(a); // Part 5 { RSA Decrypt the final MD5 hash (result goes in ‘b’): } RSADecrypt(a,'3E6CBE18ABF0172741C8A583CA54402D', 'D679E4D420CF78D335DC9AD165F9D819',b); edt1.text := b; // Print out serial end; // End end; //function GetMD5(s: string): string; // Gets MD5 hash for what’s sent begin // //Begin //result := MD5DigestToStr(MD5String(s)); // Calculate MD5 hash hier wird s genutzt //end; |
AW: hagen reddman dec
Du mußt doch wohl auch angeben, von was der Hash berechnet werden soll. Diese Zeilen
Delphi-Quellcode:
liefern zB die richtigen Werte für den Ansistring 'abc':
t := THash_MD5.Create;
t.init; writeln(t.calcbinary('abc', TFormat_Hex)); writeln(t.calcbinary('abc', TFormat_MIME64));
Code:
Hex: 900150983CD24FB0D6963F7D28E17F72
Mime64: kAFQmDzST7DWlj99KOF/cg== |
AW: hagen reddman dec
Zitat:
Delphi-Quellcode:
begin
LokaleVariable := TEineKlasse.Create; try // Tue etwas mit LokaleVariable ... finally LokaleVariable.Free; end; end; |
AW: hagen reddman dec
Einen dermaßenen Kommentar-Overkill habe ich noch nie gesehen. :shock:
Delphi-Quellcode:
:wall:
Begin // Begin
i := 0; // Initialize i as 0 inc(i); // Increment i Ein gutes Programm kommt ganz ohne Kommentare aus |
AW: hagen reddman dec
Ich wollte das noch nicht ansprechen. (PS: selbst Begin kann man kommentieren? :shock: )
Aber mal im Ernst, ist dir aufgefallen, daß sich dadrin auch ein wichtiger Kommentar versteckt, welcher für uns Helfer bestimmt ist? Ganz ohne nicht, aber nur das Wichtige, welches man wirklich nicht so einfach verstehen kann. |
AW: hagen reddman dec
Deswegen wollte ich die md5 unit von dec verwenden.
Hier wird der md5 string ja generiert aber diese function geht bei mir nicht da die md5.pas einen fehler anzeigt.
Delphi-Quellcode:
Und in hex wird der md5 ja hier umgewandelt :
//function GetMD5(s: string): string;
//Begin //result := MD5DigestToStr(MD5String(s)); //stammt aus der md5.pas die ich hier gefunden habe //end;
Delphi-Quellcode:
Hier wird doch der benutzer name in hex umgewandelt:
result := new_md5(IntToHex(x,0));
Delphi-Quellcode:
Allso kann man keinen normalen md5 string generiren mit dieser unit?
Part1(new_md5(GetUser));
@gammatester teste doch einfach mal die getmd5 function und du siehst was rauskommt. Der md5 string soll ja für die anderen sachen erstellt werden nicht für 'abc' sondern einen md5 string für den MD5 Hash the UserName |
AW: hagen reddman dec
Zitat:
|
AW: hagen reddman dec
Liste der Anhänge anzeigen (Anzahl: 1)
Ok hier an diese stelle
Delphi-Quellcode:
zeigt ihr mir diesen error an [Error] md5.pas(407): Incompatible types: 'Array' and 'TByteArray'
MD5Update(Context, @Buffer, ReadBytes);
hier ist die md.pas die ich verwende. Da ich nichts an der md5.pas geändert habe verstehe ich bei diesem error nur bahnhof. |
AW: hagen reddman dec
Zitat:
Was immer es ist, auf jeden Fall nicht der MD5-Hash von 'abc'? Und schon gar nicht berechnet mit einer Deiner Code-Schnipsel. Außerdem: Durch Zahlen zählen erhält man klein MD5 Hash. Außerdem: Wieso wird neuerdings für RSA eine MD5 benötigt? Im übrigen finde ich Deine Reaktion etwas - na sagen wir - merkwürdig. Du hast offensichtlich wenig Ahnung, wie Du zu einem richtigen Hashdigest kommst, 'findest' ein md5.pas Unit, die aber nicht funktioniert, willst deshalb DEC benutzen, und ich soll mal irgendeine weitere dieser Obskuritäten testen? Was für ein Kraut rauchst Du eigentlich, um auf solche Ideen zu kommen? Jetzt speziell auf den letzten Teil. Willst Du damit sagen, daß Du keine Ahnung hast, wie man von 'abc' auf einen beliebigen String verallgemeinert? Dann laß bitte die Finger von MD5 und erst recht von RSA. |
AW: hagen reddman dec
Das hab ich nicht gesagt und ich rauche kein was auch immer.
RSA Decrypt the final MD5 hash (result goes in 'b') D679E4D420CF78D335DC9AD165F9D819 //b oder auch modul N base 16 format size 128 bits oder liege ich da falsch? Hier aus der md5.pas
Delphi-Quellcode:
und hier das andere
{ The MD5String function evaluates the MD5 hashsum for
a string. The S parameter specifies a string to evaluate hashsum } function MD5String(const S: string): TMD5Digest;
Delphi-Quellcode:
und meine function die ich verwenden wollte aber die nicht geht.
{ The MD5DigestToStr function converts the result of
a hashsum evaluation function into a string of hexadecimal digits } function MD5DigestToStr(const Digest: TMD5Digest): string;
Delphi-Quellcode:
function GetMD5(s: string): string;
Begin result := MD5DigestToStr(MD5String(s));//hier wird doch die md5 hashume in einen string umgewandelt oder liege ich da falsch? end; |
AW: hagen reddman dec
Guten Abend,
mit Deiner angehängten MD5.pas funktioniert der folgende Code ohne Murren.
Delphi-Quellcode:
Nachtrag:
uses
md5; procedure TForm1.Button1Click(Sender: TObject); begin edit2.Text := MD5DigestToStr(Md5String(Edit1.Text)); end; Meine Delphi Version: TDE 2006 Was ist denn Deine: >= 2009 -> String = Unicode String Grüße Klaus |
AW: hagen reddman dec
Meine delphi version ist delphi 7 lite full welche version das genau ist kann ich dir nicht sagen scheint eine gemodde version von delphi 7 second edition zu sein.
Genau deswegen verstehe ich nur bahnhof bei jedem anderen geht diese md5.pas nur bei mir nicht. Hab erst gedacht es läge an den vista api´s deswegen hab eine neuinstallation ohne diese api´s gemacht selber fehler. Rsa kann sehr woll md5 verwenden für C da ja Encrypt Cipher_text = M ^ E MOD N Decrypt Message text = C ^ D MOD N Oder hab ich das jetzt auch falsch verstanden? Wollte es so lösen :
Delphi-Quellcode:
aber wenn ich das verwende bekomme ich einen range check error.
function new_md5(s:string):string ;
var t:THash_MD5; begin t:=THash_MD5.Create; try t.Init; Result:=t.CalcBinary('s',TFormat_HEX); t.Done; finally t.Free; //hier wird THash_MD5 freigelassen. end; end;
Delphi-Quellcode:
if (s <> '') and (s[1] <> '$') then
|
AW: hagen reddman dec
Zitat:
Das ist doch aber völlig unerheblich ob C aus einem MD5 Hashherkommt oder erwürfelt wurde. Wenn es immer noch dieser Fehler ist, Zitat:
Delphi-Quellcode:
und Du verwendest (zumindest was Du bisher gezeigt hast) ja keine Streams.
function MD5Stream(const Stream: TStream): TMD5Digest;
Im übrigen habe ich schwere Sicherheitsbedenken bei Deinem Code: 128-Bit RSA ist viel viel zuwenig um sicher zu sein. Aber viel schlimmer ist die "Security by Obscurity" durch Deine Part1- bis Part5- Verwurschtelungen. Ist Dir eigentlich bewußt, daß allein Part1 höchsten 9 Bit Sicherheit erzeugt, wenn die 128 Eingangsbits zufällig sind, da Du 32 4-Bit-Werte summierst. Part2 bis Part5 werden diese 9 Bit Zufall noch weiter runterdrücken. |
AW: hagen reddman dec
Nein der fehler hat sich doch geändert hab ich oben verbessert aber ich lande an dieser stelle im code mit md5.pas wie gesagt warum auch immer da ich keine streams verwende wie du schon gesagt hast.
Das 128 zu wenig sind ist mir schon klar aber das ist nicht für eine software die ich schützen will. Sagt dir das word keygenme etwas besser gesagt in diesem falle tut_me. Ich hoffe das thema ist hier erlaubt wenn nicht tut es mir leid. |
AW: hagen reddman dec
Zitat:
|
AW: hagen reddman dec
Ich kenne mich schon mit dieser Materie aus nur halt auf dem wege des pachtens hab erst zwei keygens geschrieben beide waren aber ohne cryptos und dieser hier ist ja für mich zum lernen gedacht nicht für sonstige zwecke.
Wobei das eine kein richtiger keygen ist da die serial nicht random ist. Da ein echter keygen random serials ausgibt die aber immer gültig sind. Das mit dem kraut rauchen könnte man alls falsche unterstellung anzeigen nur so alls tip. Back to topic : Wenn ich dich auf sonstige art beleidigt habe tut es mir leid @gammatester |
AW: hagen reddman dec
Ok, ich gebe zu für einen unerfahrenen Delphientwickler ist die korrekte Benutzung der DEC THash Klassen bischen ungewohnt.
Alle .Calc???() Methoden der THash Klassen sind als Klassenmetoden deklariert. Dh. du benutzt
Delphi-Quellcode:
oder
WriteLn( THash_M5.CalcBinary('abc', TFormat_HEX) );
WriteLn( THash_SHA1.CalcFile('c:\test.txt', TFormat_MIME) );
Delphi-Quellcode:
In den obigen Beispielen wird per Einzeiler und mit Hilfe von Klassenmethoden alles in einem Rutsch berechnet, was die häufigste Anwendungen ist.
var
MyClass: THashClass; begin MyClass := THash_MD5; WriteLn( MyClass.CalcBinary(.....) ); end; Nur in den selteneren Fällen benutzt man die Hash Klassen im DEC auf die gewohnte und herkömliche Weise:
Delphi-Quellcode:
In diesem Beispiel sieht man die einschlägige Vorgehensweise mit der Erstellung einer Objektinstanz. Deweiteren benutzt man die Methode .Calc() mit typlosen Zeiger auf Datenbereiche und Angabe der zu berechneden Datenbytes.
var
Hash: TDECHash; Data: array[0..2] of Byte; begin Hash := THash_MD5.Create; try Hash.Init; Hash.Calc(Data[0], 1); Hash.Calc(Data[1], 2); Hash.Done; Result := Hash.DigestStr(TFormat_HEX); finally Hash.Free; end; end; Man benutzt dies so wenn man, wie oben im Bespiele gezeigt, über getrennte Daten/Speicherbereiche eine Berechnung durchführen muß so als wenn diese zusammenhanglosen Datenbereiche ein einziger Datenbereich wäre. Also Zb. wenn man komplexere Datenstruktren/Records in/aus Streams speichdert/lädt und im gleichen Atemzug auch einen Hash berechnen möchte. Die zweite Methode der Benutzung der Hashklassen ist also eher die Ausnahme und dient der Komnpatibilität und der Implementation besonderer Verfahren/Protokolle. Siehe dazu zB. die Medthoden .KDF?() und .MGF?() an die quasi dynmische Datenbereiche errechnen, diese mit den übergebenen Datenberechen verkettet und so eine Berechnung stückchenweise durchführen so als hätte man diese Daten in einem Datenbereich erstmal vorher berechnet. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 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