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.