Изменить тип шифрования - C#
Формулировка задачи:
такая проблема. есть программа (покер) с Rsa шифрованием.
Пытаюсь переделать под шифрование Шамира, но никак не выходит(
Кто подскажет как правильно реализовать?
Вот исходный вариант
public void RSA(int[] message, out int[] array) { int[] m2 = message; array = new int[3]; int p = 3, q = 11; int n = p*q; int e = 7; for (int i = 0; i < 3; i++) { int m = message[i]; double x1 = Math.Pow(m, e)%n; array[i] = (int)x1; } }
Решение задачи: «Изменить тип шифрования»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Numerics; using System.IO; using System.Windows.Forms; using Poker; namespace Crypt { class Operation { int N, Fi, e; int shifr_message, new_message; int x, y, gcd; public void evklid(int first, int second, out int x, out int y, out int res) { int a, b, gcd; a = first; b = second; if (b == 0) { x = 1; y = 0; gcd = a; res = gcd; return; } else { int x2 = 1; int x1 = 0; int y2 = 0; int y1 = 1; while (b > 0) { int q = a/b; int r = a - q*b; x = x2 - q*x1; y = y2 - q*y1; a = b; b = r; x2 = x1; x1 = x; y2 = y1; y1 = y; } gcd = a; x = x2; y = y2; res = gcd; return; } } /// <summary> /// Shamir /// </summary> /// <param name="message"></param> /// <param name="ca"></param> /// <param name="cb"></param> /// <param name="array"></param> public void Shamir(int[] message, out int[] array) { int[] m2 = message; array = new int[3]; int p = 3, q = 11; int n; int e = 7; string rez = ""; for (int i = 0; i < 3; i++) { BigInteger m = message[i]; BigInteger x1 = BigInteger.ModPow(m, q, p); BigInteger x2 = BigInteger.ModPow(x1, e, p); string shifrtroika = x2.ToString(); //while (shifrtroika.Length < 3) if (shifrtroika.Length < 3) { for (int kz = shifrtroika.Length; kz < 3; kz++) { if (shifrtroika.Length <= 3) { shifrtroika = "0" + shifrtroika; } } } rez += shifrtroika; } } public void Shamir2(int[] message, out int[] array) { int[] m2 = message; array = new int[3]; int p = 3, q = 11; int n; int e = 7; string rez = ""; for (int i = 0; i < 3; i++) { BigInteger m = message[i]; BigInteger x1 = BigInteger.ModPow(m, q, p); BigInteger x2 = BigInteger.ModPow(x1, e, p); string shifrtroika = x2.ToString(); //while (shifrtroika.Length < 3) if (shifrtroika.Length < 3) { for (int kz = shifrtroika.Length; kz < 3; kz++) { if (shifrtroika.Length <= 3) { shifrtroika = "0" + shifrtroika; } } } rez += shifrtroika; } } public void Shamir_r(int[] message, out int[] rez2) { int[] array = new int[3]; string str = ""; int p = 3, t = 11; int n; int d = 3; for (int i = 0; i < 3; i++) { BigInteger m = message[i]; BigInteger x3 = BigInteger.ModPow(m, t, p); BigInteger x4 = BigInteger.ModPow(x3, d, p); string shifrtroika = x4.ToString(); //while (shifrtroika.Length < 3) if (shifrtroika.Length < 3) { for (int kz = shifrtroika.Length; kz < 3; kz++) { if (shifrtroika.Length <= 3) { shifrtroika = "0" + shifrtroika; } } } } rez2 = array; } public void Shamir_r2(int[] message, out int rez2) { int[] array = new int[3]; string str = ""; int p = 3, t = 11; int n; int d = 3; for (int i = 0; i < 3; i++) { BigInteger m = message[i]; BigInteger x3 = BigInteger.ModPow(m, t, p); BigInteger x4 = BigInteger.ModPow(x3, d, p); string shifrtroika = x4.ToString(); //while (shifrtroika.Length < 3) if (shifrtroika.Length < 3) { for (int kz = shifrtroika.Length; kz < 3; kz++) { if (shifrtroika.Length <= 3) { shifrtroika = "0" + shifrtroika; } } } } for (int i = 0; i < 3; i++) { int m = array[i]; str = str + m.ToString(); } rez2 = Convert.ToInt32(str); } public void card_en(int k, out Card c) { int kl = k/100; if (kl == 1) { int m = k - 100; c = new Card(uz(m), Suits.Hearts); } else { if (kl == 2) { int m = k - 200; c = new Card(uz(m), Suits.Diamonds); } else { if (kl == 3) { int m = k - 300; c = new Card(uz(m), Suits.Clubs); } else { if (kl == 4) { int m = k - 400; c = new Card(uz(m), Suits.Spades); } else { c = new Card(Ranks.A, Suits.Spades); //MessageBox.Show("Error"); //Form.ActiveForm.Close(); } }}}} Ranks uz(int m) { if (m == 14) return Ranks.A; else { if (m == 13) return Ranks.K; else { if (m == 12) return Ranks.Q; else { if (m == 11) return Ranks.J; else { if (m == 10) return Ranks.Ten; else { if (m == 9) return Ranks.Nine; else { if (m == 8) return Ranks.Eight; else { if (m == 7) return Ranks.Seven; else { if (m == 6) return Ranks.Six; else { if (m == 5) return Ranks.Five; else { if (m == 4) return Ranks.Four; else { if (m == 3) return Ranks.Tree; else return Ranks.A;}}}}}}}}}}} } } }