我已经生成了p,q,n和totient,并且需要生成e 1 < e < totient
和e
和totient
是互质的。我正在使用我的代码遇到的问题是我首先生成totient(正常(p-1)*(q-1)
方式)但是当我尝试生成一个coprime e时,它通常会使用此代码永远运行
const mpz_class RsaKeys::compute_e(mpz_class totient) const {
dgrandint e(bits_);
while ((e.get_mpz_class() < totient) ||
!is_coprime(e.get_mpz_class(), totient)) {
std::cerr<<e.get_mpz_class()<< " is not coprime with "<<totient<<std::endl;
e.reroll();
}
return e.get_mpz_class();
我正在测试低位整数8-32,并且实际上需要处理1024位值,但我需要一种方法来首先检查生成的totient
是否具有任意数量的可能值使它成为互质的。我只找到了检查值是否为互质的方法,但是如果已存在的数字存在互补的互质值则不会。
答案 0 :(得分:0)
e
的值不需要是随机的,实际上大多数RSA系统使用少量常见e
值中的一个,最常用的是65537。