John Rosenberg
John Rosenberg

Reputation: 617

Reversing encryption in delphi

It was not me who wrote this code, it was the previous programmer. However, I noticed he didn't provide a decryption algorithm, rendering the encryption useless.

How can I decrypt this?

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;

Thanks!

Upvotes: 1

Views: 615

Answers (2)

David Heffernan
David Heffernan

Reputation: 613013

That function cannot be reversed. Since it takes input of arbitrary length and returns output of finite length, simple information theory tells you the futility of attempting to write a general inverse. Even for shorter input strings it seems to me that different input strings can result in the same encrypted string.

Even as a hash this function seems very brittle to me due to the bizarre use of floating point code. If I were you I would replace this function with something more fit for purpose.

Finally, I recommend that you undertake a review of all code produced by this developer. The low quality of this code and algorithm suggests to me that everything that this developer touched is liable to have defects.

Upvotes: 16

Steve
Steve

Reputation: 1865

It looks like a one way hash and hence is not reversible. For example, is the string is very big the result is still a string representation of a float.

Upvotes: 20

Related Questions