В 7-й Delphi всё работало без ошибок:
const
csCryptFirst = 20;
csCryptSecond = 230;
csCryptHeader = 'Crypted';
function TForm.CryptString(Str: String): String;
var I: Integer;
Clen: Integer;
begin
if Str = ''
then begin
Exit;
Result := '';
end;
clen := Length(csCryptHeader);
SetLength(Result, Length(Str)+clen);
Move(csCryptHeader[1], Result[1], clen);
For i := 1 to Length(Str) do
begin
if i mod 2 = 0
then Result[i+clen] := Chr(Ord(Str[i]) xor csCryptFirst)
else Result[i+clen] := Chr(Ord(Str[i]) xor csCryptSecond);
end;
end;
function TForm.UnCryptString(Str: String): String;
var I: Integer;
Clen: Integer;
begin
Result := '';
if Str ='' then Exit;
Clen := Length(csCryptHeader);
SetLength(Result, Length(Str)-Clen);
ShowMessage(Copy(Str, 1, clen));
If Copy(Str, 1, clen) <> csCryptHeader then
raise ECryptError.Create('Файл поврежден!');
For i := 1 to Length(Str)-clen do
begin
if (i) mod 2 = 0
then Result[i] := Chr(Ord(Str[i+clen]) xor csCryptFirst)
else Result[i] := Chr(Ord(Str[i+clen]) xor csCryptSecond);
end;
end;
А теперь шифруется информация некорректно - контрольное слово 'Crypted' постоянно обрезается. Ясно, что ошибка связана с переходом на юникод... но все попытки решить проблему самостоятельно не увенчались успехом.
Очень нужна помощь в решении данной проблемы!