Moin zusammen!
Ich habe einen Teil einer alten Anwendung in D7 auf D10.2 Tokyo zu portieren. Dabei geht es, den alten Sourcen nach, um eine AES-Verschlüsselung nach Rijndael. Genaueres steht da leider nicht drin, der ursprüngliche Entwickler kann nicht mehr befragt werden.
Diesen Teil habe ich erfolgreich nach Lazarus 2.0.10 portiert. Damit kann ich Strings, die aus einer
DB kommen, entschlüsseln. Aber dieser Mechanismus von Lazarus nach Tokyo portiert funzt nicht
.
Das ist gegeben:
Delphi-Quellcode:
const
LocalCryptval=12345;
type
Str2=String[2];
Jetzt kommt hier noch einiges an Funktionen, u.a. auch Assembler-Code. Wie gesagt - mit Lazarus funktioniert es, aber
Delphi-Quellcode:
class function TTools_Crypt.HexToByte(b: Str2): Byte;
begin
while Length(b)<2 do b:='0'+b;
Result:=HexToNibble(b[1]) shl 4 + HexToNibble(b[2]);
end;
class function TTools_Crypt.HexToNibble(n: Char): Byte;
const
HexNib: Array[0..$F] of Char=
('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
var
i: Byte;
begin
Result:=0;
for i:=0 to $F do
if UpCase(n)=HexNib[i] then Result:=i;
end;
compiliert und funktioniert in Lazarus einwandfrei. Delphi aber meckert hier
[dcc32 Fehler] Tools.pas(281): E2010 Inkompatible Typen: 'Char' und 'AnsiChar'
für b[1] und b[2]. Mache ich einen Typecast
Result:=HexToNibble(char(b[1])) shl 4 + HexToNibble(Char(b[2]));
compiliert das zwar, die Entschlüsselung liefert dann aber ein falsches Ergebnis (irgendwelche chinesischen Zeichen) zurück.
Wie setze ich das dann richtig um, damit auch Delphi das korrekt macht?
LG aus dem Norden, Edmund