Вы не задали реальный вопрос, но я все равно вижу пару проблем
double e = 2 ^ new Random().nextInt(100) % (p * q);
Я не знаю, что это должно делать, но это неправильно. Вы имели в виду Math.Pow()
, а не ^
? В любом случае, обычно вы просто используете небольшую константу с очень небольшим количеством установленных битов для e
, чтобы ускорить шифрование. e=3
или e=65
будет работать нормально.
Похоже, вы не вычисляете закрытый ключ (d
) или даже храните открытый ключ (e
, p*q
) вообще.
Когда вы начнете использовать большие числа, int
и double
(??) не смогут их удерживать. Вместо этого используйте BigInteger
.
do {
testPow = Math.pow(test, power);
} while (!testPrime(testPow));
Если power > 1
, testPow никогда не будет простым ...
Я не смотрел на testPrime()
, но вы должны быть в состоянии написать несколько быстрых модульных тестов, чтобы убедиться, работает ли он или нет.