Следующая процедура Delphi возникла из давней публикации CompuServe и используется для шифрования различной информации в нашей базе данных. Ниже представлены обе версии Delphi 2007 и (благодаря некоторой помощи SO с различиями Unicode) версии Delphi XE.
Мы пытались преобразовать это в C #, и получили что-то похожее, но где-то нам что-то не хватает. К сожалению, наш парень из Delphi ( me) не знает C #, а специалист по C # - новичок в Delphi. C # (похоже) не имеет концепции AnsiString, поэтому решение, вероятно, будет включать в себя массивы байтов или символов?
Мы были бы очень признательны любая помощь в преобразовании этого кода в C #.
Версия Delphi 2007 (ASCII)
function EncodeDecode(Str: string): string;
const
Hash: string = '^%12hDVjED1~~#29afdmSD`6ZvUY@hbkDBC3fn7Y7euF|R7934093*7a-|- Q`';
var
I: Integer;
begin
for I := 1 to Length (Str) do
Str[I] := chr (ord (Str[I]) xor not (ord (Hash[I mod Length (Hash) + 1])));
Result := Str;
end;
Версия Delphi XE (Unicode)
function TfrmMain.EncodeDecode(Str: AnsiString): AnsiString;
const
Hash: string = '^%12hDVjED1~~#29afdmSD`6ZvUY@hbkDBC3fn7Y7euF|R7934093*7a-|- Q`';
var
I: Integer;
begin
Result := Str;
for I := 1 to Length (Result) do
Result[I] := AnsiChar (ord (Result[I]) xor not (Ord (Hash[I mod Length (Hash) + 1])));
end;