Changeset 1635


Ignore:
Timestamp:
Jun 14, 2010, 2:08:11 PM (11 years ago)
Author:
nolte
Message:

Added the normal vigenere analysis in the vigenere/autokey analyser

Location:
trunk
Files:
3 edited

Legend:

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

    r1633 r1635  
    3636        private readonly VigenereAutokeyAnalyserSettings settings = new VigenereAutokeyAnalyserSettings();
    3737        private String ciphertext = "";                             //The cipher to be analysed
     38        private int modus;                                          //The modus to work with (Autokey or Vigenere)
    3839        private String alphabet;                                    //The alphabet to be used
    3940        private String key;                                         //One probable key
     
    166167            ciphertext = prepareForAnalyse(ciphertext);         //and prepare it for the analyse (-> see private methods section)
    167168
    168            
    169             language = settings.Language;                       //initialise what language frequencys are expected
     169            modus = settings.Modus;                             //initialise which modus is used
     170            language = settings.Language;                       //initialise which language frequencys are expected
    170171
    171172            if (textkorpus != null)                             //1)  if there's a textkorpus given us it to calculate the expected frequency...
     
    190191            {                                                   //   keylength break the AutokeyCipher with it...
    191192                assumedkeylength = InputKeylength;
    192                 breakAutoKey(assumedkeylength);
     193                breakVigenereAutoKey(assumedkeylength);
    193194            }
    194195            else                                                //OR
     
    197198                for (int d = 1; d <= maxkeylength; d++)
    198199                {
    199                     breakAutoKey(d);                            //"BREAK AUTO KEY(KEYLENGTH)" IS THE MAIN METHODE IN FINDING THE KEY FOR A GIVEN KEYLENGTH
     200                    breakVigenereAutoKey(d);                    //"BREAK VIGENERE AUTO KEY(KEYLENGTH)" IS THE MAIN METHODE IN FINDING THE KEY FOR A GIVEN KEYLENGTH
    200201                }                                               //(-> see private methods section)
    201202            } 
     
    333334
    334335        /// <summary>
     336        /// Choose the decryption rule
     337        /// </summary>
     338        private String getShift(String c, int s)
     339        {
     340            String shifted ="";
     341
     342            switch (modus)
     343            {
     344                case 0: shifted = getAutoShift(c,s);                    //1) Decrypt the column with Autokey
     345                        break;
     346                                                                        //OR
     347                case 1: shifted = getCaesarShift(c,s);                 
     348                        break;                                          //2) Decrypt the column with Normal-Vigenere
     349
     350                default: shifted = getAutoShift(c,s);
     351                         break;
     352            }
     353
     354            return shifted;
     355
     356        }
     357
     358        /// <summary>
    335359        /// "Autokey shift" the given column by the probable key-letter
    336360        /// </summary>
    337         private String getShift(String c, int s)
     361        private String getAutoShift(String c, int s)
    338362        {
    339363            String shifted = "";
     
    344368
    345369                gotcha = (getPos(c[x]) - gotcha + 26) % 26;
     370                shifted = shifted + alphabet[gotcha];
     371            }
     372
     373            return shifted;
     374
     375        }
     376
     377        /// <summary>
     378        /// "Caesar shift" the given column by the probable key-letter (Used for the optional NORMAL-Vigenere Modus)
     379        /// </summary>
     380        private String getCaesarShift(String c, int s)
     381        {
     382            String shifted = "";
     383            int gotcha = 0;
     384
     385            for (int x = 0; x < c.Length; x++)
     386            {
     387
     388                gotcha = (getPos(c[x]) - s + 26) % 26;
    346389                shifted = shifted + alphabet[gotcha];
    347390            }
     
    422465        /// Find the key for a given keylength using "Least Sum of Squares" attack
    423466        /// </summary>
    424         private void breakAutoKey(int d)
     467        private void breakVigenereAutoKey(int d)
    425468        {
    426469                completeplain = "";                             //initialising completeplain,
     
    472515                IC = getIC(completeplain);                              //calculate the IC(index of coincidence)
    473516
     517                GuiLogMessage(" " + IC, NotificationLevel.Info);
     518
    474519                //the decrypted cipher with the highest index of coincidence was decrypted with the correct key
    475520                if (IC > finalIC)
  • trunk/CrypPlugins/VigenereAutokeyAnalyser/VigenereAutokeyAnalyserSettings.cs

    r1633 r1635  
    2929        private bool hasChanges = false;
    3030        private int language = 0;                                   //Set the expected language (0: English ; 1: German ; 2: French ; 3: Spain)
     31        private int modus = 0;                                      //Set the modus (0: Autokey ; 1: Original Vigenere)
    3132        private String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";     //The standard configuration
    3233
     
    3435
    3536        #region TaskPane Settings
     37
     38        /// <summary>
     39        /// Choose the modus to work with
     40        /// </summary>
     41        [ContextMenu("Modus", "Select the modus you want to work with", 2, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, new String[] { "Autokey", "Vigenere" })]
     42        [TaskPane("Modus", "Select the modus you want to work with", null, 2, false, DisplayLevel.Experienced, ControlType.ComboBox, new String[] { "Autokey", "Vigenere" })]
     43        public int Modus // Autokey or Repeatedkey
     44        {
     45            get { return this.modus; }
     46            set
     47            {
     48                if (((int)value) != modus) hasChanges = true;
     49                this.modus = (int)value;
     50                OnPropertyChanged("Modus");
     51            }
     52        }
    3653
    3754        /// <summary>
Note: See TracChangeset for help on using the changeset viewer.