函数返回不同的结果

时间:2016-04-15 11:41:19

标签: windows delphi encryption

以下函数是使用Delphi 2007编写的遗留应用程序的基本解密例程。

function TMainFrm.DecodePsw(Passw : String) : String;
var
  i : Integer;
  ss : String;
Begin
  ss := Passw;
  for i:=1 to Length(ss) do begin
    ss[i] := Chr( Ord(ss[i]) - i*21 + 15);
  end;    
  Result := ss;
end;

在某些客户端计算机上,它会返回具有相同输入数据的不同结果,可能的原因是什么?

1 个答案:

答案 0 :(得分:3)

人们想象,问题在于它将字符串视为字节数组。但字符串的值也取决于假设的编码。而且由于您使用的是ANSI字符串,因此您的字节数组将被解释为它们以任何流行的语言环境编码。因此,相同的字节数组在Windows 1252语言环境中以一种方式解释,在Windows 1251语言环境中以另一种方式解释,依此类推。

这就是为什么您的代码在不同的计算机上表现不同的原因。究竟如何解决您的问题我不能说有限的信息存在。我会说你在这里所拥有的并不是我所说的加密,但我想你知道的。我还建议解密密码是不寻常的。这被认为是不好的做法。