Теоретически безопасно ли сначала кодировать строку с помощью Base64, а затем XOR со случайным ключом, или есть потенциальные уязвимости, которые можно использовать?
Нет, это безопасно. Это может быть даже немного более безопасным, если кодировка удаляет некоторую информацию о размере.
Однако, исключающее ИЛИ шифрование безопасен только в том случае, если он точно соответствует одноразовому блокноту, а не многоразовому блокноту; то есть ключевой поток, который XOR'ed, теперь должен быть до тех пор, пока сообщение в кодировке base 64. В случае использования многоразового блокнота кодировка base 64, скорее всего, обеспечит более информацию об открытом тексте злоумышленнику.
Очевидно, что на практике это не имеет никакого смысла, но мне было любопытно, будет ли это так же безопасно, как XOR, а затем Base64.
Что ж, если это имеет смысл, иногда необходимо шифровать такие вещи, как строки XML и JSON, и это в основном означает шифрование встроенной кодировки base 64 (если есть).
Тем не менее, практически нет причин кодировать base 64 перед шифрованием, если у вас уже есть двоичный формат сообщения. Кроме того, вам гораздо лучше использовать хорошую схему AEAD, чем какой-либо шифр на основе XOR, даже если он напоминает одноразовый блокнот.