Einzelnen Beitrag anzeigen

Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#1

Entschlüsselung von D7 auf D10.2 Tokyo portieren

  Alt 8. Okt 2020, 07:50
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
  Mit Zitat antworten Zitat