Здравствуйте. Помогите разобраться с алгоритмом генерации
публичной и приватнйо экспоненты. С алгоритмами у меня не очень,
поэтому вопрошаю здесь. Нашел в инете пример алгоритма,
адоптировал его:
static int result, result2;
/* расширенный алгоритм эвклида */
int gcd(int u, int v)
{
int q, tn, u1, u3, v1, v3;
u1 = 1;
u3 = u;
v1 = 0;
v3 = v;
while (v3 > 0)
{
q = u3 / v3;
tn = u1 - v1 * q;
u1 = v1;
v1 = tn;
tn = u3 - v3 * q;
u3 = v3;
v3 = tn;
}
result = u1;
result2 = (u3 - u1 * u) / v;
return u3;
}
void main(void)
{
int n, phi, e, d, are, are2;
/* calculate modulues and phi */
n = p * q;
phi = (p - 1) * (q - 1);
/* initialize e */
e = n / 3;
e += rand() + n;
/* calculate e and d */
while (e > 0)
{
/* e must be less than phi */
while (e > phi)
e /= 2;
e /= 2;
/* check if the e is prime */
are = gcd(e, phi);
d = result;
if (are == 1)
{
are2 = gcd(result, phi);
if (result == e)
{
if (e != d)
break;
/* нашли e и d */
}
}
e = e - 2;
if (e <= 0)
{
e = n / 3;
e += rand() + n;
}
}
}
Здесь имеется ввиду, что е - публичная экспонента, а d -
приватная.
Проблема в том, что не всегда генерируются корректные e и d.
К примеру, при P=61 и Q=53 все ок (e = 37, d = 253).
А при p=17, q = 13 => e = 19, d = 91, и алгоритм не работает (
шифрования/дешифрования). Подскажите, где у меня ошибка ?
Алгоритм взят с http://www.linuxjournal.com/article/6695
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [Java] упростить/укоротить код (2011)
- Форум RSA (2009)
- Форум RSA (2006)
- Форум Бинарная совместимость, серия 3 (2023)
- Форум PRIME roguelike (2017)
- Форум Nvidia prime (2023)
- Форум easy-rsa (2014)
- Форум Nvidia Prime (2014)
- Форум RSA +perl (2013)
- Форум PRIME наоборот (2015)