Я хочу внедрить RSA, и для этого мне нужно сгенерировать e
, который должен быть gcd(e, ø(n)) = 1 and 1 < e < ø(n)
, а также должен быть очень близок по размеру к ø(n)
. мой алг. ниже учитываются первые два шага, но сгенерированное число довольно мало. Как я могу создать больший?
// generate random p,q,r on 512 bits
p = new BigInteger(512, 15, new Random());
q = new BigInteger(512, 15, new Random());
r = new BigInteger(512, 15, new Random());
// calculate n = p*q*r
n = p.multiply(q);
n = n.multiply(r);
//calculate ø(n) = (p - 1)*(q - 1)*(r - 1)
ø_n = p.subtract(BigInteger.valueOf(1));
ø_n = ø_n.multiply(q.subtract(BigInteger.ONE));
ø_n = ø_n.multiply(r.subtract(BigInteger.ONE));
do {
e = new BigInteger(2 * 512, new Random());
} while //while e >= ø_n
((e.compareTo(ø_n) >= 0)
|| //while gcd(e, ø(n)) != 1
(e.gcd(ø_n).compareTo(BigInteger.ONE) != 0));
Проверьте цикл while
, все остальное — просто инициализация.
BigInteger.ONE
- person fge   schedule 01.04.2014SecureRandom
? - person Piotr Müller   schedule 01.04.2014e = ø_n - 1
не должно иметь общих делителей сø_n
, и это самый большой из возможных делителей. - person Ingo   schedule 01.04.2014p,q,r
? - person George Irimiciuc   schedule 01.04.2014