Das Experimentieren mit dem neuen
DEC-Projekt 6.1 hat schon seinen Reiz.
Nachdem die Frage nach einer Lösung für encrypt/decrypt von Strings aufgeworfen wurde, habe ich dies mit der Methode EncodeStringToString gelöst
und es funktioniert auch.
Sicher war das wohl nicht sehr anspruchsvoll. Doch hier im Forum wurde die Anwendung der Methode EncodeBytes behandelt und so habe ich mich auch daran
versucht, jedoch bislang ohne durchgreifenden Erfolg.
Zunächst habe ich eine Konsolenanwendung mit EncodeBytes erstellt und die funktioniert auch. Dann wollte ich diese in eine
VCL-Anwendung umsetzen und
da tauchten die Probleme auf.
Das Problem scheint die Umwandlung von TArray<Byte> in string für eine Ausgabe des verschlüsselten Textes zu sein und natürlich auch dann wieder
das gleiche Problem zurück bei der Decryptierung.
Ist der Ansatz überhaupt tragfähig, die Konsolenanwendung zur Grundlage zu nehmen? Die hier im Forum dargestellten Beispiele haben mich nicht so richtig
weiter gebracht, denn ich backe eher noch "kleine Brötchen" und mache das alles nur als Hobby mit eher mäßigem Erfolg, doch es reizt mich immer wieder.
Was ist das Besondere an der Methode EncodeBytes? Ist die wesentlich besser als die Methode EncodeStringToString?
Ich wäre daher sehr interessiert an einer Lösung der
DEC-Verschlüsselung/Entschlüsselung mit der Methode EncodeBytes im
VCL-Programm so etwa mit ButtonClick
auf encode und decode...
Anbei meine bescheidenen Versuche als Konsolenanwendung:
Delphi-Quellcode:
program Format_Console;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
DECFormat,
DECCipherBase,
DECCipherModes,
DECCipherFormats,
DECCiphers;
var
Cipher : TCipher_AES;
SourceText : RawByteString;
CipherKey : RawByteString;
IV : RawByteString;
Input,
Output : TBytes;
i : Integer;
begin
Cipher := TCipher_AES.Create;
try
try
CipherKey := '
Passwort';
IV := #0#0#0#0#0#0#0#0;
Cipher.Init(CipherKey, IV, 0);
Cipher.Mode := cmCBCx;
SourceText := '
AES Bytes Beispiel';
WriteLn('
Source text: ' + SourceText);
Input := System.SysUtils.BytesOf(SourceText);
// Encrypt
Output := Cipher.EncodeBytes(Input);
Write('
Encrypted data in hex: ');
for i := 0
to high(Output)
do
Write(IntToHex(Output[i], 2), '
');
WriteLn;
// Decrypt
Cipher.Init(CipherKey, IV, 0);
Output := Cipher.DecodeBytes(Output);
SourceText := RawByteString(System.SysUtils.StringOf(Output));
WriteLn('
Decrypted data: ' + SourceText);
ReadLn;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
finally
Cipher.Free;
end;
readln;
end.
und in der
VCL-Anwendung:
Delphi-Quellcode:
procedure TForm1.btn15Click(Sender: TObject);
//enc bytes
var
Cipher: TCipher_AES;
Res: TArray<Byte>;
CipherKey : RawByteString;
sourceText : RawByteString;
Input,
Output : TBytes;
i : Integer;
begin
try
Cipher := TCipher_AES.Create;
try
Cipher.Mode := cmCBCx;
CipherKey := '
Passwort';
//IV := #0#0#0#0#0#0#0#0;
Cipher.Init(CipherKey);
SourceText := '
Beispielklartext AES';
Input := System.SysUtils.BytesOf(SourceText);
Res := Cipher.EncodeBytes(Input);
for i := 0
to High(Res[i])
do
(mmodecstr.text:=(IntToHex(Res[i], 2)));
finally
Cipher.Free;
end;
except
// Fehlerbehandlung später
end;
procedure TForm1.btn13Click(Sender: TObject);
//dec Bytes
var Cipher : TCipher_AES;
SourceText : RawByteString;
CipherKey : RawByteString;
IV : RawByteString;
Input,
Output : TBytes;
i : Integer;
out :
string;
Hexwerte : TArray<Byte>;
begin
Cipher := TCipher_AES.Create;
CipherKey := '
Passwort';
IV := #0#0#0#0#0#0#0#0;
Cipher.Init(CipherKey, IV, 0);
Cipher.Mode := cmCBCx;
//HexWerte := 56 5B 08 BE A7 D2 4C D7 7C 30 D2 2E EA BF 79 1F 5F 88 F0 80; (über showMessage abgeschrieben)
Output := Cipher.DecodeBytes(HexWerte);
//klappt natürlich nicht
SourceText := RawByteString(System.SysUtils.StringOf(Output));
mmodec1.text:= ('
Decrypted data: ' + SourceText);
end;