Реверсивное шифрование в Delphi - PullRequest
1 голос
/ 16 ноября 2011

Этот код написал не я, а предыдущий программист. Однако я заметил, что он не предоставил алгоритм расшифровки, что делает шифрование бесполезным.

Как я могу расшифровать это?

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 ]

20 голосов
/ 16 ноября 2011

Это выглядит как односторонний хэш и, следовательно, не является обратимым.Например, если строка очень велика, результатом остается строковое представление числа с плавающей запятой.

16 голосов
/ 16 ноября 2011

Эта функция не может быть отменена.Поскольку он принимает входные данные произвольной длины и возвращает выходные данные конечной длины, простая теория информации говорит о тщетности попыток написать общее обратное.Даже для более коротких входных строк мне кажется, что разные входные строки могут привести к одной и той же зашифрованной строке.

Даже в качестве хэша эта функция кажется мне очень хрупкой из-за странного использованияКод с плавающей запятой.На вашем месте я бы заменил эту функцию на что-то более подходящее для этой цели.

Наконец, я рекомендую вам провести обзор всего кода, созданного этим разработчиком.Низкое качество этого кода и алгоритма подсказывает мне, что все, к чему прикасался этот разработчик, может иметь дефекты.

...