Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Zharkova_Kripto_level_2
- {
- class Program
- {
- //Возведение в степень по модулю N
- static long _pow(long buf , long D , long N)
- {
- long degree = 1;
- long answer = 1;
- while(degree <= D)
- {
- answer *= buf;
- answer = answer % N;
- degree++;
- }
- return answer;
- }
- //Расшифровка числа в текст
- static string _parse(long buf)
- {
- long[] test = new long[4];
- int i = 0;
- for (i = 0; i < test.Length; i++)
- {
- test[i] = buf % 32;
- buf /= 32;
- }
- string answer="";
- for ( i = 0; i < test.Length; i++)
- {
- char buf2 = (char)(test[i]+1040);
- answer += buf2.ToString();
- }
- return answer;
- }
- //Рекурсия.подсчет суммы
- static long sum(int []num,int i)
- {
- if (i == num.Length -1)
- {
- return num[i];
- }
- else
- {
- return num[i] + 32 * sum(num, i+1);
- }
- }
- //Перевод строки в зашифрованное число
- static long _translate_text (string buf , long E , long N)
- {
- int i = 0;
- int count = buf.Length % 4;
- if (count != 0)
- {
- int max = 4 - count;
- while (max > 0)
- {
- buf += "A";
- max--;
- }
- }
- int[] num = new int[4];
- for( i=0; i < buf.Length;i++)
- {
- num[i] = buf[i] - 1040;
- }
- long s = sum(num, 0);
- return _pow(s, E, N);
- }
- static void Main(string[] args)
- {
- long[] cipher = new long[] {6221925 , 4957150 , 17112117 ,305857 ,9350587
- ,7837163 , 15452980 , 1311198 , 17850761 , 6735679,
- 2057817, 8813066 , 12376075 , 505969 , 3374694 ,
- 5440805, 3142846, 1171270, 15311740, 17548474 };
- string key = "КУБОК";
- int E = 2011;
- long D = 1297231;
- long N = 18000001;
- for(int i=0; i< cipher.Length; i++)
- {
- Console.WriteLine("cipher[" + i + "] =" + cipher[i]);
- }
- Console.WriteLine("E=="+E);
- Console.WriteLine("D==="+D);
- Console.WriteLine("N===" + N);
- string answer = "";
- for(int i=0; i < cipher.Length; i++)
- {
- answer += _parse(_pow(cipher[i], D, N));
- }
- int test = answer.IndexOf(key);
- if ( test !=-1)
- {
- Console.WriteLine(answer);
- }
- else
- {
- Console.WriteLine("Не найдена подстрока в расшифрованном тексте");
- }
- int j =0;
- string buf = "";
- long[] answer_num = new long[cipher.Length];
- for(int i=0;i<answer.Length;i++)
- {
- buf += answer[i];
- if(buf.Length==4)
- {
- answer_num[j] = _translate_text(buf, E, N);
- buf = "";
- j++;
- }
- }
- bool flag = true;
- for(int i=0;flag && i<answer_num.Length;i++)
- {
- flag = answer_num[i] == cipher[i];
- }
- if(flag)
- {
- Console.WriteLine("Зашифрованный текст совпадает с первоначальным шифртекстом ");
- }
- else
- {
- Console.WriteLine("Шифртексты получились разные");
- }
- for (int i = 0; i < answer_num.Length; i++)
- {
- Console.WriteLine("answer[" + i + "] =" + answer_num[i]);
- }
- Console.WriteLine("Hello World!");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement