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

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

accepts a custom (user defined) bigraph statistic, wich is generated by the PlayfairAnalysisStatistic plugin

File size: 7.2 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, string alphabet)
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                    matrixChar[i, j] = alphabet[matrix[(i * matrixSize) + j]];
142                    /*
143                    switch (matrixSize)
144                    {
145                        case 5:
146                            if (matrix[i * 5 + j] + 'A' < 'J')
147                                matrixChar[i, j] = (char)(matrix[i * 5 + j] + 'A');
148                            else
149                                matrixChar[i, j] = (char)(matrix[i * 5 + j] + 'B');
150                            break;
151
152                        case 6:
153                            if ((matrix[i * 6 + j] + 'A' >= 'A') && (matrix[i * 6 + j] + 'A' <= 'Z'))
154                                matrixChar[i, j] = (char)(matrix[i * 6 + j] + 'A');
155                            else
156                                matrixChar[i, j] = (char)(matrix[i * 6 + j] + '0' - 26);
157                            break;
158
159                        default:
160                            break;
161                    }
162                    */ 
163                }               
164            }
165            return matrixChar;
166        }
167
168        public static int[] ConvertToInt(char[,] matrix)
169        {
170            int matrixSize = (int)Math.Sqrt(matrix.Length);
171            int[] matrixint = new int[(int)Math.Pow(matrixSize, 2)];
172           
173            for (int i = 0; i < matrixSize; i++)
174            {
175                for (int j = 0; j < matrixSize; j++)
176                {
177                    switch (matrixSize)
178                    {
179                        case 5:
180                            if (matrix[i, j] < 'J')
181                                matrixint[i * 5 + j] = (int)(matrix[i, j] - 'A');
182                            else
183                                matrixint[i * 5 + j] = (int)(matrix[i, j] - 'B');
184                            break;
185
186                        case 6:
187                            if ((matrix[i, j] + 'A' >= 'A') && (matrix[i, j] + 'A' <= 'Z'))
188                                matrixint[i * 6 + j] = (int)(matrix[i, j] - 'A');
189                            else
190                                matrixint[i * 6 + j] = (int)(matrix[i, j] - '0' + 26);
191                            break;
192                       
193                        default:
194                            break;
195                    }
196                }
197            }
198            return matrixint;
199        }
200
201    }
202}
Note: See TracBrowser for help on using the repository browser.