View difference between Paste ID: 0pFX9CjW and q5Hie62G
SHOW: | | - or go back to the newest paste.
1
using System;
2
3
namespace ConsoleApplication
4
{
5
	class Program
6
	{
7
8
		static bool exit = false;
9
10
		static void Main ( string [] args )
11
		{
12
			Console.WriteLine ( "Для шифровки сообщения нажмите клавишу \"C\"" );
13
			Console.WriteLine ( "Для шифровки сообщения нажмите клавишу \"E\"" );
14
			Console.WriteLine ( "Для шифровки сообщения нажмите клавишу \"Esc\"" );
15
			while ( !exit )
16
			{
17
				Menu ();
18
			}
19
20
		}
21
22
		static char Shift ( char originalChar, int shift, char minVal = 'а', char maxVal = 'я' )
23
		{
24
			char newChar = ' ';
25
26
			newChar = Convert.ToChar ( originalChar + shift );
27
28
			if ( originalChar >= minVal & originalChar <= maxVal )
29
			{
30
				if ( newChar >= minVal & newChar <= maxVal )
31
				{
32
					return newChar = Convert.ToChar ( originalChar + shift );
33
				}
34
				else if ( newChar < minVal )
35
				{
36
					return newChar = Convert.ToChar ( maxVal - ( minVal - newChar ) + 1 );
37
				}
38
				else
39
				{
40
					return newChar = Convert.ToChar ( minVal + ( newChar - maxVal ) - 1 );
41
				}
42
			}
43
			else
44
			{
45
				return newChar = originalChar;
46
			}
47
		}
48
49
		static string Crypt ( string forCrypt, string secretWord, char minVal = 'а', char maxVal = 'я' )
50
		{
51
			int [] shifts = new int [secretWord.Length];
52
			char [] shiftSymbols = secretWord.ToCharArray ();
53
			string result = string.Empty;
54
55
			for ( int i = 0 ; i < forCrypt.Length ; i++ )
56
			{
57
58
				if ( i < secretWord.Length )
59
				{
60
					shifts [i] = TransferToShift ( shiftSymbols [i], minVal, maxVal );
61
					result += Shift ( forCrypt [i], shifts [i], minVal, maxVal );
62
				}
63
				else
64
				{
65-
					int index = ( secretWord.Length - ( i % secretWord.Length ) ) - 1;
65+
					int index = ( (secretWord.Length - ( i % secretWord.Length ) )-1);
66-
					result += Shift ( forCrypt [index], shifts [index], minVal, maxVal );
66+
					shifts [index] = TransferToShift ( shiftSymbols [index], minVal, maxVal );
67
					result += Shift ( forCrypt [i], shifts [index], minVal, maxVal );
68
				}
69
			}
70
			return result;
71
		}
72
73
		static int TransferToShift ( char take, char minVal = 'а', char maxVal = 'я' )
74
		{
75
			if ( take < maxVal & take >= minVal )
76
			{
77
				return take + 1 - minVal;
78
			}
79
80
			else if ( take == maxVal )
81
			{
82
				return take - minVal;
83
			}
84
85
			else
86
			{
87
				return 0;
88
			}
89
		}
90
91
		static string Encrypt ( string forEncrypt, string secretWord, char minVal = 'а', char maxVal = 'я' )
92
		{
93
			int [] shifts = new int [secretWord.Length];
94
			char [] shiftSymbols = secretWord.ToCharArray ();
95
			string result = string.Empty;
96
97
			for ( int i = 0 ; i < forEncrypt.Length ; i++ )
98
			{
99
100
				if ( i < secretWord.Length )
101
				{
102
					shifts [i] = TransferToShift ( shiftSymbols [i], minVal, maxVal );
103
					result += Shift ( forEncrypt [i], -shifts [i], minVal, maxVal );
104
				}
105
				else
106-
					int index = ( secretWord.Length - ( i % secretWord.Length ) ) - 1;
106+
107-
					result += Shift ( forEncrypt [index], -shifts [index], minVal, maxVal );
107+
					int index = ( ( secretWord.Length - ( i % secretWord.Length ) ) - 1 );
108
					shifts [index] = TransferToShift ( shiftSymbols [index], minVal, maxVal );
109
					result += Shift ( forEncrypt [i], -shifts [index], minVal, maxVal );
110
				}
111
			}
112
			return result;
113
		}
114
115
		static void Menu ()
116
		{
117
118
			ConsoleKeyInfo key = Console.ReadKey ( true );
119
120
			switch ( key.Key )
121
			{
122
				case ConsoleKey.C:
123
					Console.Write ( "Введите слово для шифровки: " );
124
					string word = Console.ReadLine ();
125
					Console.Write ( "Введите слово которым с помощью которого будет произведена шифровка: " );
126
					string secretWord = Console.ReadLine ();
127
					Console.WriteLine ( "Зашифрованное слово: " + Crypt ( word, secretWord ) );
128
					break;
129
130
				case ConsoleKey.E:
131
					Console.Write ( "Введите слово для дешифровки: " );
132
					string cryptedWord = Console.ReadLine ();
133
					Console.Write ( "Введите слово которым с помощью которого будет произведена дешифровка: " );
134
					string secretWord2 = Console.ReadLine ();
135
					Console.WriteLine ( "Расшифрованное слово: " + Encrypt ( cryptedWord, secretWord2 ) );
136
					break;
137
138
				case ConsoleKey.Escape:
139
					exit = true;
140
					break;
141
			}
142
		}
143
	}
144
}