Passwörter entschlüsseln (AES)


#1
Hallo Leute,
ich habe letzte Woche Freitag eine Freiwillige Aufgabe von meinem Lehrer bekommen.
Mein Lehrer gab mir eine Test-Datenbank mit Benutzernamen und Passwörtern und ein Code-Schnipsel aus seinem Delphi Code.

// Verschlüsselungsstandardsfestlegen
SetDefaultCipherClass(TCipher_Rijndael);
SetDefaultHashClass(THash_SHA1);
IdentityBase := $63417844;
RegisterDECClasses([TCipher_Rijndael, THash_SHA1]);

CryptKey = 'B34oa78Adh9aDd9Kk'; // Schlüssel für die Verschlüsselung von Passwörtern

Anhand diesen Code-Schnipsel meinte er kann ich die Passwörter entschlüsseln die in der Datenbank liegen.
Jetzt soll ich in den Herbst Ferien ausprobieren ob ich die Passwörter entschlüsselt bekomme.
Weiß jemand wie ich das in C# realisieren kann ?

MFG,
Movementroboter
 
#2
Hi

bin mir nicht sicher, wozu die "IdentityBase" gut sein soll,
aber im wesentlichen Kann man aus dem Code ablesen, dass es
um eine Verschlüsselung mit AES mit dem Schlüssel B34oa78Adh9aDd9Kk
und den SHA1-Hashalgorithmus geht.
(Rijndael ist im Wesentlichen nur der ursprüngliche Name für AES)

Das war der gute Teil, der schlechte folgt:

a) Sind die Passwörter jetzt verschlüsselt oder gehasht oder was?

b) Der Schlüssel ist totaler Unsinn. Um Buchstaben in Binärschreibweise übersetzen
gibt es einige gängige Möglichkeiten (und der Lehrer könnte sich auch etwas komplett eigenes ausdenken).
Irgendeinen Text als AES-Schlüssel zu verwenden macht keinen SInn, wenn man die Binärdaten nicht kennt.
Und keine der mir bekannten üblichen Übersetzungsmöglichkeiten von B34oa78Adh9aDd9Kk ergeben einen
gültigen AES-Schlüssel (dieser darf nur bestimmte Längen haben, dein Schlüssel passt nicht).

c) Du scheinst nicht recht zu wissen, um welche Programmiersprache es geht.
Delphi, C# und C++ sind drei komplett verschiedene Sachen.
Wenn du dich auch eine Sprache festgelegt hast: Kennst du dich mit dem Datenbankteil aus?

Vor allem wegen b) ist die ganze Sache vermutlich nicht so einfach lösbar, wenn überhaupt
(falls AES irgendwie für die Lösung relevant ist)

(Und was ist eigentlich mit deiner anderen Frage?)
 
Zuletzt bearbeitet:
#3
a)
Das Passwort was in der Datenbank liegt sieht so aus /M42Ufrjx1zE7MZRxtGLgw== ist das behilflich ?

b)
Mein Lehrer hat mir noch ein Schlüssel genannt der so aussieht
K5b9hbK0zau0523636

c)
Der Code von meinem Lehrer ist nur in Delphi ich soll das Entschlüsseln aber in Visual Studio (C#) lösen.
 
#5
a)
Schaut nach Base64 aus. Bedeutet:
Datenbanktabellen mit Spalten, die für lesbaren Text gedacht sind, haben oft ein Problem damit, irgendwelche
nicht-nur-textuelle Binärdaten zu speichern (aus verschiedenen Gründen, geht hier zu weit). Viele Datenbanksysteme
haben schon auch einen Spaltentyp für Binärdaten, nur muss man das beim Tabellen-erstellen eben richtig angeben
(bzw. wissen, wie es geht).

Wenn man aus irgendeinem Grund Binärdaten in eine Textspalte speichern muss/will gibt es
Umschreibungsverfahren wie zB. Base64, bei denen die Daten zwar länger werden (mehr Speicher brauchen),
aber dafür auch für Textspalten geeignet sind.

(Man könnte auch einfach pro Byte die 8 Bit, also zB. "11001010" als lesbaren Text abspeichern,
was aber aus jedem Byte 8 macht. Base64 ist da deutlich sparsamer (133% statt 800% Länge))

AES-Verschlüsselte Daten sind im DB-Sinn im Allgemeinen nicht als Text geeignet (je nach Daten manchmal schon,
manchmal nicht), auch wenn man vor der Verschlüsselung lesbaren Text hatte. Statt den richtigen Spaltentyp
in der DB zu nehmen hat dein Lehrer eben Base64 angewendet.

b)
Da passt die Länge auch nicht.
AES erlaubt Schlüssel mit 128, 192 oder 256 bit Länge, also 16, 24 oder 32 Byte.
Wenn man die Schlüssel zB. als ASCII-Text sieht (mit 8 bit, also 1 Byte pro Buchstabe)
haben sie aber 17 und 18 Byte (weil 17 und 18 Buchstaben). 16 wäre möglich, 17 und 18 nicht.

c)
Dann verschieb ich den Thread in den passenden Bereich...