编写此代码的不是我,而是以前的程序员。但是,我注意到他没有提供解密算法,导致加密无用。
我该如何解密?
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;
谢谢!
答案 0 :(得分:20)
它看起来像单向哈希,因此不可逆。例如,字符串是非常大的,结果仍然是浮点数的字符串表示。
答案 1 :(得分:16)
该功能无法逆转。由于它接受任意长度的输入并返回有限长度的输出,简单的信息理论告诉你试图写一般逆的无用。即使对于较短的输入字符串,在我看来,不同的输入字符串可以产生相同的加密字符串。
即使作为哈希,由于浮点代码的奇怪使用,这个函数对我来说似乎非常脆弱。如果我是你,我会用更符合目的的东西替换这个功能。
最后,我建议您对此开发人员生成的所有代码进行审核。这个代码和算法的低质量告诉我,这个开发人员所触及的一切都有可能存在缺陷。