source: trunk/CrypPlugins/Transposition/Transposition.cs @ 767

Last change on this file since 767 was 767, checked in by kohnen, 12 years ago

First code transposition plugin.
encrypt/decrypt function

File size: 6.8 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.ComponentModel;
6
7using Cryptool;
8using Cryptool.PluginBase.IO;
9using Cryptool.PluginBase;
10using Cryptool.PluginBase.Cryptography;
11using Cryptool.PluginBase.Miscellaneous;
12
13
14namespace ClassLibrary1
15{
16
17    [Author("Daniel Kohnen", "kohnen@cryptool.org", "Uni Duisburg-Essen", "http://www.uni-due.de")]
18    [PluginInfo(false, "Transposition", "", "", "Transposition/icon.PNG")]
19    [EncryptionType(EncryptionType.Classic)]
20    public class Transposition : IEncryption
21    {
22        # region Private variables
23
24        private String keyword;
25        private String input;
26        private String output;
27        private TranspositionSettings settings;
28
29        # endregion
30
31        public Transposition()
32        {
33            this.settings = new TranspositionSettings();
34            keyword = "";
35            input = "";
36            output = "";
37        }
38
39        public ISettings Settings
40        {
41            get { return this.settings; }
42            set { this.settings = (TranspositionSettings)value; }
43        }
44
45        # region Properties
46
47        [PropertyInfo(Direction.InputData, "Input", "input", "", DisplayLevel.Beginner)]
48        public string Input
49        {
50            get
51            {
52                return this.input;
53            }
54
55            set
56            {
57                this.input = value;
58                OnPropertyChange("Input");
59            }
60        }
61
62        [PropertyInfo(Direction.InputData, "Keyword", "keyword", "", DisplayLevel.Beginner)]
63        public string Keyword
64        {
65            get
66            {
67                return this.keyword;
68            }
69
70            set
71            {
72                this.keyword = value;
73                OnPropertyChange("Keyword");
74            }
75        }
76
77        [PropertyInfo(Direction.OutputData, "Output", "output", "", DisplayLevel.Beginner)]
78        public string Output
79        {
80            get
81            {
82                return this.output;
83            }
84            set
85            {
86                this.output = value;
87                OnPropertyChange("Output");
88            }
89        }
90
91        private void OnPropertyChange(String propertyname)
92        {
93            EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(propertyname));
94        }
95
96        private void ProgressChanged(double value, double max)
97        {
98            EventsHelper.ProgressChanged(OnPluginProgressChanged, this, new PluginProgressEventArgs(value, max));
99        }
100
101        # endregion
102
103        #region IPlugin Member
104
105        public void Dispose()
106        {
107
108        }
109
110        public void Execute()
111        {
112            ProcessTransposition();
113        }
114
115        public void Initialize()
116        {
117
118        }
119
120        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
121
122        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
123
124        public event StatusChangedEventHandler OnPluginStatusChanged;
125
126        public void Pause()
127        {
128
129        }
130
131        public void PostExecution()
132        {
133
134        }
135
136        public void PreExecution()
137        {
138
139        }
140
141        public System.Windows.Controls.UserControl Presentation
142        {
143            get { return null; }
144        }
145
146        public System.Windows.Controls.UserControl QuickWatchPresentation
147        {
148            get { return null; }
149        }
150
151        public void Stop()
152        {
153
154        }
155
156        #endregion
157
158        #region INotifyPropertyChanged Member
159
160        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
161
162        #endregion
163
164        # region Private Methods
165
166        private void ProcessTransposition()
167        {
168
169            Output = encrypt_text(input, keyword);
170
171            ProgressChanged(1, 1);
172        }
173
174        private String encrypt_text(String input, String keyword)
175        {
176            int[] keys = new int[keyword.Length];
177
178            for (int i = 1; i <= keyword.Length; i++)
179            {
180                for (int j = 0; j < keyword.Length; j++)
181                {
182                    if ((int)Char.GetNumericValue(keyword[j]) == i)
183                    {
184                        keys[i - 1] = j;
185                    }
186                }
187            }
188
189            String enc = "";
190
191            for (int j = 0; j < keyword.Length; j++)
192            {
193                for (int i = 0; i <= input.Length / keyword.Length; i++)
194                {
195                    int tmp = keys[j] + i * keyword.Length;
196
197                    if (tmp < input.Length)
198                    {
199                        enc += input[tmp];
200                    }
201                }
202            }
203            return enc;
204        }
205
206        private String decrypt_text(String input, String keyword)
207        {
208            int input_pos = 0;
209
210            int breite = keyword.Length;
211            int hoehe = input.Length / keyword.Length;
212            int offs = input.Length % keyword.Length;
213            if (offs != 0) { hoehe++; }
214
215            char[,] matrix = new char[breite, hoehe];
216
217            for (int i = 1; i <= keyword.Length; i++)
218            {
219                int pos = -1;
220
221                for (int j = 0; j < keyword.Length; j++)
222                {
223                    if (i == (int)Char.GetNumericValue(keyword[j]))
224                    {
225                        pos = j;
226                    }
227                }
228
229
230                if (offs != 0)
231                {
232                    if (pos < offs)
233                    {
234                        for (int j = 0; j < hoehe; j++)
235                        {
236                            matrix[pos, j] = input[input_pos];
237                            input_pos++;
238                        }
239                    }
240                    else
241                    {
242                        for (int j = 0; j < hoehe - 1; j++)
243                        {
244                            matrix[pos, j] = input[input_pos];
245                            input_pos++;
246                        }
247                    }
248                }
249
250                else
251                {
252                    for (int j = 0; j < hoehe; j++)
253                    {
254                        matrix[pos, j] = input[input_pos];
255                        input_pos++;
256                    }
257                }
258            }
259
260            String dec = "";
261            for (int j = 0; j < hoehe; j++)
262            {
263                for (int i = 0; i < breite; i++)
264                {
265                    dec += matrix[i, j];
266                }
267            }
268            return dec;
269        }
270
271        # endregion
272    }
273}
Note: See TracBrowser for help on using the repository browser.