Deszyfryzacja xora

0

Mam funkcję szyfrującą:

 int szyfruj ( int n )
{
        return n ^ (n >> 1);
}

Mam teraz napisać do tego funkcję odszyfrywującą, tj. dla danego n ma zwrócić wartość jakby n było wynikiem szyfruj(n) i jaka to wartość.
Ta funkcja to po prostu n xor (n/2)
nie wiem jednak jak to odwrócić. Dla przykładu dla n = 123, funkcja szyfruj zwraca 70, a funkcja odszyfruj ma zwrocic 82, bo szyfruj(82) = 123.

Pomoze ktos?

1

:s/Deszyfryzacja xora/Deszyfrowanie danych zaszyfrowanych za pomocą XOR-a
Możesz na przyszłość wcześniej sprawdzić w Google zanim zapytasz na forum... - ale i tak fajne zagadnienie :>

Notatki zrobione:

10110110
 1011011

11101101
 1110110
100

[0]   [0^1] [1^2] [2^3] [3^4]
>> 1  [0]   [0^1] [1^2] [2^3]
[0]   [1]   [0^2] [1^3] [2^4]

[0]   [1]   [0^2] [1^3] [2^4]
>> 2        [0]   [1]   [0^2] [1^3] [2^4]
[0]   [1]   [2]   [3]   [4]

Kod napisany:

#include <stdint.h>

uint16_t encrypt(uint16_t n)
{
    return n ^ (n / 2);
}

uint16_t decrypt(uint16_t n)
{
    n ^= (n >> 1);
    n ^= (n >> 2);
    n ^= (n >> 4);
    n ^= (n >> 8);
    return n;
}

int main()
{
    int i;
    scanf("%d", &i);
    int c = encrypt(i);
    int d = decrypt(c);
    printf("i=%d c=%d d=%d", i, c, d);
}

Wynik osiągnięty:

D:\>a
123
i=123 c=70 d=123
D:\>a
124
i=124 c=66 d=124
D:\>a
125
i=125 c=67 d=125
D:\>a
126
i=126 c=65 d=126
D:\>a
0
i=0 c=0 d=0

1 użytkowników online, w tym zalogowanych: 0, gości: 1