AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DCPCrypt in RAD Studio 10.3/10.4

Ein Thema von amigage · begonnen am 17. Nov 2020 · letzter Beitrag vom 25. Nov 2020
Antwort Antwort
Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
112 Beiträge
 
Delphi 12 Athens
 
#1

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 19. Nov 2020, 11:44
Wenn ich Deinen Base64-String mit einem Online-Decoder decodiere, kommt eine Folge von Bytes heraus, die ich hier mal als Hex-Zahlen darstelle:

c2 4c d5 5f de 76 a0 1b d2 4f a8 20 e2 41 40 d7 c2 1a 48 6b 04 8e 37

Das ist also kein Klartext mit ASCII- oder ANSI-Zeichen, sondern eine Byte-Folge.
Damit es nicht zu einer ungewollten Unicode-Konvertierung der Nicht-ASCII-Zeichen kommt, musst Du einen Datentyp verwenden, der Bytes speichert und nicht (Ansi/Wide-)Char.

Versuche mal, das Ergebnis von Base64DecodeStr() in einer Variable vom Typ RawByteString zu speichern. Diesen "String" übergibst Du dann an DCPCrypt zum entschlüsseln. Falls Das von Dir gewählte Password Umlaute oder andere Nicht-ASCII-Zeichen enthält, bekommst Du aber ein weiteres Problem...

HTH
Achim
Achim
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#2

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 20. Nov 2020, 11:07
Vielen Dank für die Vorschläge.

Ich habe weitere Tests durchgeführt und kann sagen, dass es nicht an der Base64DecodeStr() Funktion liegt. Diese gibt bei beiden Versionen (2.0 und 2.1) den gleichen RawByteString zurück.
Es liegt also an den DecryptCFB8Bit() Funktionen der Verschlüsselungsarten, respektive EncryptECB() .

Denn hier wurden folgende Änderungen vorgenommen:

In der DCPCrypt2.pas wurden allgemein folgende Datentypen eingeführt:

Delphi-Quellcode:
type

{$IF CompilerVersion >= 23}
{$DEFINE DELPHIXE2_UP}
{$IFEND}
{$IFNDEF DELPHIXE2_UP}
   NativeInt = {$IFDEF WIN64} int64 {$ELSE} Longint {$ENDIF};
{$ENDIF}
   PointerToInt = {$IFDEF DELPHIXE2_UP} Pbyte {$ELSE} NativeInt {$ENDIF};

In den verschiedenen Verschlüsselungsarten wurden folgende Änderungen vorgenommen, z.B. TwoFish.pas:

V2.0
Delphi-Quellcode:
  x[1]:= PDWord(longword(@InData)+4)^ xor SubKeys[INPUTWHITEN+1];
  x[2]:= PDWord(longword(@InData)+8)^ xor SubKeys[INPUTWHITEN+2];
  x[3]:= PDWord(longword(@InData)+12)^ xor SubKeys[INPUTWHITEN+3];
V2.1
Delphi-Quellcode:
  x[1]:= PDWord(PointerToInt(@InData)+4)^ xor SubKeys[INPUTWHITEN+1];
  x[2]:= PDWord(PointerToInt(@InData)+8)^ xor SubKeys[INPUTWHITEN+2];
  x[3]:= PDWord(PointerToInt(@InData)+12)^ xor SubKeys[INPUTWHITEN+3];
Longword (Alias für Cardinal - ist 32 Bit auf allen 64-Bit- und 32-Bit-Plattformen.) wurde durch PointerToInt (PByte repräsentiert einen Zeiger auf Byte) ersetzt.

Es sieht wohl so aus, dass ich wohl die alten Daten nicht mehr auslesen kann. Hier scheint es wohl bei einer 64Bit Kompilierung keine Rückwärtskompatibilität zu geben, was natürlich in so einem Fall fatal ist.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.094 Beiträge
 
Delphi 12 Athens
 
#3

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 20. Nov 2020, 19:56
Schon Mal versucht den Verschlüsselungsalgorithmus mit DEC (Delphi Encryption Compendium) umzusetzen?

Davon den aktuellen Development Branche nutzen.
Sollte den Verschlüsselungsalgorithmus, Base64 und den angegebenen Blockverkettungsalgorithmus unterstützen.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#4

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 22. Nov 2020, 11:14
Vielen Dank für den Tipp, ich werde es mir einmal anschauen.
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#5

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 23. Nov 2020, 12:36
Leider bräuchte ich hier ein wenig Hilfe.
Das Enkodieren und Umwandeln in Base64 fuktioniert soweit.

Delphi-Quellcode:
procedure TForm1.btnEncodeClick(Sender: TObject);
var
  Cipher_Mars : TCipher_mars;
  Ciphertext: TBytes;
  PlainText : Binary;

  strEncoded : TFormat_MIME64;
begin
   Plaintext := Edit1.Text;
   Cipher_Mars := TCipher_Mars.Create;
   strEncoded := TFormat_MIME64.Create;
   try
     Cipher_Mars.Mode := cmCBCx;
     Cipher_Mars.Init(password);
     SetLength(Ciphertext, Length(Plaintext));
     Cipher_Mars.Encode(Plaintext[1], Ciphertext[0], Length(Plaintext));

     Edit2.Text := strEncoded.Encode(CipherText, Length(Ciphertext));
   finally
     strEncoded.Free;
     Cipher_Mars.Free;
   end;
end;
Jedoch bekomme ich es nicht wieder dekodiert. Bei Cipher_Mars.Decode wird eine Zugriffsverletzung ausgegeben.

Delphi-Quellcode:
procedure TForm1.btnDecodeClick(Sender: TObject);
var
  Cipher_Mars : TCipher_mars;
  Ciphertext: TBytes;
  Mime64Text : Binary;

  strEncoded : TFormat_MIME64;
  strOriginalText : String;
  strDecoded : RawByteString;
begin
   Mime64Text := Edit2.Text;
   Cipher_Mars := TCipher_Mars.Create;
   strEncoded := TFormat_MIME64.Create;
   try
     strDecoded := strEncoded.Decode(Mime64Text);
     Ciphertext := BytesOf(strDecoded);

     Cipher_Mars.Mode := cmCBCx;
     Cipher_Mars.Init(password);
     Cipher_Mars.Decode(Ciphertext[0], strOriginalText[1], Length(Ciphertext));

     Edit3.Text := strOriginalText;
   finally
     strEncoded.Free;
     Cipher_Mars.Free;
   end;
end;
Übersehe ich hier irgendetwas?
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.094 Beiträge
 
Delphi 12 Athens
 
#6

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 24. Nov 2020, 19:55
Hallo,

ich versuchte gerade deinen Code mit DEC zum laufen zu bekommen.
Compilert aber nicht. Dann bin ich darauf gestoßen, dass dein Code den
Typ "binary" enthält.

Das war ein Alias der in DEC 5.2 sehr ausgiebig benutzt wurde.

Meine Idee war aber eigentlich gewesen, dass du den aktuellen Entwicklungsbranch
von DEC benutzt. Das ist eine fast fertige V6.0 bei der es viele strukturelle
Änderungen und Detailverbesserungen gibt, inkl. Ausdesignen des Typen binary
und Cross Platform Kompatibilität.

Ich meine also das Original von hier:
https://github.com/MHumm/DelphiEncryptionCompendium

Grüße
TurboMagic
  Mit Zitat antworten Zitat
amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#7

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 25. Nov 2020, 11:49
Okay, danke für den Hinweis. Dann werde ich mir einmal die Version 6.0 anschauen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:23 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