Advertisement
xamperus

Zharkova_Lab_Kripto_2

Dec 2nd, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.54 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Zharkova_Kripto_level_2
  8. {
  9.     class Program
  10.     {
  11.         //Возведение в степень по модулю N
  12.         static long _pow(long buf , long D , long N)
  13.         {
  14.             long degree = 1;
  15.             long answer = 1;
  16.             while(degree <= D)
  17.             {
  18.                 answer *= buf;
  19.                 answer = answer % N;
  20.                 degree++;
  21.             }
  22.             return answer;
  23.         }
  24.         //Расшифровка числа в текст
  25.         static string _parse(long buf)
  26.         {
  27.             long[] test = new long[4];
  28.             int i = 0;
  29.  
  30.             for (i = 0; i < test.Length; i++)
  31.             {
  32.                 test[i] = buf % 32;
  33.                 buf /= 32;
  34.             }
  35.  
  36.             string answer="";
  37.             for ( i = 0; i < test.Length; i++)
  38.             {
  39.                 char buf2 = (char)(test[i]+1040);
  40.                 answer += buf2.ToString();
  41.             }
  42.             return answer;
  43.         }
  44.         //Рекурсия.подсчет суммы
  45.         static long sum(int []num,int i)
  46.         {
  47.             if (i == num.Length -1)
  48.             {
  49.                 return num[i];
  50.             }
  51.             else
  52.             {
  53.                 return num[i] + 32 * sum(num, i+1);
  54.             }
  55.  
  56.         }
  57.         //Перевод строки в зашифрованное число
  58.         static long _translate_text (string buf , long E , long N)
  59.         {
  60.             int i = 0;
  61.             int count = buf.Length % 4;
  62.  
  63.             if (count != 0)
  64.             {
  65.                 int max = 4 - count;
  66.                 while (max > 0)
  67.                 {
  68.                     buf += "A";
  69.                     max--;
  70.                 }
  71.             }
  72.  
  73.             int[] num = new int[4];
  74.             for( i=0; i < buf.Length;i++)
  75.             {
  76.                 num[i] = buf[i] - 1040;
  77.             }
  78.  
  79.             long s = sum(num, 0);
  80.  
  81.             return _pow(s, E, N);
  82.         }
  83.  
  84.  
  85.         static void Main(string[] args)
  86.         {
  87.  
  88.             long[] cipher = new long[] {6221925 , 4957150 , 17112117 ,305857 ,9350587
  89.                                         ,7837163 , 15452980 , 1311198 , 17850761 , 6735679,
  90.                                         2057817, 8813066 , 12376075 , 505969 , 3374694 ,
  91.                                         5440805, 3142846, 1171270, 15311740, 17548474 };
  92.             string key = "КУБОК";
  93.             int E = 2011;
  94.             long D = 1297231;
  95.             long N = 18000001;
  96.             for(int i=0; i< cipher.Length; i++)
  97.             {
  98.                 Console.WriteLine("cipher[" + i + "] =" + cipher[i]);
  99.             }
  100.             Console.WriteLine("E=="+E);
  101.             Console.WriteLine("D==="+D);
  102.             Console.WriteLine("N===" + N);
  103.  
  104.             string answer = "";
  105.             for(int i=0; i < cipher.Length; i++)
  106.             {
  107.                 answer += _parse(_pow(cipher[i], D, N));
  108.             }
  109.  
  110.             int test = answer.IndexOf(key);
  111.             if ( test !=-1)
  112.             {
  113.                 Console.WriteLine(answer);
  114.             }
  115.             else
  116.             {
  117.                 Console.WriteLine("Не найдена подстрока в расшифрованном тексте");
  118.             }
  119.             int j =0;
  120.             string buf = "";
  121.             long[] answer_num = new long[cipher.Length];
  122.             for(int i=0;i<answer.Length;i++)
  123.             {
  124.                 buf += answer[i];
  125.                 if(buf.Length==4)
  126.                 {
  127.                     answer_num[j] = _translate_text(buf, E, N);
  128.                     buf = "";
  129.                     j++;
  130.                 }
  131.             }
  132.  
  133.  
  134.             bool flag = true;
  135.             for(int i=0;flag && i<answer_num.Length;i++)
  136.             {
  137.                 flag = answer_num[i] == cipher[i];
  138.             }
  139.             if(flag)
  140.             {
  141.                 Console.WriteLine("Зашифрованный текст совпадает с первоначальным шифртекстом ");
  142.             }
  143.             else
  144.             {
  145.                 Console.WriteLine("Шифртексты получились разные");
  146.             }
  147.  
  148.             for (int i = 0; i < answer_num.Length; i++)
  149.             {
  150.                 Console.WriteLine("answer[" + i + "] =" + answer_num[i]);
  151.             }
  152.  
  153.             Console.WriteLine("Hello World!");
  154.  
  155.         }
  156.     }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement