Как отмечается в комментарии starblue, «имейте в виду, что это в лучшем случае запутывание, а не шифрование». И это, вероятно, даже не запутывание.
Одним из свойств XOR является то, что (Y xor 0) == Y
. Что это означает для вашего алгоритма, так это то, что для любого места в вашем очень большом файле, где есть прогоны нулей (что, по всей видимости, с учетом размера файла), ваш ключ будет отображаться в файле шифра. Обычный день.
Еще одна приятная особенность зашифрованных данных XOR заключается в том, что если у кого-то есть и открытый текст, и зашифрованный текст, то XOR, объединяющий эти элементы вместе, дает вам выход, в котором ключ, используемый для выполнения шифра, повторяется снова и снова. Если человек знает, что эти 2 файла являются парой открытого текста / зашифрованного текста, он узнал ключ, который является плохим, если ключ используется для более чем одного шифрования. если злоумышленник не уверен, что открытый текст и зашифрованный текст связаны между собой, он получит довольно хорошую идею после этого, поскольку ключ является повторяющимся шаблоном в выходных данных. Ничто из этого не является проблемой с одним временным блоком, потому что каждый бит клавиши используется только один раз, поэтому один узнает что-то новое из этой атаки.
Многие люди допускают ошибку, полагая, что поскольку одноразовая клавиатура доказуемо неразрывна, шифрование XOR может быть в порядке, если оно выполнено правильно, поскольку основная операция выполняется одинаково. Разница в том, что один временный блок использует каждый случайный бит ключа ровно один раз. Таким образом, среди прочего, если в открытом тексте есть ряд нулей, о ключе ничего не известно, в отличие от простого шифра XOR с фиксированным ключом.
Как сказал Брюс Шнайер: «В этом мире существует два вида криптографии: криптография, которая не дает вашей младшей сестре читать ваши файлы, и криптография, которая не дает крупным правительствам читать ваши файлы».
Шифр XOR едва ли является доказательством младшей сестры - если даже это.