source: trunk/CrypPlugins/PlayfairAnalysis/Key.cs @ 1939

Last change on this file since 1939 was 1939, checked in by Christoph Hartmann, 11 years ago

Playfair Analysis Plugin (basically runs, but not ready yet)

File size: 7.1 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5
6namespace Cryptool.Plugins.PlayfairAnalysis
7{
8    class Key
9    {
10        int matrixSize;
11        public char[,] Mat;
12        public static char[] AlphabetSmall = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K','L', 'M', 'N', 'O', 
13                                  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
14        public static char[] AlphabetLarge = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K','L', 'M', 'N', 'O', 
15                                  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5',
16                                  '6', '7', '8', '9'};
17
18        public Key(int matrixSize)
19        {
20            this.matrixSize = matrixSize;
21            Mat = new char[matrixSize, matrixSize];
22        }
23
24        public Key(char[,] matrix)
25        {           
26            this.matrixSize = (int)Math.Sqrt(matrix.Length);
27            Mat = matrix;
28        }       
29
30        public void ReadMatrixConsole()
31        {
32            string s;
33
34            for (int i = 0; i < matrixSize; i += 1)
35            {
36                s = Console.In.ReadLine();
37                int pos = -1;
38
39                switch(matrixSize)
40                {
41                    case 5:
42                        for (int j = 0; j < matrixSize; j += 1)
43                        {
44                            pos = s.IndexOfAny(AlphabetSmall, pos + 1);
45                            Mat[i,j] = s[pos];
46                        }
47                    break;
48                    case 6:
49                        for (int j = 0; j < matrixSize; j += 1)
50                        {
51                            pos = s.IndexOfAny(AlphabetLarge, pos + 1);
52                            Mat[i,j] = s[pos];
53                        }
54                        break;
55
56                    default:
57                        break;
58                }
59            }
60        }
61
62        public void ReadMatrixFile(string Path)
63        {
64            string[] s = System.IO.File.ReadAllLines(Path);
65
66            for (int i = 0; i < matrixSize; i++)
67                for (int j = 0; j < matrixSize; j++)
68                    Mat[i, j] = s[i][j];
69        }
70
71        public int[] GetPosition(char Char)
72        {
73            for (int i = 0; i < matrixSize; i += 1)
74            {
75                for (int j = 0; j < matrixSize; j += 1)
76                {
77                    if (Char == Mat[i,j])
78                    {
79                        return new int[]{i,j};
80                    }
81                }
82            }
83            return null;
84        }
85
86        public void WriteOnConsole()
87        {
88            for (int i = 0; i < matrixSize; i++)
89            {
90                for (int j = 0; j < matrixSize; j++)
91                {                   
92                    Console.Out.Write(Mat[i, j] + " ");
93                }
94                Console.Out.WriteLine("");
95            }
96        }
97
98        public static void WriteOnConsoleInt(int[] matrix)
99        {
100            int matrixSize = (int)Math.Sqrt(matrix.Length);
101
102            for (int i = 0; i < matrixSize; i++)
103            {
104                for (int j = 0; j < matrixSize; j++)
105                {
106                    switch (matrixSize)
107                    {
108                        case 5:
109                            if (matrix[i * 5 + j] + 'A' < 'J')
110                                Console.Out.Write((char)(matrix[i * 5 + j] + 'A') + " ");
111                            else
112                                Console.Out.Write((char)(matrix[i * 5 + j] + 'B') + " ");
113                            break;
114                        case 6:
115                            if ((matrix[i * 6 + j] + 'A' >= 'A') && (matrix[i * 6 + j] + 'A' <= 'Z'))
116                                Console.Out.Write((char)(matrix[i * 6 + j] + 'A') + " ");
117                            else
118                                Console.Out.Write((char)(matrix[i * 6 + j] + '0' - 26) + " ");
119                            break;
120                        default:
121                            if (matrix[i * 5 + j] + 'A' < 'J')
122                                Console.Out.Write((char)(matrix[i * 5 + j] + 'A') + " ");
123                            else
124                                Console.Out.Write((char)(matrix[i * 5 + j] + 'B') + " ");
125                            break;
126                    }
127                }
128                Console.Out.WriteLine("");
129            }
130        }
131
132        public static char[,] ConvertToChar(int[] matrix)
133        {
134            int matrixSize = (int)Math.Sqrt(matrix.Length);
135            char[,] matrixchar = new char[matrixSize, matrixSize]; 
136         
137            for (int i = 0; i < matrixSize; i++)
138            {
139                for (int j = 0; j < matrixSize; j++)
140                {
141                    switch (matrixSize)
142                    {
143                        case 5:
144                            if (matrix[i * 5 + j] + 'A' < 'J')
145                                matrixchar[i, j] = (char)(matrix[i * 5 + j] + 'A');
146                            else
147                                matrixchar[i, j] = (char)(matrix[i * 5 + j] + 'B');
148                            break;
149
150                        case 6:
151                            if ((matrix[i * 6 + j] + 'A' >= 'A') && (matrix[i * 6 + j] + 'A' <= 'Z'))
152                                matrixchar[i, j] = (char)(matrix[i * 6 + j] + 'A');
153                            else
154                                matrixchar[i, j] = (char)(matrix[i * 6 + j] + '0' - 26);
155                            break;
156
157                        default:
158                            break;
159                    }
160                }               
161            }
162            return matrixchar;
163        }
164
165        public static int[] ConvertToInt(char[,] matrix)
166        {
167            int matrixSize = (int)Math.Sqrt(matrix.Length);
168            int[] matrixint = new int[(int)Math.Pow(matrixSize, 2)];
169           
170            for (int i = 0; i < matrixSize; i++)
171            {
172                for (int j = 0; j < matrixSize; j++)
173                {
174                    switch (matrixSize)
175                    {
176                        case 5:
177                            if (matrix[i, j] < 'J')
178                                matrixint[i * 5 + j] = (int)(matrix[i, j] - 'A');
179                            else
180                                matrixint[i * 5 + j] = (int)(matrix[i, j] - 'B');
181                            break;
182
183                        case 6:
184                            if ((matrix[i, j] + 'A' >= 'A') && (matrix[i, j] + 'A' <= 'Z'))
185                                matrixint[i * 6 + j] = (int)(matrix[i, j] - 'A');
186                            else
187                                matrixint[i * 6 + j] = (int)(matrix[i, j] - '0' + 26);
188                            break;
189                       
190                        default:
191                            break;
192                    }
193                }
194            }
195            return matrixint;
196        }
197
198    }
199}
Note: See TracBrowser for help on using the repository browser.