c中的异或加密代码。但我无法理解具体的行

xor encryption code in c. but I can't understand specific line

大家好,我是c语言新手,英语不好。

我有一个问题。

int _len = len+24;
while(_len>0 || count%24){
    if(ind<24) msg[ind] = bytes[ind];
    else{
        msg[ind] = (_len>0?buf[ind-24]:'@')^msg[ind-24];
    }
    ++ind;
    --_len;
    ++count;
}

这是加密代码。

但我无法理解 else 中的第 4 行。

我认为只是对索引为 -12 的数组的特定索引进行异或运算。

我猜对了吗?

图1是我的目的

我的代码适合图1吗?

请给我解释一下。

谢谢。

您可以重写该语句以使其更明显:

    msg[ind] = (_len>0?buf[ind-24]:'@')^msg[ind-24];

相同
    char tmp;
    if (_len >0)
      tmp = buf[ind-24];
    else
      tmp = '@';

    msg[ind] = tmp ^ msg[ind-24];

在没有更多上下文的情况下,我只需要假设一些事情:

  • buf 似乎是一个 char 数组,其中包含要加密的消息。
  • msg是一个char数组,用于存储加密信息。
  • bytes 可能是一个保存加密密钥的数组。这也是用来填充msg.
  • 的前24个字节
  • 前 24 个字节后 msg 的每个元素都是通过将 buf 的值与我们之前计算的 24 个字节的加密值进行异或计算得到的。
  • 如果输入消息中没有更多字节,循环将继续进行 24 次迭代的倍数,现在使用 '@' 替换输入消息。

基本上,由 24 个字符组成的密钥用于异或给定文本。由于前 24 个字节似乎包含密钥,因此并没有什么秘密。 ;)