Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   AES128 entschlüsseln (https://www.delphipraxis.net/204071-aes128-entschluesseln.html)

gmc616 21. Apr 2020 10:13

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:

  Key := '30F9FDB205E2821C1163C68B3CB542BE'; // Der Schlüssel
  Data := 'Hz6/lUsQU4i+E8f7O33cA1APEiu1SwAG'; // Die Zeichenkette , vermutlich base64, kommt aus XML
 
  Ergebnis := 'F5D0CC6A9B7FA0F9AE8324ED871B7509'; // <- Das soll raus kommen
Als Verschlüsselungsmethode habe ich das dazu gefunden: http://www.w3.org/2001/04/xmlenc#kw-aes128
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.

hoika 21. Apr 2020 11:21

AW: AES128 entschlüsseln
 
Hallo,
normales Aes128 ist es schon mal nicht, siehe hier

https://encode-decode.com/aes128-encrypt-online/

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.

Andreas L. 21. Apr 2020 12:41

AW: AES128 entschlüsseln
 
Für Verschlüsselungen (und auch zum hashen) verwende ich immer das kostenlose Delphi Encryption Compendium. Einfach in ein Verzeichnis deiner Wahl extrahieren und es zum Delphi Bibliotheks-Pfad hinzufügen und schon kanns los gehen.

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;

TurboMagic 21. Apr 2020 19:00

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.

hoika 21. Apr 2020 19:28

AW: AES128 entschlüsseln
 
Hallo,
Zitat:

Ist die Datenmenge größer als ein Block müssen mehrere verschlüsselt werden.
ja, das meinte ich und auch noch das:
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.

Blup 22. Apr 2020 10:50

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.

TurboMagic 22. Apr 2020 13:38

AW: AES128 entschlüsseln
 
Zitat:

Zitat von Blup (Beitrag 1462666)
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.

Das sollte mit den Format Klassen von DEC machbar sein.
Einfach mal anschauen, dafür gibt's auch Demoprogramme.

gmc616 22. Apr 2020 14:26

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.

himitsu 22. Apr 2020 14:48

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.

jus 22. Apr 2020 15:14

AW: AES128 entschlüsseln
 
Zitat:

Zitat von TurboMagic (Beitrag 1462624)
...
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.
...

Meiner Meinung nach ist es, wie schon hoika und TurboMagic angedeutet haben, zunächst mal sehr wichtig rauszufinden, welche Betriebsart(Block Cipher Mode) für die Verschlüsselung verwendet wurde, sonst wird es ein herumgerate. Und danach könnte man die Sache mit IV angehen, wobei dieser normalerweise in der Doku angeben werden sollte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz