-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
28. Mai 2018
Sehe ich anders:
Bezüglich Schlüssel:
procedure TDCP_rijndael.InitKey(const Key; Size: longword);
var
KC, ROUNDS, j, r, t, rconpointer: longword;
tk: array of byte;
begin
Size:= Size div 8;
FillChar(tk,Sizeof(tk),0);
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
28. Mai 2018
Nein, die maximale Schüssellänge ist 32 Bytes/Zeichen = 256 Bit.
Wenn Du mehr Zeichen verwenden willst, benutze eine Hash- oder KDF-Funktion (Schlüsselableitungsfunktion) mit 256-Bit und nimm den Hash als Schüssel, Stichwort Passwort-Hashing.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
28. Mai 2018
Das war ja nur zu Demo-Zwecken. Das De-Padding ist noch fehlerhaft, ändere es wie ich es beschrieben habe. Da Du wahrscheinlich keine Kontrollzeichen am Anfang/Ende Deines Textes verwendest, ist das trim nur sekundär problematisch.
Edit: Die Länge der zu ver/entschüsselnden Texte ist auf 2GB beschränkt (bzw etwas weniger wg. der Base64-Kodierung). Die Schlüssellänge ist nur bis 32 Zeichen...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
28. Mai 2018
s.u.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
28. Mai 2018
Allerdings muß man sich im klaren sein, daß dann der Algorithmus von der Stringlänge abhängt. Für Längen <=16 wird AES-128 verwendet, für Längen <= 24 dann AES-192 und sonst AES-256. Selbstverständlich darf dann auch nicht mit Cipher.Init(Key,128,@IV); ohne Crash-Gefahr initilisiert werden. Ein IV muss 16 Bytes sein, da init einen Pointer verlangt, müssen mindestes 16 Bytes vorhanden. Ein IV := ...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
25. Mai 2018
Moin,
ich konnte das Problem mit dem De-Padding reproduzieren. Ich habe in der Hektik meinen eigenen Pseudo-Code falsch umgesetzt :wall:. Mit dieser Änderung Deines Codes sollte es OK sein
if form1.CheckBox1.Checked then
begin
pad := ord(Data);
for index :=1 to pad do delete(Data,length(Data),1);
end;
Natürlich ist das trotzdem noch eine Schnell-Lösung. Ein...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
24. Mai 2018
Sorry, falls der Ton etwas rauh war.
Aber Dein Programm funktioniert, nur wenn der Text keine Ansizeichen <= 32 am Ende hat. Das ist vielleicht für das Ver/Entschlüsseln von Edit-Felder OK, aber nicht für allgemeine Daten. Aber selbst führende Leerzeichen werden weggetrimmt.
Versuche einmal ' a b c ' mit Deiner Version zu verarbeiten. Mit dem trim gibt das Entschlüsseln 'a b c', und wenn...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
24. Mai 2018
Dein Sourcecode und wohl auch die Exe enthalten kein Entfernen des Paddings und ergeben deshalb Schrott. Mit dieser meiner Änderung funktionierts
Verschlüsseln
'Edit1' -> 'zwag7rEW4OWtTLpCHdbyoA=='
Entschlüsseln:
'zwag7rEW4OWtTLpCHdbyoA==' -> 'Edit1'
function DecryptText():String;
var Cipher : TDCP_rijndael;
Data, Key, IV : ansistring;
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
24. Mai 2018
Wäre es nicht sinnvoller den Quellcode zu posten, als ein nacktes EXE?
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
24. Mai 2018
Huh? Wo wird Speicher überschrieben?
Beim Verschlüsseln wird Data auf ein Vielfaches von 16 aufgefüllt (ohne Speicherüberschreibung).
Ich nehme ja wohl an, dass dieser verschlüsselte Text dann komplett wieder entschlüsselt wird. Da die Länge ein Vielfaches von 16 ist, kann er im CBC-Mode verarbeitet werden. Was übrigbleibt nach dem Entschlüsseln ist der Klartext+Padding, was noch entfernt...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
24. Mai 2018
Vermutlich ungefähr so in Pseudo-Code:
pad := ord(Data)
Entferne die letzten pad Bytes/Ansichars von Data
So wie ich den Source für's Verschlüsseln sehe, werden immer 1..16 Bytes angehängt.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by gammatester,
24. Mai 2018
Das werden die Padding-Bytes sein. Ich sehe sie beim Verschlüsseln aber nicht beim Entschlüsseln. Lösungen:
Paddingbytes entfernen beim Entschlüsseln,
Kein Padding und 'manuelles' Auffüllen auf 16-Byte-Vielfaches,
Anderen Betriebsmodus nehmen (CFB8, CTR, OFB, CBC+Ciphertextstealing).