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