我使用了这个加密纯文本的简单代码。然后我尝试使用相同的加密方法解密它,但在加密部分反转。有一个乘法过程,我不知道如何在解密代码中反转它。
以下是代码:
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;
答案 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
代替返回一个整数。