Довольно близко к уже задавал XOR Encryption in Java: losing data after decryption:Каковы недостатки операции XOR с SecureRandom потокового
XORing с потоковым производимым посеяно SecureRandom выглядит просто и быстро, например:
byte[] data = <data to encrypt>
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
random.setSeed("myPassword".getBytes(Charset.forName("UTF-8")));
byte[] mask = new byte[1];
for(int ii = 0; ii < len; ii++) {
sr.nextBytes(mask);
data[ii] = (byte)(0xFF & (data[ii]^mask[0]));
}
В таком подходе в не наиболее часто используемое симметричное шифрование, каковы его проблемы?
Это реализует [одноразовый блокнот] (https://en.wikipedia.org/wiki/One-time_pad), который нацелен на то, что криптоанализ будет невозможным. Если выполняются следующие ограничения. 1) ключ имеет одинаковую длину (количество генерируемых случайных байтов) в качестве входного сообщения. 2) вы никогда не будете использовать тот же ключ еще раз (означает, что сгенерированные случайные байты никогда не находятся в одном порядке). В вашем примере вы никогда не должны использовать один и тот же массив байтов для 'setSeed()'. Для exmplanation, почему это спасение, посмотрите на [Попытка криптоанализа] (https://en.wikipedia.org/wiki/One-time_pad#Attempt_at_cryptanalysis). – SubOptimal