Changeset 1623


Ignore:
Timestamp:
Jun 11, 2010, 1:10:42 PM (11 years ago)
Author:
nolte
Message:

Added an Autokorrelation PlugIn and modified 2 icons for the AutokorrelationFunction and the Vigenere Autokey Analyser. Added a sample for the Autokey Analyser and updated the analyser to be able to use the estimated keylength from the AutokorrelationFunction.

Location:
trunk
Files:
8 added
3 edited

Legend:

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

    r1597 r1623  
    3030    [PluginInfo(false, "VigenereAutokeyAnalyser", "Ciphertext-only attack on VigenereAutoKey encryption", null, "VigenereAutokeyAnalyser/icon.png")]
    3131
    32     public class VigenereAutokeyAnalyser : IStatistic//IIOMisc
     32    public class VigenereAutokeyAnalyser : IStatistic
    3333    {
    3434        #region Private Variables
     
    4545        private int maxkeylength;                                   //The maximum keylength we search for
    4646        private int keylength;                                      //One probable keylength
     47        private int assumedkeylength;                               //The keylength delivered by the autokorrelation
    4748        private int language;                                       //Frequencys we work with
    4849        private double cSofS;                                       //One probable Ciphercolumn Sum of Squares
     
    9192        }
    9293
     94        [PropertyInfo(Direction.InputData, "Keylength Input", "Enter the assumed keylength from the autokorrelationfunction here", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
     95        public int InputKeylength
     96        {
     97            get
     98            {
     99                return assumedkeylength;
     100            }
     101            set
     102            {
     103                this.assumedkeylength = value;
     104                OnPropertyChanged("InputKeylength");
     105            }
     106        }
    93107
    94108        [PropertyInfo(Direction.OutputData, "Key Output", "The most probable autokey for the analysed ciphertext", "", DisplayLevel.Beginner)]
     
    166180            }
    167181
     182
     183
     184
    168185//-----------------------------------------------------------------------------------------------------------------
    169186//Analyse----------------------------------------------------------------------------------------------------------
    170187//-----------------------------------------------------------------------------------------------------------------
    171188
    172             for (int d = 1; d <= maxkeylength; d++)
    173             {
    174                 completeplain = "";
    175                 key = "";
    176                 keylength = d;
    177 
    178                 maxfactor = ciphertext.Length / keylength;
    179 
    180                 for (int column = 0; column < keylength; column++)
     189
     190            if (InputKeylength != 0)
     191            {
     192                assumedkeylength = InputKeylength;
     193                breakAutoKey(assumedkeylength);
     194            }
     195            else
     196            {
     197                for (int d = 1; d <= maxkeylength; d++)
    181198                {
    182                     String ciphercolumn = "";
    183                     char probablekeychar = 'A';
    184                     sumofsquares = 99999999999.99999999999;
    185 
    186                     for (int i = 0; i <= maxfactor; i++)
    187                     {
    188                         if (column + i * keylength < ciphertext.Length)
    189                         {
    190                             ciphercolumn = ciphercolumn + ciphertext[column + i * keylength];
    191                         }
    192                     }
    193 
    194                     ciphercolumn = ciphercolumn.ToUpper();
    195 
    196                     for (int shift = 0; shift < alphabet.Length; shift++)
    197                     {
    198                         cSofS = getSumOfSquares(ciphercolumn, shift);
    199 
    200 
    201                         if (cSofS < sumofsquares)
    202                         {
    203                             sumofsquares = cSofS;
    204                             probablekeychar = alphabet[shift];
    205                         }
    206 
    207 
    208                     }
    209 
    210                     completeplain = getShift(ciphercolumn, getPos(probablekeychar)); //merkt sich die entciphertecolumn
    211                     key = key + probablekeychar;
    212 
    213 
    214 
     199                    breakAutoKey(d);
    215200                }
    216                          
    217 
    218                 IC = getIC(completeplain);
    219 
    220                 if (IC > finalIC)
    221                 {
    222                     finalIC = IC;
    223                     finalkey = key;
    224                 }
    225 
    226                 ProgressChanged((((double)d) / maxkeylength), 1);
    227            
    228             }//This keylength checked...next one
    229 
    230 
     201            }           
    231202
    232203            OutputKey = finalkey;
     
    419390
    420391//-----------------------------------------------------------------------------------------------------------------------------------------
    421 
     392//CALCULATION PART (MOST IMPORTANT METHODE)------------------------------------------------------------------------------------------------
     393
     394        private void breakAutoKey(int d)
     395        {
     396                completeplain = "";
     397                key = "";
     398                keylength = d;
     399
     400                maxfactor = ciphertext.Length / keylength;
     401
     402                for (int column = 0; column < keylength; column++)
     403                {
     404                    String ciphercolumn = "";
     405                    char probablekeychar = 'A';
     406                    sumofsquares = 99999999999.99999999999;
     407
     408                    for (int i = 0; i <= maxfactor; i++)
     409                    {
     410                        if (column + i * keylength < ciphertext.Length)
     411                        {
     412                            ciphercolumn = ciphercolumn + ciphertext[column + i * keylength];
     413                        }
     414                    }
     415
     416                    ciphercolumn = ciphercolumn.ToUpper();
     417
     418                    for (int shift = 0; shift < alphabet.Length; shift++)
     419                    {
     420                        cSofS = getSumOfSquares(ciphercolumn, shift);
     421
     422
     423                        if (cSofS < sumofsquares)
     424                        {
     425                            sumofsquares = cSofS;
     426                            probablekeychar = alphabet[shift];
     427                        }
     428
     429
     430                    }
     431
     432                    completeplain = getShift(ciphercolumn, getPos(probablekeychar)); //merkt sich die entciphertecolumn
     433                    key = key + probablekeychar;
     434
     435
     436
     437                }
     438
     439
     440                IC = getIC(completeplain);
     441
     442                if (IC > finalIC)
     443                {
     444                    finalIC = IC;
     445                    finalkey = key;
     446                }
     447
     448                ProgressChanged((((double)d) / maxkeylength), 1);       
     449        }
     450
     451//-----------------------------------------------------------------------------------------------------------------------------------------
     452 
     453       
     454       
    422455        #endregion
    423456
  • trunk/CrypTool 2.0.sln

    r1597 r1623  
    221221EndProject
    222222Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VigenereAutokeyAnalyser", "CrypPlugins\VigenereAutokeyAnalyser\VigenereAutokeyAnalyser.csproj", "{7186387E-0469-42C3-96A9-F9AFFB656419}"
     223EndProject
     224Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutokorrelationFunction", "CrypPlugins\AutokorrelationFunction\AutokorrelationFunction.csproj", "{7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}"
    223225EndProject
    224226Global
     
    10941096                {7186387E-0469-42C3-96A9-F9AFFB656419}.Release|x86.ActiveCfg = Release|x86
    10951097                {7186387E-0469-42C3-96A9-F9AFFB656419}.Release|x86.Build.0 = Release|x86
     1098                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}.Debug|x64.ActiveCfg = Debug|x64
     1099                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}.Debug|x64.Build.0 = Debug|x64
     1100                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}.Debug|x86.ActiveCfg = Debug|x86
     1101                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}.Debug|x86.Build.0 = Debug|x86
     1102                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}.Release|x64.ActiveCfg = Release|x64
     1103                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}.Release|x64.Build.0 = Release|x64
     1104                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}.Release|x86.ActiveCfg = Release|x86
     1105                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B}.Release|x86.Build.0 = Release|x86
    10961106        EndGlobalSection
    10971107        GlobalSection(SolutionProperties) = preSolution
     
    12001210                {4C93AC25-D344-4A35-81C8-C2A5E2C3B438} = {88B851F6-9E3D-484F-A317-ECED5B98C618}
    12011211                {7186387E-0469-42C3-96A9-F9AFFB656419} = {88B851F6-9E3D-484F-A317-ECED5B98C618}
     1212                {7D4A4CE5-7E4F-480B-BC8F-E1FEBE558B8B} = {88B851F6-9E3D-484F-A317-ECED5B98C618}
    12021213        EndGlobalSection
    12031214EndGlobal
Note: See TracChangeset for help on using the changeset viewer.