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
amigage

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

DCPCrypt in RAD Studio 10.3/10.4

  Alt 17. Nov 2020, 16:52
Hallo,

ich verwendete bisher in RAD Studio 10.1 zum Verschlüsseln von Daten in Dateien die DCPCrypt Komponente V2.0 von David Barton.
Dabei nutzte ich die Funktionen EncryptCFB8Bit() zum Verschlüsseln von Informationen und Base64EncodeStr() um die Daten im Base64-Format zu schreiben.
Zum Auslesen nutzte ich Base64DecodeStr() und DecryptCFB8Bit() .
Kompiliert wurde eine 32 und eine 64 Bit Version meines Programms.

Nun wollte ich dieses Projekt auf 10.4 bringen und erhalte beim Kompilieren einen Debugger-Fehler.
Daraufhin habe ich die DCPCrypt Komponente V2.1 installiert, die bereits schon seit Jahren auf Unicode umgestellt wurde.
Der Debugger steigt auch nicht mehr aus.

Aber hier habe ich das Problem, dass ich die "alten" Dateien nicht mehr lesen kann, da Sie falsch entschüsselt werden.
Ich vermute, weil jetzt die bedingte Kompilierung {$IFDEF UNICODE} automatisch aktiviert ist und das Programm in die Dekodierung des Unicodeformats springt.


Delphi-Quellcode:
function Base64DecodeStr(const Value: AnsiString): AnsiString;
begin
{$IFDEF NEXTGEN}
  Result.SetLength((AnsiLength(Value) div 4) * 3);
  Result.SetLength(Base64Decode(@Value.GetBuffer[0],@Result.GetBuffer[0],AnsiLength(Value)));
{$ELSE}
  SetLength(Result,(Length(Value) div 4) * 3);
  SetLength(Result,Base64Decode(@Value[1],@Result[1],Length(Value)));
{$ENDIF}
end;

{$IFDEF UNICODE}
function Base64DecodeStr(const Value: UnicodeString): UnicodeString;
var
  temp: AnsiString;
begin
  temp:= AnsiString(Value);
{$IFDEF NEXTGEN}
  SetLength(Result,(AnsiLength(temp) div 4) * 3);
  SetLength(Result,Base64Decode(@temp.GetBuffer[0],@Result[1],AnsiLength(temp)) div SizeOf(Result[1]));
{$ELSE}
  SetLength(Result,(Length(temp) div 4) * 3);
  SetLength(Result,Base64Decode(@temp[1],@Result[1],Length(temp)) div SizeOf(Result[1]));
{$ENDIF}
end;
{$ENDIF}
Kann man diese UNICODE Standardeinstellung temporär umgehen, so dass ich die alten Daten noch entsprechend ausgelesen bekomme?

Vielen Dank für eure Bemühungen und Tipps.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 17. Nov 2020, 17:28
Hallo,
ich sehe ja den Interface-Teil nicht, aber

function Base64DecodeStr(const Value: AnsiString): AnsiString;
function Base64DecodeStr(const Value: UnicodeString): UnicodeString;

Kann es sein, dass die Methode überladen ist?
Dann solltest Du als Parameter einen AnsiString und nicht einen normalen String übergeben.
Heiko
  Mit Zitat antworten Zitat
amigage

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

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 17. Nov 2020, 17:40
Danke für die schnelle Antwort.
Hier ist der interface Teil.
Delphi-Quellcode:
uses
  {$ifdef NEXTGEN_FIXES}
    ORawByteString,
  {$endif}
     Sysutils;

function Base64EncodeStr(const Value: AnsiString): AnsiString; overload;
  { Encode a string into Base64 format }
function Base64DecodeStr(const Value: AnsiString): AnsiString; overload;
  { Decode a Base64 format string }
{$IFDEF UNICODE}
function Base64EncodeStr(const Value: UnicodeString): UnicodeString; overload;
  { Encode a Unicode string into Base64 format }
function Base64DecodeStr(const Value: UnicodeString): UnicodeString; overload;
  { Decode a Base64 format Unicode string }
{$ENDIF}
function Base64Encode(pInput: pointer; pOutput: pointer; Size: longint): longint;
  { Encode a lump of raw data (output is (4/3) times bigger than input) }
function Base64Decode(pInput: pointer; pOutput: pointer; Size: longint): longint;
  { Decode a lump of raw data }
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 17. Nov 2020, 18:03
Hallo,
dann siehe mein Post davor. (AnsiString benutzen)
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#5

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 18. Nov 2020, 08:29
Und eine Form von Versionskennung in deinem Dateiformat kann auch nicht schaden. Damit du in Zukunft unterscheiden kannst ob du es mit neuerem Unicode zu tun hast oder nicht.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
amigage

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

AW: DCPCrypt in RAD Studio 10.3/10.4

  Alt 18. Nov 2020, 12:09
Leider hilft auch der Typecast nicht. Das Programm ruft dann zwar die korrekte Base64 Dekodierung auf. Aber die zurückgegebene Zeichenkette ist nur halb korrekt.

Als Beispiel nehmen wir die Zeichenkette "Ein kleines Beispiel".
Die vor Jahren erstellte base64 Zeichenfolge lautet: wkzVX952oBvST6gg4kFA18IaSGsEjjc=
Will ich diese jetzt wieder mit dem richtigen Passwort dekodieren, erhalte ich z.B. nur: BÝ9ý–éžÏÕnes Beispiel"

Woran könnte es noch liegen?

Was ich vergaß, zu erwähnen: bei einer 32Bit Kompilierung unter 10.3/10.4 funktionierte die alte Version 2.0 noch tadellos. Nur bei einer 64 Bit Kompilierung stieg der Debugger mit einer Fehlermeldung aus. Was könnte der Grund dafür sein?

Geändert von amigage (18. Nov 2020 um 12:15 Uhr)
  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 20:33 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