如何使用XOR解密移位的消息?

时间:2019-05-30 22:27:05

标签: encryption cryptography shift mod

我收到一条消息m,该消息已通过代码进行加密

c = m xor [m<<6] xor [m<<10] 

({m<<x意味着我将其移位了x位-例如1001 << 2 = 0100)

我需要解密此消息。

我尝试过以下代码:

c xor [c<<6] xor [c<<10]

OR

c xor [c>>6] xor [c>>10] 

但没有一个起作用。

1 个答案:

答案 0 :(得分:0)

函数c = m xor [m<<6] xor [m<<10]是一个双射(即在给定模2 n 上是可逆的)。所以你很高兴...

从最低位开始,逐段对值进行6和10位的异或。

int main() {
    uint32_t n = 0xfffffff;
    for (uint32_t m = 0; m < n; ++m) {

        uint32_t c = m ^ (m << 6) ^ (m << 10); // c = encrypted value

        uint32_t x = c;
        x ^= ((x &       0x3F) << 6);
        x ^= ((x &      0x3FF) << 10);
        x ^= ((x &      0xFC0) << 6);
        x ^= ((x &    0x3F000) << 6);
        x ^= ((x &    0xFFC00) << 10);
        x ^= ((x &   0xFC0000) << 6);
        x ^= ((x & 0x3F000000) << 6);
        x ^= ((x & 0x3FF00000) << 10);

        if (m != x) {
            printf("Mismatch: %X > %X > %X\n", m, c, x); // should never happen
            break;
        }
    }
}