Код, который вы представили, похоже, просто выполняет XOR для каждого 4-битного куска данных (т.е. эквивалент одного шестнадцатеричного символа за раз).
Битовые операции &
и сдвиг просто маскируют конкретный набор битов, которые будут использоваться в каждом раунде цикла for
. Вам не нужно «восстанавливать» потерянные биты, поскольку все, что делается, - это создание битовой маски.
Поскольку это прямое шифрование XOR, оно имеет следующую процедуру дешифрования:
unsigned long long result = 0;
for( i=0; i<16; i++ )
{
int n = 4*(i % keyLen);
int k = (key & (0xF << n)) >> n;
result |= value&(0xF << 4*i) ^ (k<<4*i);
}
Что является процедурой шифрования (шифрование XOR расшифровывается путем выполнения зашифрованного текста через процедуру шифрования с тем же ключом).
Конечно, я чувствую себя обязанным отметить, что шифрование XOR - это просто игрушка - оно невероятно слабое и легко взломанное. Поэтому я надеюсь, что вы просто играете или учитесь.
К сожалению, этот код часто встречается в реальных продуктах ...