source: trunk/CrypPlugins/Hill/Hill.cs @ 1892

Last change on this file since 1892 was 4, checked in by Thomas Schmid, 13 years ago

Init checkin

File size: 3.0 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using Cryptool.PluginBase;
6using Cryptool.Alphabets;
7using System.IO;
8
9namespace Cryptool.Hill
10{
11    [PluginInfo("B387B22B-678A-4f09-A783-F7DE889ED980","Hill","Hill cipher")]
12    public class Hill : IEncryptionAlgorithm
13    {
14        private HillSettings settings;
15
16        public Hill ()
17            {
18            this.settings = new HillSettings();
19            }
20
21        public void Add(IEncryptionAlgorithmVisualization visualization)
22        {
23
24        }
25        public IKey GenerateKey()
26        {
27            return null;
28        }
29
30        public EncryptionAlgorithmType AlgorithmType
31        {
32            get { return EncryptionAlgorithmType.SymmetricClassic; }
33        }
34        public Stream Encrypt(IEncryptionAlgorithmSettings settings)
35        {
36            AlphabetConverter alphConv = new AlphabetConverter();
37            int[] inputData = alphConv.StreamToIntArray(((HillSettings)settings).InputData);
38            int[] outputData = new int[inputData.Length];
39
40            for (long i = 0; i < inputData.Length/((HillSettings)settings).Dim; i++)
41            {
42                for (int j = 0; j < ((HillSettings)settings).Dim; j++)
43                {
44                    long hilf = 0;
45                    for (int k = 0; k <((HillSettings)settings).Dim; k++)
46                    {
47                        //hilf += (enc_mat)(k,j) * inputData[dim*i+k];
48                        hilf %= ((HillSettings)settings).Modul;
49                    }
50                    outputData[((HillSettings)settings).Dim * i + j] = (int)hilf;
51                }
52            }
53            return alphConv.intArrayToStream(outputData);
54        }
55
56        public Stream Decrypt(IEncryptionAlgorithmSettings settings)
57        {
58            AlphabetConverter alphConv = new AlphabetConverter();
59            int[] inputData = alphConv.StreamToIntArray(((HillSettings)settings).InputData);
60            int[] outputData = new int[inputData.Length];
61
62            for (long i = 0; i < inputData.Length/((HillSettings)settings).Dim; i++)
63            {
64                for (int j = 0; j < ((HillSettings)settings).Dim; j++)
65                {
66                    long hilf = 0;
67                    for (int k = 0; k < ((HillSettings)settings).Dim; k++)
68                    {
69                        //hilf += (dec_mat)(k,j) * inputData[dim*i+k];
70                        hilf %= ((HillSettings)settings).Modul;
71                    }
72                    outputData[((HillSettings)settings).Dim * i + j] = (int)hilf;
73                }
74            }
75            return alphConv.intArrayToStream(outputData);
76        }
77
78        public IEncryptionAlgorithmSettings GetSettingsObject()
79        {
80            return this.settings;
81        }
82
83        public void Initialize()
84        {
85
86        }
87
88        public void Dispose()
89        {
90
91        }
92
93        public static Guid Gui(string p)
94        {
95            return new Guid(p);
96        }
97
98    }
99}
Note: See TracBrowser for help on using the repository browser.