解密不起作用>>>

时间:2012-12-26 15:49:03

标签: delphi encryption

我使用了这个加密纯文本的简单代码。然后我尝试使用相同的加密方法解密它,但在加密部分反转。有一个乘法过程,我不知道如何在解密代码中反转它。

以下是代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
  count, ilength: Integer;
begin
  s := edit1.Text;
  ilength := Length(s);
  FOR count := 1 to ilength do
  begin
    s[count] := chr(ord(s[count]) * 4 + 1); // Encoding
  end;
  Label1.caption := s;
  // Display encoded text
  // Decoding section
  // This will probably be placed in another procedure.
  FOR count := 1 to ilength do
  begin
    s[count] := chr(ord((s[count]) / 4) - 1);
    // Here I Get An Error ! Please Help Guys, Thanks
  end;
end;

2 个答案:

答案 0 :(得分:10)

您正在尝试执行整数除法。在Delphi中,您使用div执行此操作。 /运算符用于浮点除法。查看代码,您试图反转此计算:

ord(s[count]) * 4 + 1

你反过来说:

(ord(s[count]) - 1) div 4

但是,您的算法无效。考虑加密64和128时会发生什么。您乘以4得到256和512。然后添加一个得到257和513.然后存储回8位数据类型并丢失更高阶的字节。因此,两个字符都被编码为值1。

我假设您使用的是8位文本。但是如果您使用16位文本,您的算法仍然会以完全类似的方式失败。您提出的算法是不可逆的。

我恳请您找到现成的加密算法,而不是尝试编写自己的加密算法。加密很难做到。

答案 1 :(得分:5)

您正在使用/进行分组。这将返回一个浮点。使用DIV代替返回一个整数。