public int Decrypt(int c1, int c2, int x, int q) { //throw new NotImplementedException(); ExtendedEuclid algorithm = new ExtendedEuclid(); int k = calculateMod(c1, x, q); Console.WriteLine(k); Console.WriteLine(algorithm.GetMultiplicativeInverse(k, q)); int plaintext = (c2 * algorithm.GetMultiplicativeInverse(k, q)) % q; return(plaintext); }
public void ExtendedEuclidNewTest() { ExtendedEuclid algorithm = new ExtendedEuclid(); int res = algorithm.GetMultiplicativeInverse(13245687, 135469); Assert.AreEqual(res, 38164); }
public void ExtendedEuclidTest7() { ExtendedEuclid algorithm = new ExtendedEuclid(); int res = algorithm.GetMultiplicativeInverse(123456789, 12365); Assert.AreEqual(res, 3729); }
public void ExtendedEuclidTest5() { ExtendedEuclid algorithm = new ExtendedEuclid(); int res = algorithm.GetMultiplicativeInverse(1111, 22222); Assert.AreEqual(res, 11101); }
public void ExtendedEuclidTest4() { ExtendedEuclid algorithm = new ExtendedEuclid(); int res = algorithm.GetMultiplicativeInverse(43, 64); Assert.AreEqual(res, 3); }
public void ExtendedEuclidTest3() { ExtendedEuclid algorithm = new ExtendedEuclid(); int res = algorithm.GetMultiplicativeInverse(50, 71); Assert.AreEqual(res, 27); }
public void ExtendedEuclidTest2() { ExtendedEuclid algorithm = new ExtendedEuclid(); int res = algorithm.GetMultiplicativeInverse(22, 26); Assert.AreEqual(res, -1); }
private void button4_Click(object sender, EventArgs e) { ExtendedEuclid EE = new ExtendedEuclid(); string result = EE.GetMultiplicativeInverse(int.Parse(ExtendedNumber.Text), int.Parse(ExtendedBase.Text)).ToString(); ExtendedResult.Text = result; }
public int Decrypt(int c1, int c2, int x, int q) { ExtendedEuclid EX = new ExtendedEuclid(); int K = keyGenration(c1, x, q); int Kinverse = EX.GetMultiplicativeInverse(K, q) % q; int M = ((c2 % q) * (Kinverse % q)) % q; return(M); //throw new NotImplementedException(); }
public int Inversekey(string s) { ExtendedEuclid e = new ExtendedEuclid(); Dictionary <char, int> DT = new Dictionary <char, int>(); Dictionary <int, char> CT = new Dictionary <int, char>(); int cnt = 0; for (char c = 'a'; c <= 'z'; c++) { DT[c] = cnt; CT[cnt] = c; cnt++; } double[,] keymat = new double[3, 3]; int rp = 0; for (int i = 0; i < 3; i++) { int cc = rp; for (int j = 0; j < 3; j++) { keymat[i, j] = DT[s[cc]]; rp++; cc++; } cc = rp; } int determinant = int.Parse(Matrix.Determinant(keymat).ToString()); while (determinant > 26) { determinant -= 26; } while (determinant < 0) { determinant += 26; } int inverseMultiplicative = e.GetMultiplicativeInverse(determinant, 26); return(inverseMultiplicative); }
public int calculateInverse(string s) { ExtendedEuclid e = new ExtendedEuclid(); Dictionary <char, int> DT = new Dictionary <char, int>(); Dictionary <int, char> CT = new Dictionary <int, char>(); int cnt = 0; for (char c = 'a'; c <= 'z'; c++) { DT[c] = cnt; CT[cnt] = c; cnt++; } int A = DT[s[0]]; int B = DT[s[1]];; int C = DT[s[2]];; int D = DT[s[3]];; int determinant = (A * D) - (C * B); int inverseMultiplicative = e.GetMultiplicativeInverse(determinant, 26); return(inverseMultiplicative); }
public List <int> Decrypt(List <int> cipherText, List <int> key) { //throw new NotImplementedException(); MatrixOP mp = new MatrixOP(); int n = key.Count; if (key.Count % 2 == 0) { n = n / 2; } else { n = (n / 2) - 1; } int m = (cipherText.Count / n); double[,] matKey = new double[n, n]; int[,] matPlain = new int[n, m]; int[,] matRes = new int[n, m]; int rp = 0; for (int i = 0; i < n; i++) { int cc = rp; for (int j = 0; j < n; j++) { matKey[i, j] = key[cc]; rp++; cc++; } cc = rp; } rp = 0; for (int i = 0; i < m; i++) { int cc = rp; for (int j = 0; j < n; j++) { matPlain[j, i] = cipherText[cc]; rp++; cc++; } cc = rp; } int mat = int.Parse(Matrix.Determinant(matKey).ToString()); //Console.WriteLine(mat); while (mat < 0) { mat += 26; } while (mat > 26) { mat -= 26; } ////////////////checking valid/////////////// ExtendedEuclid e = new ExtendedEuclid(); int mulinv = e.GetMultiplicativeInverse(mat, 26); if (mulinv == -1) { throw new InvalidAnlysisException(); } int[,] matl = new int[n, n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matl[i, j] = int.Parse(Math.Floor((Math.Pow(-1, i + j) * (int.Parse(Matrix.Determinant(mp.CreateSmallerMatrix(matKey, i, j)).ToString()))) % 26).ToString()); if (matl[i, j] % 26 < 0) { matl[i, j] += 26; } } } ///////////////////////////////// int[,] matKeyinverse = new int[n, n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matKeyinverse[i, j] = matl[j, i]; matKeyinverse[i, j] = (mulinv * matKeyinverse[i, j]) % 26; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int sum = 0; for (int k = 0; k < n; k++) { sum += matKeyinverse[i, k] * matPlain[k, j]; } matRes[i, j] = sum % 26; } } List <int> PlaintText = new List <int>(); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { PlaintText.Add(matRes[j, i]); } } return(PlaintText); }