![]() |
Passwort Entschlüsseln
Hallo Leute,
ich benutze in der Schule jetzt seit 5 Wochen Delphi und habe mich ein bisschen mit dem Delphi Encryption Compendium 5.2 auseinander gesetzt. Jetzt habe ich von meinem Lehrer eine Test-Datenbank bekommen und soll versuchen mit den Angaben die er mir gegeben hat die Passwörter die in der Datenbank stehen zu entschlüsseln. Angaben die ich von meinem Lehrer erhalten habe: // Verschlüsselungsstandards SetDefaultCipherClass(TCipher_Rijndael); SetDefaultHashClass(THash_SHA1); IdentityBase := $84485225; RegisterDECClasses([TCipher_Rijndael, THash_SHA1]); Wie kann ich mit den Angaben die Passwörter entschlüsseln? LG, Movement |
AW: Passwort Entschlüsseln
Hallo,
Rijndael (AES) ist ein symetrisches Verfahren. Schlüssel die zum Verschlüsseln benutzt werden, werden auch zum Entschlüsseln wieder benötigt. Grüße Klaus |
AW: Passwort Entschlüsseln
Hallo Klaus,
danke erstmal für die schnelle Antwort, Was bedeutet den? SetDefaultCipherClass(TCipher_Rijndael); SetDefaultHashClass(THash_SHA1); IdentityBase := $84485225; RegisterDECClasses([TCipher_Rijndael, THash_SHA1]); Hast du vielleicht ein Beispielcode an dem ich mich orientieren kann ? LG, Movementroboter |
AW: Passwort Entschlüsseln
Hallo,
nein, Beispiel-Code habe ich nicht. Aber vielleicht hilft der (etwas längere) ![]() Grüße Klaus |
AW: Passwort Entschlüsseln
Nun es wird dort im DEC etwas geben was
Delphi-Quellcode:
und
Encrypt
Delphi-Quellcode:
lautet. Suche danach. Dann kannst du damit schon mal einen String verschlüsseln und wieder entschlüsseln.
Decrypt
Wenn du das geschafft hast, dann wende das Erlernte auf die Einträge in der Datenbank an. |
AW: Passwort Entschlüsseln
Ich finde alle Angaben unbrauchbar, selbst
Delphi-Quellcode:
sagt ja nicht, daß letzlich AES/Rinjdael benutzt wird.
SetDefaultCipherClass(TCipher_Rijndael);
Folgende Punkte sind zu klären:
|
AW: Passwort Entschlüsseln
1. Es wird AES benutzt
2. Mein Lehrer meinte er hat den Schlüssel willkürlich eingeben (einfach auf der Tastatur was gedrückt). 3. Gute Frage 4. Leider hat er mir dazu keine Informationen geliefert :( 5. Padding ? was meinst du damit ? ![]() |
AW: Passwort Entschlüsseln
Also ich habe eben mein Lehrer auf seinem Handy angerufen
und habe ihn die Fragen gestellt die mir gammatester genannt hatte Er meinte der Schlüssel U5r5klO0zwu674593 wurde damals so akzeptiert Welchen Betriebsmodi weiß er nicht mehr :? Padding was für Padding ?:lol: |
AW: Passwort Entschlüsseln
Zitat:
![]() Hintergrund: AES verschlüsselt 128-Bit-Blöcke. Es gibt Betriebsmodi, die beliebige Bytemuster verabeiten können. Und solche die nur auf 16-Byte-Blöcken arbeiten (dies sind zB das einfache ECB oder das oft verwendete CBC), hier muß man dann irgendwie auf 16-Byte-Vielfache auffüllen, zB durch 0, oder die erwähnten Paddingmethoden. Wenn nur 'U5r5klO0zwu674593' gegeben ist, wird man das normalerweise hashen, zB mit SHA1. Da SHA1 160-Bit hat, vermute ich das davon 128 Bit benutzt werden (die niedrigsten?, die höchsten?). Aber wie gesagt, alles nur Vermutung. |
AW: Passwort Entschlüsseln
Kann es sein das U5r5klO0zwu674593 das Salz ist ?
|
AW: Passwort Entschlüsseln
Zitat:
Wie schon man angedeutet, kann es aber auch sein, daß gar nicht verschlüsselt wird, sondern Salz und SHA1(passwort) gespeichert werden. Ohne genaue Angaben, was eigentlich gemacht wird, hast Du kaum eine Chance. Kennst Du denn zumindest die Datenbankstruktur? Vielleicht kann man daraus etwas mehr Informationen ableiten. |
AW: Passwort Entschlüsseln
Wenn man einen Blick auf das DEC wirft
Zitat:
Und bis auf die Tatsache, dass dort mit
Delphi-Quellcode:
warum auch immer das Lesen und Verstehen des Codes erschwert wird, ist dort aber genau das enthalten, was hier benötigt wird.
with
Delphi-Quellcode:
Damit das Verstehen besser wird habe ich mal dieses
var
ACipherClass: TDECCipherClass = TCipher_Rijndael; ACipherMode: TCipherMode = cmCBCx; AHashClass: TDECHashClass = THash_Whirlpool; ATextFormat: TDECFormatClass = TFormat_Mime64; AKDFIndex: LongWord = 1; function Encrypt( const AText: String; const APassword: String ): String; overload; function Decrypt( const AText: String; const APassword: String ): String; overload;
Delphi-Quellcode:
entfernt und die Parameter mit Kommentaren versehen.
with
Delphi-Quellcode:
Mit der Basis müsste man jetzt auch weiterkommen ...
program dp_182529;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, DECUtil, DECCipher, DECHash, DECFmt; var ACipherClass: TDECCipherClass = TCipher_Rijndael; ACipherMode: TCipherMode = cmCBCx; AHashClass: TDECHashClass = THash_Whirlpool; ATextFormat: TDECFormatClass = TFormat_Mime64; AKDFIndex: LongWord = 1; function Encrypt( const AText: String; const APassword: String ): String; var LSalt: Binary; LData: Binary; LPass: Binary; LCipher: TDECCipher; begin LCipher := ValidCipher( { CipherClass } ACipherClass ). { > } Create; try LSalt := RandomBinary( 16 ); LPass := ValidHash( { HashClass } AHashClass ). { > } KDFx( { Data } APassword[1], { DataSize } Length( APassword ) * SizeOf( APassword[1] ), { Seed } LSalt[1], { SeedSize } Length( LSalt ), { MaskSize } LCipher.Context.KeySize, { Format } TFormat_Copy, { Index } AKDFIndex ); LCipher.Mode := ACipherMode; LCipher.Init( LPass ); SetLength( LData, Length( AText ) * SizeOf( AText[1] ) ); LCipher.Encode( { Source } AText[1], { Dest } LData[1], { DataSize } Length( LData ) ); Result := ValidFormat( { FormatClass } ATextFormat ). { > } Encode( { Value } LSalt + LData + LCipher.CalcMAC ); finally LCipher.Free; ProtectBinary( LSalt ); ProtectBinary( LData ); ProtectBinary( LPass ); end; end; function Decrypt( const AText: String; const APassword: String ): String; var LSalt: Binary; LData: Binary; LCheck: Binary; LPass: Binary; LLen: Integer; LCipher: TDECCipher; begin LCipher := ValidCipher( { CipherClass } ACipherClass ). { > } Create; try LSalt := ValidFormat( { FormatClass } ATextFormat ). { > } Decode( { Value } AText ); LLen := Length( LSalt ) - 16 - LCipher.Context.BufferSize; LData := System.Copy( LSalt, 17, LLen ); LCheck := System.Copy( LSalt, LLen + 17, LCipher.Context.BufferSize ); SetLength( LSalt, 16 ); LPass := ValidHash( { HashClass } AHashClass ). { > } KDFx( { Data } APassword[1], { DataSize } Length( APassword ) * SizeOf( APassword[1] ), { Seed } LSalt[1], { SeedSize } Length( LSalt ), { MaskSize } LCipher.Context.KeySize, { Format } TFormat_Copy, { Index } AKDFIndex ); LCipher.Mode := ACipherMode; LCipher.Init( { Key } LPass ); SetLength( Result, LLen div SizeOf( AText[1] ) ); LCipher.Decode( { Source } LData[1], { Dest } Result[1], { DataSize } LLen ); if LCheck <> LCipher.CalcMAC then raise Exception.Create( 'Invalid data' ); finally LCipher.Free; ProtectBinary( LSalt ); ProtectBinary( LData ); ProtectBinary( LCheck ); ProtectBinary( LPass ); end; end; procedure Main; var LText: string; LPass: string; begin LText := 'The quick brown fox jumps over the lazy dog'; LPass := 'U5r5klO0zwu674593'; Writeln( 'Encode Test: ', Encrypt( LText, LPass ) ); Writeln( 'Decode Test: ', Decrypt( Encrypt( LText, LPass ), LPass ) ); end; begin try Main; except on E: Exception do Writeln( E.ClassName, ': ', E.Message ); end; ReadLn; end. |
AW: Passwort Entschlüsseln
Die Angaben des Lehrers sind überhaupt nicht ausreichend.
Es wird weder angegeben, in welchem Modus verschlüsselt wird. CBC, ECB, CTR, OCB, CFB oder was? Soll er das raten oder wie? Wozu dient der Hash Algo? Wird er in einer KDF verwedet? Wenn ja welche? KDFx oder KDF2? Da zu raten ist völlige Zeitverschwendung. Der Lehrer muss sich klar ausdrücken und alle wichtigen Informationen liefern. |
AW: Passwort Entschlüsseln
-- Hier stand etwas persönliches, das man auch per PN übermitteln kann--
|
AW: Passwort Entschlüsseln
Das ist ja wieder zum Kugeln! Kann es sein, dass Dein Lehrer etwas überfordert ist? Was soll das Ganze für ein Schmarrn sein? Was ist überhaupt das Lernziel?
|
AW: Passwort Entschlüsseln
Ich habe neue Informationen :)
Delphi-Quellcode:
ACipherClass: TDECCipherClass = TCipher_Rijndael;
ACipherMode: TCipherMode = cmCBCx; AHashClass: TDECHashClass = THash_Whirlpool; ATextFormat: TDECFormatClass = TFormat_Mime64; //MIME64 = BASE64 ? AKDFIndex: LongWord = 1; Padding = Hat er keine Ahnung von :evil:
Delphi-Quellcode:
Habe bereits nach der WhirlPool Library für Visual Studio geschaut aber ich glaube das was ich da gefunden habe ist nicht passend oder ?
APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
Zitat:
|
AW: Passwort Entschlüsseln
Zitat:
BTW Es wäre sehr freundlich von dir, wenn du Quelltext auch in die Code-Tags packst.
Code:
[DELPHI]
// Hier jetzt DELPHI-Quelltext rein [/DELPHI] |
AW: Passwort Entschlüsseln
Er weiß wirklich nicht was Padding ist? Vielleicht sollte er sich erst mal mit Kryptographie beschäftigen, bevor er versucht sie anderen beizubringen.
Mit VS und C# hat das Ganze nun gar nichts zu tun. THash_Whirlpool ist eine Hash-Klasse aus dem DEC für Delphi mit dem du ja arbeitest. Sir Rufo hat ja schon die Lösung gepostet. :) |
AW: Passwort Entschlüsseln
Zitat:
Somit stellt sich die Frage was der Lehrer wirklich damit vermitteln wollte: Hör genau zu und lies dir die Doku durch? Den Test scheint er nicht bestanden zu haben :stupid: |
AW: Passwort Entschlüsseln
Zitat:
|
AW: Passwort Entschlüsseln
Zitat:
|
AW: Passwort Entschlüsseln
Zitat:
Zitat:
|
AW: Passwort Entschlüsseln
Das hatte ich ganz vergessen:(
Gibt es den eine Möglichkeit die DEC5 Library in .Net zu benutzen ? |
AW: Passwort Entschlüsseln
Zitat:
Meistens liegt eine solche Aussage (das geht nicht, die passen nicht) daran, dass es eben nicht der gleiche Input gewesen ist. Wichtig in diesem Zusammenhang: Es werden nur Byte-Folgen verarbeitet. Alles was keine Byte-Folge ist wird/muss vorher in eine Byte-Folge umgewandelt werden und dann durch den Hasher gejagt. Und genau da liegt immer das Problem, dass jeder immer den "gleichen" String durchnudelt. Jo, bis man sich dann anschaut, was für eine Byte-Folge dieser String denn ergibt und das ist je nach ![]() Also prüfe ob du wirklich die gleichen Byte-Folgen verwendest |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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