Advertisement
silverwolfkj2015

ГОСТ

Mar 22nd, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.40 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 GOST
  8. {
  9.     class Program
  10.     {
  11.         public static int[][] mat = new int[8][];
  12.  
  13.         public static string To8(string s)
  14.         {
  15.             while (s.Length < 16)
  16.                 s = "0" + s ;
  17.             return s;
  18.         }
  19.  
  20.         public static string To4(string s)
  21.         {
  22.             while (s.Length < 4)
  23.                 s = "0" + s;
  24.             return s;
  25.         }
  26.  
  27.         public static string To32(string s)
  28.         {
  29.             while (s.Length < 32)
  30.                 s = "0" + s;
  31.             return s;
  32.         }
  33.  
  34.  
  35.  
  36.         static void Main(string[] args)
  37.         {
  38.             Console.WriteLine("Введите исходное сообщение");
  39.             string s = Console.ReadLine();
  40.             char[] source = s.ToArray();
  41.  
  42.             Console.WriteLine("UNICODE");
  43.             foreach (var item in source)
  44.             {
  45.                 Console.WriteLine((int)item);
  46.             }
  47.             Console.WriteLine("HEX");
  48.             foreach (var item in source)
  49.             {
  50.                 Console.WriteLine(Convert.ToString(item, 2));
  51.             }
  52.             Console.WriteLine("Введите ключ");
  53.             s = Console.ReadLine();
  54.             char[] key = s.ToArray();
  55.             Console.WriteLine("UNICODE");
  56.             foreach (var item in key)
  57.             {
  58.                 Console.WriteLine((int)item);
  59.             }
  60.             Console.WriteLine("HEX");
  61.             foreach (var item in key)
  62.             {
  63.                 Console.WriteLine(Convert.ToString(item, 2));
  64.             }
  65.             Console.ReadKey();
  66.  
  67.             string m1 = To8(Convert.ToString(source[2], 2));
  68.             string m2 = To8(Convert.ToString(source[3], 2));
  69.             string m3 = To8(Convert.ToString(key[0], 2));
  70.             string m4 = To8(Convert.ToString(key[1], 2));
  71.  
  72.             Console.WriteLine(m1 + "  " + m2 + "  " + m3 + "  " + m4);
  73.             Console.ReadKey();
  74.             string m12 = string.Format("{0}{1}", To8(m1), To8(m2));
  75.             string m34 = string.Format("{0}{1}", To8(m3), To8(m4));
  76.             Console.WriteLine("source + source   |   key + key // DigitFormat");
  77.             Console.WriteLine(m12 + "   " + m34);
  78.             long mm12 = Convert.ToInt64(m12, 2);
  79.             long mm34 = Convert.ToInt64(m34, 2);
  80.             Console.WriteLine(mm12 + "     " + mm34);
  81.             string sum = Convert.ToString(Convert.ToInt32(m12, 2) + Convert.ToInt32(m34, 2), 2);
  82.             Console.WriteLine(sum + " HEXFormat");
  83.             Console.ReadKey();
  84.             sum = To32(sum);
  85.             List<int> R0 = new List<int>();
  86.             mat[0] = new int[] { 4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3 };
  87.             mat[1] = new int[] { 14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9 };
  88.             mat[2] = new int[] { 5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11 };
  89.             mat[3] = new int[] { 7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3 };
  90.             mat[4] = new int[] { 6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2 };
  91.             mat[5] = new int[] { 4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14 };
  92.             mat[6] = new int[] { 13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12 };
  93.             mat[7] = new int[] { 1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12 };
  94.  
  95.             for (int i = 0; i < sum.Length; i += 4)
  96.             {
  97.                 Console.WriteLine(Convert.ToInt32(sum.Substring(i, 4), 2));
  98.                 R0.Add(mat[7 - i / 4][Convert.ToInt32(sum.Substring(i, 4), 2)]);
  99.             }
  100.             string sR0 = "";
  101.             foreach (var item in R0)
  102.             {
  103.                 sR0 += To4(Convert.ToString(item, 2));
  104.             }
  105.  
  106.             Console.WriteLine("Преобразование по таблице: " + sR0);
  107.  
  108.             sR0 = sR0.Substring(11, sR0.Length-11) + sR0.Substring(0, 11);
  109.             Console.WriteLine("Сдвиг на 11 бит");
  110.             Console.ReadKey();
  111.  
  112.             int L0 = Convert.ToInt32(To8(Convert.ToString(source[0], 2)) + To8(Convert.ToString(source[1], 2)), 2);
  113.             long R1 = Convert.ToInt64(sR0, 2);
  114.             long answer = L0 ^ R1;
  115.             Console.WriteLine("ОТВЕТ:" + To32(Convert.ToString(answer, 2)));
  116.             Console.ReadKey();
  117.         }
  118.     }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement