Я получил этот код:же случайная гарантия
BigInteger bigInteger = new BigInteger(64, new Random());
Long longValue=-Math.abs(bigInteger.longValue());
int desiredLen=384;
Random random=new Random(longValue);
byte [] randomString=new byte[desiredLen];
for(int i=0;i<desiredLen;i++)
randomString[i]=(byte)(Math.abs(random.nextInt())&255);
Теперь эти значения:
- longValue - отправляется на другую сторону (сервер), а затем используется для генерации ключа снова на другом сторона
- randomString - это ключ шифрования генерируется случайным образом на основе longValue
Просто, клиент посылает MESSA ge, содержащий первые 8 байтов longValue и другие вещи, является зашифрованным контентом randomString.
Какова гарантия того, что точно такие же числа будут созданы на всех физических и виртуальных машинах и во всех версиях Java на основе полученных longValue? А как насчет того, написан ли клиент на другом языке, таком как C#?
Вы можете значительно сократить свой код, используя [Random.nextLong] (http://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextLong--) и [ Random.nextBytes] (http://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextBytes-byte:A-). – VGR
Вы абсолютно не должны использовать 'Random' для безопасного шифрования. Тривиально отменить. Вы захотите использовать потоковый шифр, например. chacha20 – the8472