mmotop20oo12
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте, пишу шифр RSA, засел над методом поиска числа D, вот как выглядит утверждение Вычисляется число d, мультипликативно обратное к числу e по модулю φ(n), то есть число, удовлетворяющее сравнению: (d * e) mod φ(n)= 1 я пробовал использовать алгоритм: Код: int a = 2; //вот тут был метод this.ToString(); (C#) int b = n, x = 0, d = 1; while (a.CompareTo(0) == 1) { int q = b/(a); int y = a; a = b % a; b = y; y = d; d = x - (q * d); x = y; } x = x%(n); if (x.CompareTo(0) == -1) { x = (x+(n))%(n); } return x; | но он выдает неверное число, которое не удовлетворяет условию. Признаю, пишу на C#, но тема связанная с этим языком, малопосещаема, я решил, попробовать спросить тут, как-никак, думаю, что тут особой разницы нет. но этот метод я переделал он был изначально сделан под класс bigInt(видимо на языке Java), т.к. конструктора, принимающего, строку нет, да и это строка меня в ступор вводит: BigInteger a = new BigInteger(this.ToString()); //я реализую метод в класс RSA, там куча полей и методов, я решил просто подставить "2", т.к. "а" меняется независимо от себя, но значение этой переменной влияет на значения других... Код: public BigInteger Inverse(BigInteger n) { BigInteger a = new BigInteger(this.ToString()); BigInteger b = n, x = Zero, d = One; while (a.CompareTo(Zero)==1) { BigInteger q = b.Div(a); BigInteger y = a; a = b.Mod(a); b = y; y = d; d = x.Substract(q.Multiply(d)); x = y; } x = x.Mod(n); if (x.CompareTo(Zero) == -1) { x = (x.Add(n)).Mod(n); } return x; } | Но я бы лучше реализовал этот метод просто, для int значений, есть какой-нибудь тривиальный алгоритм? Спасибо! |