【问题标题】:Delphi encryption algorithm德尔福加密算法
【发布时间】:2015-09-06 18:41:21
【问题描述】:

我使用此代码加密文件:

procedure TForm9.EnDecryptFile(pathin, pathout: string; mem:TMemo; Chave: Word);
    var
       InMS, OutMS: TMemoryStream;
       cnt: Integer;
       C,A,B: byte;
       s:string;
     begin
       mem.Clear;
       InMS := TMemoryStream.Create;
       OutMS := TMemoryStream.Create;
       try
         InMS.LoadFromFile(pathin) ;
         InMS.Position := 0;
         for cnt := 0 to InMS.Size - 1 do
           begin
             InMS.Read(C, 1) ;
             A:=c;
             C := (C xor not (ord(chave shr cnt))) ;
             mem.Lines.Add(IntToStr(A)+^I+IntToStr(C));
             OutMS.Write(C, 1) ;
           end;
     OutMS.SaveToFile(pathout) ;
   finally
     InMS.Free;
     OutMS.Free;
   end;
 end;

当我在表单中添加 meme 控件并在加密之前/之后检查大约 2000 个字节时,我根本不了解算法。请帮助我理解这个标题:

  • Xor 与非运算的组合。

请使用示例来展示算法操作。谢谢。

【问题讨论】:

  • 您为什么不阅读文档而不是我们记录语言基础知识?
  • 你已经看到例如这个 q: "stackoverflow.com/questions/9482352/…" 及其 cmets + 答案?
  • 对不起!我对 XOR 的组合有疑问,请在此步骤中提供帮助。
  • 首先,请参阅en.wikipedia.org/wiki/XOR_cipher。 XOR 编码/解码将字节的位与密钥的位相结合。用相同的密钥对字节进行两次异或运算会将其恢复到原来的状态。 “not (ord(chave shr cnt))”根据 InMS 中正在加密/解密的字节位置和 Chave 的值生成密钥。在该行上放置一个断点并在调试器中观察它发生的情况。

标签: delphi encryption


【解决方案1】:

请帮助我理解xor 和not 操作的组合。

我从您的更新中得知您了解各个运算符的含义,但不确定表达式的含义

C xor not (ord(chave shr cnt))

被解释。

这个表达式的含义由operator precedence决定。从该链接可以看出,not 的优先级高于xor。所以在

C := (C xor not (ord(chave shr cnt)));

评估not,然后评估xor。这个赋值相当于:

A := ord(chave shr cnt);
B := not A;
C := C xor B;

请注意,在问题中的代码中,

C := (C xor not (ord(chave shr cnt)));

是虚假的,可以删除。确实,这行代码可以写成:

C := C xor not ord(chave shr cnt);

尽管在这种情况下明确优先级并写下可以说更清楚:

C := C xor (not ord(chave shr cnt));

【讨论】:

  • 哦,谢谢!我明白。所有这些暴力行为都不是大卫赫弗南的必要条件。
  • 没有暴力。我们只是想弄清楚你在问什么。起初,您似乎不知道任何其他运算符的含义。然后通过编辑,很明显优先级是关键。当你只是写字时很容易误解。例如,在我的文化中,ALL CAPITAL TEXT 被认为是粗鲁的,但我认为你只是没有意识到这一点。所以我们什么都没做。
  • 大卫,为什么 chave shr cnt 返回字节(小于 256)。定义为单词,cnt 定义为整数。
  • 不知道。看不到那个代码。不在问题中。我想我回答了你问的问题。当然,例如65535 shr 10 < 256。
  • 您链接到的那个文档描述了它。 Delphi shr 是逻辑右移。
猜你喜欢
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2011-10-04
  • 2012-12-13
  • 1970-01-01
相关资源
最近更新 更多