AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi DEC6.0 Verständnisfrage AES Ver-/Entschlüsselung
Thema durchsuchen
Ansicht
Themen-Optionen

DEC6.0 Verständnisfrage AES Ver-/Entschlüsselung

Ein Thema von Aviator · begonnen am 10. Feb 2021 · letzter Beitrag vom 15. Feb 2021
 
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

AW: DEC6.0 Verständnisfrage AES Ver-/Entschlüsselung

  Alt 14. Feb 2021, 11:14
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;
Norbert
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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-2025 by Thomas Breitkreuz