xor encryption:将key的值设置为904932吃掉'd'

Oma*_*bal 0 delphi encryption xor

我正在制作一个程序来实现xor加密,同时玩我的程序我输入了各种组合键,程序运行正常,直到我输入键值904932,这导致了'd'字符的省略,例如,如果我输入'我的名字是dexter,我讨厌我在编辑1中的愚蠢姐妹dede',加密和解密将使我的edit1文本:'嗨,我的名字是exter,我讨厌我的stupi姐姐ee'发生了什么?

procedure TForm2.Button1Click(Sender: TObject);
    var
     c:char;
     i,key: integer;
    begin
      s := edit1.Text;
       edit1.Text := #0;
       key := strtoint(edit2.text);
       key := key + 128;//i am adding 128  so that i dont get NULL char 
       for I := 1 to length(s)  do {or 0 to lenght(s)? i dont know}
      begin
       c := s[i];
       c := char(ord(c) xor key);
       edit1.Text :=  edit1.Text + c;
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

A.B*_*hez 5

添加128无法解决您的问题.它只是移动它.

你的"xor密钥"只是你密钥的最后一个字节,在904932的情况下是$ E4.$ E4 + 128将被舍入(即-256)到字节值100,这是"d"的ASCII值.这就是你的"d"消失的原因.

所以我想如果你想显示加密文本,不应该使用这样的xor算法.我建议你做一些简单的排列算法.

  • D2009 +版本会显示相同的问题,只是舍入偏移量为65536而不是256,因为密钥是32位整数.所以关键数字是另一个,但很容易猜到,例如65508会删除相同的'd'字符,因为65508 = 65536-128 + 100. (2认同)