![]() |
AES128 entschlüsseln
Hallo Delphi-Gemeinde.
Ich muss AES128-Zeichenketten entschlüsseln. Nun ist es aber so, dass ich von Verschlüsselungen überhaupt Ahnung habe. Ich habe etwas rumgegoogled und eine Reihe von DCPcrypt Beispielen gefunden, aber keines bringt für mich das korrekte Ergebnis. Ich stehe auf dem Schlauch.
Delphi-Quellcode:
Als Verschlüsselungsmethode habe ich das dazu gefunden: Key := '30F9FDB205E2821C1163C68B3CB542BE'; // Der Schlüssel Data := 'Hz6/lUsQU4i+E8f7O33cA1APEiu1SwAG'; // Die Zeichenkette , vermutlich base64, kommt aus XML Ergebnis := 'F5D0CC6A9B7FA0F9AE8324ED871B7509'; // <- Das soll raus kommen ![]() Offenbar gibt es hier einen Key-Wrapper ... Den Algorithmus verstehe ich irgend wie nicht. Leider habe ich momentan nicht die Zeit mich in dieses komplexe Thema "Verschlüsselung" einzuarbeiten (obwohl es sicherlich interessant wäre). Diese Entschlüsselung ist nur ein kleiner Teil eines riesigen Projektes. Daher hoffe ich auf eure Hilfe, dass ihr mir einen Schubs in die richtige Richtung geben könnt. Danke im Voraus. |
AW: AES128 entschlüsseln
Hallo,
normales Aes128 ist es schon mal nicht, siehe hier ![]() Merke: Es gibt verschiedene Aes128-Verschlüsselungen. aes128-cfb liefert z.B. was (aber nicht Richtige) Du musst dich wohl oder übel damit beschäftigen, und wenn es erst mal darum geht, das korrekte Verschlüsselungsverfahren zu ermitteln. |
AW: AES128 entschlüsseln
Für Verschlüsselungen (und auch zum hashen) verwende ich immer das kostenlose
![]() Beispiel:
Delphi-Quellcode:
uses
DECCipher; procedure TForm1.Button1Click(Sender: TObject); const Salt = 'ABCDEF'; var Cipher: TDECCipher; begin // Instanz erzeugen (Rijndael = AES 128) Cipher := TCipher_Rijndael.Create; try // Mit Passwort und Salt initialisieren // Die Salt-Konstante ist nur ein Beispiel! Cipher.Init(edtPassword.Text, Salt); // Den Wert aus dem Source-Edit verschlüsseln und // in Dest-Edit ausgeben. edtDest.Text := Cipher.EncodeBinary(edtSource.Text); // Entschlüsseln geht mit Cipher.DecodeBinary // Mit EncodeFile & DecodeFile kann eine Datei ver-/ent-schlüsselt werden // Mit EncodeStream & DecodeStream ein Stream... finally FreeAndNil(Cipher); end; end; |
AW: AES128 entschlüsseln
Das gezeigte Delphi Encryption Compendium (DEC) Beispiel dürfte etwas veraltet sein.
Vermutlich passt es für V5.2, es gibt aber eine Entwicklungsversion der in Entwicklung befindlichen V6.0. Da wurden ein paar Methoden umbenannt und alles weiter modularisiert. Außerdem kann diese Version durch Nutzung eines NO_ASM Compilerschalters auch auf mobilen Plattformen benutzt werden. Es wurden für alle bisher in ASM geschriebene Routinen Delphi Varianten geschrieben, die in dem Fall genutzt werden. In V6.0 werden auch ein paar Beispiele mitgeliefert. Der Hinweis darauf, dass es verschiedene AES Varianten gibt ist etwas unglücklich formuliert. Was gemeint ist: AES verschlüsselt immer einzelne Datenblöcke. Ist die Datenmenge größer als ein Block müssen mehrere verschlüsselt werden. Um die Sicherheit zu erhöhen sollten dabei die Blöcke miteinander verkettet werden. Und genau dafür gibt es verschiedene Verfahren, von denen DEC die meisten geläufigen (leider noch kein GCM) beherrschen dürfte. Außerdem gibt es in DEC Formatklassen für Datenformat Konvertierungen, z. B. auch für BASE64. |
AW: AES128 entschlüsseln
Hallo,
Zitat:
Ist die Datenmenge kleiner als ein Block, wird der Block nach einem bestimmten (festzulegenden) Algorithmus aufgefüllt. Und den muss man meines Wissens beim Entschlüsseln kennen. |
AW: AES128 entschlüsseln
Data muss zuerst einmal von Base64 in binäre Daten umgewandelt werden.
Erst dann kann der Algo zum entschlüsseln angewendet werden. "Ergebnis" ist ein Hexdump der entschlüsselten Daten. Um die tatsächlich entschlüsselten Daten vergleichen zu können, muss man diese vorher umwandeln. |
AW: AES128 entschlüsseln
Zitat:
Einfach mal anschauen, dafür gibt's auch Demoprogramme. |
AW: AES128 entschlüsseln
Irgendwie komme ich nicht weiter.
Ich habe mir ein paar Sachen durchgelesen und das DEC getestet. Immer wieder lese ich etwas von Salz (Salt) und InitVectoren. Oder ist das das gleiche? Fest steht, ich habe beides nicht. Wüsste auch nicht woher ich die bekommen sollte. Und ohne diese Dinge wird das mit dem Entschlüsseln wohl nichts werden. |
AW: AES128 entschlüsseln
Salt: Sowas wird nicht immer gemacht. (ob es hier der Fall ist ... keine Ahnung)
Das Versalzen kann man zu Beginn machen, oder hinten anhängen, aber zu Beginn (wie die InitVectoren) wird es wohl meistens am Besten sein. Es geht nur darum, dass man bei gleichen zu verschlüsselnden Daten ein anderes Ergebnis bekommt, durch hinzufügen einer zusätzlichen "festen" (für diesen einen Zweck) oder einer dynamischen (nur fur diese EINE Verschlüsselung) Komponente oder Beides zusammen. z.B. die Passwörter in so einem Forum: * ein geheimer Schlüssel im Forum (damit jede Webseite einen Anderen hat) * und nochmal pro User einen zufälligen Schlüssel, immer wieder neu, bei neuem Passwort (damit zwei Benutzer mit dem selben Passwort nicht den selben Passwort-Hash bekommen) Der initiale Salt entspricht quasi dem InitVector. Erstes wird quasi im Programm/Rechner hinterlegt und Zweiteres wird jeweils in/an/neben den verschlüsselten Daten abgelegt. |
AW: AES128 entschlüsseln
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 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