Changeset 1444


Ignore:
Timestamp:
May 19, 2010, 5:03:58 PM (12 years ago)
Author:
nolte
Message:

Expanded the Vigenere plugin with a full working autokey modus

Location:
trunk/CrypPlugins/Vigenere
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/Vigenere/Vigenere.cs

    r1259 r1444  
    2828{
    2929    [Author("Sebastian Przybylski", "sebastian@przybylski.org", "Uni-Siegen", "http://www.uni-siegen.de")]
    30     [PluginInfo(false, "VigenÚre", "VigenÚre -- classic polyalphabetic substitution cipher", "Vigenere/DetailedDescription/Description.xaml",
     30    [PluginInfo(false, "VigenÚre", "VigenÚre -- classic or autokey polyalphabetic substitution cipher", "Vigenere/DetailedDescription/Description.xaml",
    3131      "Vigenere/Images/icon.png", "Vigenere/Images/encrypt.png", "Vigenere/Images/decrypt.png")]
    3232    [EncryptionType(EncryptionType.Classic)]
     
    4040        private string outputString;
    4141        private char[] keyword;
    42         private enum VigenereMode { encrypt, decrypt };
     42        private enum VigenereMode { encrypt, decrypt, autoencrypt, autodecrypt };
    4343        private List<CryptoolStream> listCryptoolStreamsOut = new List<CryptoolStream>();
    4444
     
    146146        }
    147147
     148        public void AutoKeyEncrypt()
     149        {
     150            ProcessVigenere(VigenereMode.autoencrypt);
     151        }
     152
    148153        /// <summary>
    149154        /// Vigenere decryption
     
    152157        {
    153158            ProcessVigenere(VigenereMode.decrypt);
     159        }
     160
     161        public void AutoKeyDecrypt()
     162        {
     163            ProcessVigenere(VigenereMode.autodecrypt);
    154164        }
    155165
     
    239249            StringBuilder output = new StringBuilder(String.Empty);
    240250            string alphabet = cfg.AlphabetSymbols;
     251            int autopos = 0;
    241252
    242253            if (!cfg.CaseSensitiveAlphabet)
     
    268279                    if (ppos >= 0)
    269280                    {
     281
    270282                        //found the plaintext character in the alphabet, begin shifting
    271283                        int cpos = 0;
     
    273285                        {
    274286                            case VigenereMode.encrypt:
     287
    275288                                cpos = (ppos + cfg.ShiftKey[shiftPos]) % alphabet.Length;
    276                                 break;
     289
     290                                //inkrement shiftPos to map inputString whith all keys
     291                                //if shiftPos > ShiftKey.Length, begin again at the beginning
     292                                shiftPos++;
     293                                if (shiftPos >= cfg.ShiftKey.Length) shiftPos = 0;
     294                                break;
     295                           
    277296                            case VigenereMode.decrypt:
     297
    278298                                cpos = (ppos - cfg.ShiftKey[shiftPos] + alphabet.Length) % alphabet.Length;
     299                               
     300                                //inkrement shiftPos to map inputString whith all keys
     301                                //if shiftPos > ShiftKey.Length, begin again at the beginning
     302                                shiftPos++;
     303                                if (shiftPos >= cfg.ShiftKey.Length) shiftPos = 0;
     304                                break;
     305
     306                            case VigenereMode.autoencrypt:
     307
     308                                //key still used
     309                                if (shiftPos < cfg.ShiftKey.Length)
     310                                {
     311                                    cpos = (ppos + cfg.ShiftKey[shiftPos]) % alphabet.Length;
     312                                    shiftPos++;
     313                                }
     314                                else //using plaintext
     315                                {
     316                                    //taking the plaintextchar from the next position
     317                                    int pkey = alphabet.IndexOf(char.ToUpper(inputString[autopos]));
     318                                    //check if the next plaintextchar is in the alphabet
     319                                    while (pkey < 0)
     320                                    {
     321                                        autopos++;
     322                                        pkey = alphabet.IndexOf(char.ToUpper(inputString[autopos]));
     323                                    }
     324
     325                                    cpos = (ppos + pkey) % alphabet.Length;
     326                                    autopos++;
     327                                }
     328                                break;
     329
     330                            case VigenereMode.autodecrypt:
     331
     332                                //key still used
     333                                if (shiftPos < cfg.ShiftKey.Length)
     334                                {
     335                                    cpos = (ppos - cfg.ShiftKey[shiftPos] + alphabet.Length) % alphabet.Length;
     336                                    shiftPos++;
     337                                }
     338                                else //using plaintext
     339                                {
     340                                    outputString = output.ToString();
     341
     342                                    //taking the deciphered plaintextchar from the next position
     343                                    int pkey = alphabet.IndexOf(char.ToUpper(outputString[autopos]));
     344                                    //check if the next deciphered plaintextchar is in the alphabet
     345                                    while (pkey < 0)
     346                                    {
     347                                        autopos++;
     348                                        pkey = alphabet.IndexOf(char.ToUpper(outputString[autopos]));
     349                                    }
     350
     351                                    cpos = (ppos - pkey + alphabet.Length) % alphabet.Length;
     352                                    autopos++;
     353                                }
    279354                                break;
    280355                        }
    281356
    282                         //inkrement shiftPos to map inputString whith all keys
    283                         //if shiftPos > ShiftKey.Length, begin again at the beginning
    284                         shiftPos++;
    285                         if (shiftPos >= cfg.ShiftKey.Length)
    286                             shiftPos = 0;
    287 
     357                                                 
    288358                        //we have the position of the ciphertext character, now we have to output it in the right case
    289359                        if (cfg.CaseSensitiveAlphabet)
     
    353423        public void Execute()
    354424        {
    355             switch (settings.Action)
    356             {
    357                 case 0:
    358                     Encrypt();
     425           switch (settings.Modus)
     426           {
     427               //Classic Modus
     428               case 0:
     429
     430                    switch (settings.Action)
     431                    {
     432                        case 0:
     433                            Encrypt();
     434                            break;
     435                        case 1:
     436                            Decrypt();
     437                            break;
     438                        default:
     439                            break;
     440                    }
    359441                    break;
    360                 case 1:
    361                     Decrypt();
     442
     443               //Autokey Modus
     444               case 1:
     445
     446                    switch (settings.Action)
     447                    {
     448                        case 0:
     449                            AutoKeyEncrypt();
     450                            break;
     451                        case 1:
     452                            AutoKeyDecrypt();
     453                            break;
     454                        default:
     455                            break;
     456                    }
    362457                    break;
    363                 default:
    364                     break;
    365             }
     458       
     459            }
     460       
    366461        }
    367462
  • trunk/CrypPlugins/Vigenere/VigenereSettings.cs

    r1259 r1444  
    8787        private bool hasChanges;
    8888        private int selectedAction = 0;
     89        private int selectedModus = 0;
    8990        private string upperAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    9091        private string lowerAlphabet = "abcdefghijklmnopqrstuvwxyz";
     
    217218
    218219        [PropertySaveOrder(3)]
    219         [ContextMenu("Action","Select the Algorithm action",1,DisplayLevel.Beginner,ContextMenuControlType.ComboBox,new int[]{1,2},"Encrypt","Decrypt")]
    220         [TaskPane("Action", "Select the Algorithm action", null, 1, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Encrypt", "Decrypt"})]
     220        [ContextMenu("Modus", "Select the Algorithm action", 1, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, new int[] { 1, 2 }, "Classic", "Autokey")]
     221        [TaskPane("Modus", "Select the Algorithm action", null, 1, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Classic", "Autokey" })]
     222        public int Modus
     223        {
     224            get { return this.selectedModus; }
     225            set
     226            {
     227                if (value != selectedModus) HasChanges = true;
     228                this.selectedModus = value;
     229                OnPropertyChanged("Modus");
     230            }
     231        }
     232
     233
     234        [PropertySaveOrder(4)]
     235        [ContextMenu("Action","Select the Algorithm action",2,DisplayLevel.Beginner,ContextMenuControlType.ComboBox,new int[]{1,2},"Encrypt","Decrypt")]
     236        [TaskPane("Action", "Select the Algorithm action", null, 2, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Encrypt", "Decrypt"})]
    221237        public int Action
    222238        {
     
    230246        }
    231247
    232         [PropertySaveOrder(4)]
    233         [TaskPane("Shift value (integer)", "Enter the numbers of letters to shift seperated by comma.", null, 2, false, DisplayLevel.Beginner, ControlType.TextBox, null)]
     248        [PropertySaveOrder(5)]
     249        [TaskPane("Shift value (integer)", "Enter the numbers of letters to shift seperated by comma.", null, 3, false, DisplayLevel.Beginner, ControlType.TextBox, null)]
    234250        public string ShiftValue
    235251        {
     
    248264        }
    249265
    250         [PropertySaveOrder(5)]
    251         [TaskPane("Shift key (multiple letters)", "Enter multiple letters as the key", null, 3, false, DisplayLevel.Experienced, ControlType.TextBox, null)]
     266        [PropertySaveOrder(6)]
     267        [TaskPane("Shift key (multiple letters)", "Enter multiple letters as the key", null, 4, false, DisplayLevel.Experienced, ControlType.TextBox, null)]
    252268        public string ShiftChar
    253269        {
     
    256272        }
    257273
    258         [PropertySaveOrder(6)]
    259         [ContextMenu("Unknown symbol handling","What should be done with ecountered characters at the input which are not in the alphabet?",4,DisplayLevel.Beginner,ContextMenuControlType.ComboBox,null,"Ignore (leave unmodified)","Remove","Replace with \'?\'")]
    260         [TaskPane("Unknown symbol handling", "What should be done with encountered characters at the input which are not in the alphabet?", null, 4, false, DisplayLevel.Expert, ControlType.ComboBox, new string[] { "Ignore (leave unmodified)", "Remove", "Replace with \'?\'" })]
     274        [PropertySaveOrder(7)]
     275        [ContextMenu("Unknown symbol handling","What should be done with ecountered characters at the input which are not in the alphabet?",5,DisplayLevel.Beginner,ContextMenuControlType.ComboBox,null,"Ignore (leave unmodified)","Remove","Replace with \'?\'")]
     276        [TaskPane("Unknown symbol handling", "What should be done with encountered characters at the input which are not in the alphabet?", null, 5, false, DisplayLevel.Expert, ControlType.ComboBox, new string[] { "Ignore (leave unmodified)", "Remove", "Replace with \'?\'" })]
    261277        public int UnknownSymbolHandling
    262278        {
     
    270286        }
    271287
    272         [PropertySaveOrder(7)]
    273         [ContextMenu("Alphabet case sensitive","Should upper and lower case be treated differently? (Should a == A)",7,DisplayLevel.Beginner,ContextMenuControlType.ComboBox,null, "Case insensitive","Case sensitive")]
    274         [TaskPane("Alphabet case sensitive", "Should upper and lower case be treated differently? (Should a == A)", null, 7, false, DisplayLevel.Expert, ControlType.ComboBox, new string[] { "Case insensitive", "Case sensitive" })]
     288        [PropertySaveOrder(8)]
     289        [ContextMenu("Alphabet case sensitive","Should upper and lower case be treated differently? (Should a == A)",8,DisplayLevel.Beginner,ContextMenuControlType.ComboBox,null, "Case insensitive","Case sensitive")]
     290        [TaskPane("Alphabet case sensitive", "Should upper and lower case be treated differently? (Should a == A)", null, 8, false, DisplayLevel.Expert, ControlType.ComboBox, new string[] { "Case insensitive", "Case sensitive" })]
    275291        public int AlphabetCase
    276292        {
     
    314330        }
    315331
    316         [PropertySaveOrder(8)]
    317         [TaskPane("Alphabet", "This is the used alphabet.", null, 6, false, DisplayLevel.Expert, ControlType.TextBox, null)]
     332        [PropertySaveOrder(9)]
     333        [TaskPane("Alphabet", "This is the used alphabet.", null, 7, false, DisplayLevel.Expert, ControlType.TextBox, null)]
    318334        public string AlphabetSymbols
    319335        {
Note: See TracChangeset for help on using the changeset viewer.