【问题标题】:Reverse decryption algorithm using binary operations使用二进制运算的反向解密算法
【发布时间】:2022-01-13 08:56:04
【问题描述】:

我有一个解密算法,其中x 是一个 8 位整数:

function decrypt(x){
    return move(x, 2) ^ (move(x, 1) & move(x, 3));
}

function move(x, n) {
  return ((x >> (8 - n)) & 255) | ((x << n) & 255);
};

我想逆向操作,找到加密函数。

【问题讨论】:

  • &amp;(按位与)运算符存在删除信息的问题,因此该函数不能对所有可能的字节值进行排列。 leftShift 并不是真正的移位,它通常被称为rotate 函数,因为它在右侧重新引入了位。提示:只需遍历所有 256 个值并创建一个表。
  • 从编辑的角度来看:始终使您的标题尽可能具体。始终包含该语言的标签。像添加大量感叹号这样的想法被认为是幼稚的,并且不太可能获得良好的回应。
  • x 和加密的所有可能值的完整表怎么样?将占用 256 个字节,并且将成为一个闪电般快速的编码器。
  • @MrSmith42:如前所述,无法反转函数,因为它不是排列。
  • @President James K. Polk:也许只有 0...255 的子集作为输入有效(8 位输入并不一定意味着所有 8 位值都是可能的)。对于子集,可能存在双射。

标签: javascript algorithm encryption


【解决方案1】:

这是不可能的,因为decrypt 不是bijection,即它不可逆。

以这些数字为例:

85, 91, 107, 109, 170, 173, 181, 182, 214, 218

如果您将这些数字中的任何个传递给decrypt,则返回值将是255。那么如果给您255,假设的encrypt 必须返回什么?事实是,255 没有足够的信息告诉你它来自哪里。

这只是一个反例。还有其他一组数字具有相同的decrypt 输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2017-02-10
    • 2013-02-27
    • 2018-05-20
    • 2014-09-14
    • 2011-01-25
    相关资源
    最近更新 更多