Это не побитовый XOR - это фактически побитовый шифр замещения .Вы понимаете, что это только «шифрование» в самом широком смысле этого слова, верно?
В основном вам понадобится два шага:
- Пишите методы для транспонирования битов для шифрования / дешифрования,каждый из которых принимает 32-разрядное целое число и возвращает 32-разрядное целое число
- Считывает файл по одному 32-разрядному целому числу за раз, применяет соответствующую операцию и записывает результат в другой файл.Возможно, вы захотите использовать
BinaryReader
и BinaryWriter
для этого.
(Очевидно, вы можете оптимизировать с буферизацией, но это общая суть.)
Вы можете найти этопроще всего работать с uint
вместо int
, чтобы не волноваться о знаковых битах.Примерно так:
public static uint Encrypt(uint input)
{
return (((input >> 0) & 1) << 26) |
(((input >> 1) & 1) << 31) |
(((input >> 2) & 1) << 17) |
...
(((input >> 31) & 1) << 5);
}
Вы можете сделать эту таблицу управляемой с таблицей для шифрования и таблицей для дешифрования, но я не уверен, что буду беспокоиться.
Обратите внимание, чтоесли вы на самом деле используете это для хранения конфиденциальной информации, вы должны начать использовать real шифрование как можно скорее.