【问题标题】:Reverse ^ operator for decryption用于解密的反向 ^ 运算符
【发布时间】:2015-06-22 15:53:50
【问题描述】:

我正在尝试反转以下代码,以提供一个获取缓冲区并对其进行解密的函数。

void crypt_buffer(unsigned char *buffer, size_t size, char *key) {
    size_t i;
    int j;

    j = 0;
    for(i = 0; i < size; i++) {
        if(j >= KEY_SIZE)
            j = 0;
        buffer[i] ^= key[j];
        j++;
    }
}

如果一个简单的buffer[i] ^= (1/key[j]); 足以解密加密文件,我正在措辞。但是截断会有一些问题,不是吗?

【问题讨论】:

  • 你应该修正你的缩进。
  • 不是很安全的加密算法,见Vigenère cipher

标签: c algorithm security math encryption


【解决方案1】:

这不是幂运算符。它是 XOR 运算符。您注意到 XOR 运算符是 x ^ k ^ k == x。这意味着当使用相同的密钥和密文而不是明文调用时,您的加密函数已经是解密函数。

【讨论】:

  • 谢谢,我应该先看一下运算符表,用 C 编码一段时间
  • 另外,仅供参考……这种密码算法被称为“一次性密码”。维基百科上有一篇不错的文章。
  • @BrianMcFarland:如果key 数据至少与buffer 一样长,您只能说您使用了“一次性垫”,否则@987654324 @test 开始,它第二次开始使用“pad”,并且进一步:相同的key 数据不再用于加密其他数据。
  • 好收获。错过了那部分。实际上,我猜j &gt;= KEY_SIZE 让这个算法实际上对除了玩具之外的任何东西都没有用——或者是为了演示为什么你永远不应该重用密钥的程序。尽管暴力破解的脆弱程度/努力程度与 KEY_SIZE:size 比率成正比。
【解决方案2】:

在 C 中,^ 不是“幂”运算符(没有这样的运算符)而是“异或”运算符。

这对你来说是个好消息(我假设),因为“xor”的反向操作就是“xor”本身:-)

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2017-02-10
    • 2018-07-08
    • 1970-01-01
    • 2011-04-15
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    相关资源
    最近更新 更多