Здравствуйте. Помогите разобраться с алгоритмом генерации публичной и приватнйо экспоненты. С алгоритмами у меня не очень, поэтому вопрошаю здесь. Нашел в инете пример алгоритма, адоптировал его: 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)
- Форум PRIME наоборот (2015)
- Форум Nvidia Prime (2014)
- Форум Nvidia prime (2023)
- Форум RSA & OpenCL (2011)
- Форум easy-rsa (2014)