在delphi中反转加密

时间:2011-11-16 07:31:18

标签: windows delphi delphi-7 delphi-xe2

编写此代码的不是我,而是以前的程序员。但是,我注意到他没有提供解密算法,导致加密无用。

我该如何解密?

function Encrypt(jstr: String): String;
var
  I: Integer;
  A: Real;
begin
  if Length(jstr) = 0 Then begin
    Result := '';
    Exit;
  end;
  A := 0;
    for I := 0 To Length(jstr) do
      A := A + (Ord(jstr[I]) * Pos(jstr[I],jstr)) / 33;
  Result := FormatFloat('0000000000.0000000000',A);
  if Pos(',',Result) > 0 then begin
    Insert('.',Result,Pos(',',Result));
    Delete(Result,Pos(',',Result),1);
  end;
end;

谢谢!

2 个答案:

答案 0 :(得分:20)

它看起来像单向哈希,因此不可逆。例如,字符串是非常大的,结果仍然是浮点数的字符串表示。

答案 1 :(得分:16)

该功能无法逆转。由于它接受任意长度的输入并返回有限长度的输出,简单的信息理论告诉你试图写一般逆的无用。即使对于较短的输入字符串,在我看来,不同的输入字符串可以产生相同的加密字符串。

即使作为哈希,由于浮点代码的奇怪使用,这个函数对我来说似乎非常脆弱。如果我是你,我会用更符合目的的东西替换这个功能。

最后,我建议您对此开发人员生成的所有代码进行审核。这个代码和算法的低质量告诉我,这个开发人员所触及的一切都有可能存在缺陷。