Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using Org.BouncyCastle.Math;
- using System.Linq;
- namespace zadanie2kryptologia
- {
- class Program
- {
- static void Main(string[] args)
- {
- Console.WriteLine("jk35940 Karol Jankowski");
- Console.WriteLine("Kryptologia zadanie nr.2");
- string sekretrand = randomznaki(rozmiar());
- Console.WriteLine("sekret: " + sekretrand);
- int[] senator = {6, 4, 10};
- int[] zgody = {3, 3, 6};
- BigInteger[] sekretyregion = new BigInteger[3];
- for (int i = 0; i < 3; i++)
- {
- string region = sekretrand.Substring(i*(sekretrand.Length/3), sekretrand.Length/3);
- sekretyregion[i] = new BigInteger(region);
- }
- for (int i = 0; i < 3; i++)
- {
- BigInteger sekret = sekretyregion[i];
- BigInteger pierwsza = sekret.NextProbablePrime();
- Console.WriteLine("sekret dla regionu " + i + ":");
- Console.WriteLine(sekret);
- Console.WriteLine("pierwsza: " + pierwsza);
- BigInteger[] elem = new BigInteger[zgody[i] - 1];
- BigInteger[] przydzielanie = new BigInteger[senator[i]];
- for (int j = 0; j < zgody[i] - 1; j++)
- {
- BigInteger losbigint;
- do
- {
- losbigint = new BigInteger(randomznaki(rozmiar()/3));
- }
- while (losbigint.CompareTo(sekret) > 0);
- elem[j] = losbigint;
- }
- Console.WriteLine("udziaΕy: ");
- for (int x = 1; x <= senator[i]; x++)
- {
- BigInteger K = new BigInteger("0");
- for (int potega = 1; potega < zgody[i]; potega++)
- {
- BigInteger cienie = new BigInteger(x.ToString());
- BigInteger el = cienie.Pow(potega).Multiply(elem[potega - 1]);
- K = K.Add(el);
- }
- K = K.Add(sekret);
- przydzielanie[x - 1] = K.Mod(pierwsza);
- Console.WriteLine(x + ", " + przydzielanie[x - 1]);
- }
- BigInteger J = new BigInteger("0");
- Console.WriteLine("odtworzony sekret: ");
- for (int x = 1; x <= zgody[i]; x++)
- {
- BigInteger cienie = new BigInteger(x.ToString());
- BigInteger part = przydzielanie[x - 1];
- for (int x1 = x + 1; x1 <= zgody[i]; x1++)
- {
- BigInteger cienieg = new BigInteger(x1.ToString());
- BigInteger t1 = cienieg.Multiply(new BigInteger("-1")).Mod(pierwsza);
- BigInteger t = cienie.Subtract(cienieg).Mod(pierwsza);
- part = part.Multiply(t1.Multiply(t));
- }
- for (int x2 = x - 1; x2 >= 1; x2--)
- {
- BigInteger cienied = new BigInteger(x2.ToString());
- BigInteger t1 = cienied.Multiply(new BigInteger("-1").Mod(pierwsza));
- BigInteger t = cienie.Subtract(cienied).ModInverse(pierwsza);
- part = part.Multiply(t1.Multiply(t));
- }
- J = J.Add(part.Mod(pierwsza));
- }
- J = J.Mod(pierwsza);
- Console.WriteLine(J);
- }
- Console.ReadLine();
- return;
- }
- private static Random random = new Random();
- static int rozmiar()
- {
- return 30;
- }
- static string randomznaki(int Length)
- {
- const string chars = "0123456789";
- return new string(Enumerable.Repeat(chars, Length).Select(s => s[random.Next(s.Length)]).ToArray());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement