Changeset 917


Ignore:
Timestamp:
Nov 29, 2009, 8:55:57 PM (12 years ago)
Author:
kohnen
Message:
  • added function changeSettings to interface IControlEncryption
  • added this function to all plugins using IControlEncryption (aes, des, sdes)
  • transposition-analyser works on all different transposition modes
  • minor changes at transposition plugin (optional keyword, etc)
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPluginBase/Control/IControlEncryption.cs

    r865 r917  
    1212        string getKeyPattern();
    1313        byte[] getKeyFromString(string key, ref int[] arrayPointers, ref int[] arraySuccessors, ref int[] arrayUppers);
     14        void changeSettings(string setting, object value);
    1415        IControlEncryption clone();
    1516        event KeyPatternChanged keyPatternChanged;
  • trunk/CrypPlugins/AES/AES.cs

    r865 r917  
    958958
    959959        #endregion
     960
     961        #region IControlEncryption Member
     962
     963
     964        public void changeSettings(string setting, object value)
     965        {
     966           
     967        }
     968
     969        #endregion
    960970    }
    961971}
  • trunk/CrypPlugins/DES/DES.cs

    r865 r917  
    645645
    646646        #endregion
     647
     648        #region IControlEncryption Member
     649
     650
     651        void IControlEncryption.changeSettings(string setting, object value)
     652        {
     653
     654        }
     655
     656        #endregion
    647657    }
    648658}
  • trunk/CrypPlugins/SDES/SDES.cs

    r865 r917  
    695695
    696696        #endregion
     697
     698        #region IControlEncryption Member
     699
     700
     701        public void changeSettings(string setting, object value)
     702        {
     703
     704        }
     705
     706        #endregion
    697707    }
    698708       
  • trunk/CrypPlugins/Transposition/Transposition.cs

    r913 r917  
    108108        }
    109109       
    110         [PropertyInfo(Direction.InputData, "Keyword", "keyword", "Keyword used for encryption", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
     110        [PropertyInfo(Direction.InputData, "Keyword", "keyword", "Keyword used for encryption", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, null)]
    111111        public string Keyword
    112112        {
     
    10381038        }
    10391039
     1040        public void changeSettings(string setting, object value)
     1041        {
     1042            if (setting.Equals("ReadIn")) settings.ReadIn = (int)value;
     1043            else if (setting.Equals("Permute")) settings.Permutation = (int)value;
     1044            else if (setting.Equals("ReadOut")) settings.ReadOut = (int)value;
     1045           
     1046        }
    10401047        # endregion
    10411048
     
    11211128
    11221129        #endregion
     1130
     1131        #region IControlEncryption Member
     1132
     1133
     1134        public void changeSettings(string setting, object value)
     1135        {
     1136            plugin.changeSettings(setting, value);
     1137        }
     1138
     1139        #endregion
    11231140    }
    11241141}
  • trunk/CrypPlugins/TranspositionAnalyser/TranspositionAnalyser.cs

    r859 r917  
    77using System.ComponentModel;
    88using Cryptool.PluginBase.Control;
     9using Cryptool.PluginBase.Miscellaneous;
    910
    1011
    1112namespace TranspositionAnalyser
    1213{
    13 
    1414
    1515    [Author("Daniel Kohnen, Julian Weyers, Simon Malischewski, Armin Wiefels", "kohnen@cryptool.org, weyers@cryptool.org, malischewski@cryptool.org, wiefels@cryptool.org", "Universität Duisburg-Essen", "http://www.uni-due.de")]
     
    1717    public class TranspositionAnalyser : IAnalysisMisc
    1818    {
     19        private enum ReadInMode { byRow = 0, byColumn = 1 };
     20        private enum PermutationMode { byRow = 0, byColumn = 1 };
     21        private enum ReadOutMode { byRow = 0, byColumn = 1 };
     22
     23
    1924        TranspositionAnalyserSettings settings;
    2025
     
    115120        }
    116121
     122        private Boolean stop;
    117123        public void Stop()
    118124        {
    119 
     125            stop = true;
    120126        }
    121127
     
    148154        public void process(IControlEncryption sender)
    149155        {
    150             switch (settings.Action)
    151             {
    152                 case ((int)TranspositionAnalyserSettings.ActionMode.costfunction):
    153                     Output = costfunction_bruteforce(sender);
    154                     break;
    155                 case ((int)TranspositionAnalyserSettings.ActionMode.crib):
    156                     Output = crib_bruteforce(sender);
    157                     break;
    158             }
    159 
    160 
    161         }
    162 
    163         private byte[] crib_bruteforce(IControlEncryption sender)
    164         {
    165             if (sender != null)
    166             {
    167                 String empty_string = "";
    168                 if ((!settings.Crib.Equals(empty_string)) && !(settings.Crib == null))
    169                 {
    170                     PermutationGenerator per = new PermutationGenerator(2);
    171                     String crib = settings.Crib;
    172                     byte[] found = null;
    173                     int max = 0;
    174                     max = settings.MaxLength;
    175                    
    176                     if (max > 1)
     156            Output = costfunction_bruteforce(sender);
     157        }
     158
     159        private int[] getBruteforceSettings()
     160        {
     161            int[] set;
     162            int sum = 0;
     163            if (settings.ColumnColumnColumn) sum++;
     164            if (settings.ColumnColumnRow) sum++;
     165            if (settings.RowColumnColumn) sum++;
     166            if (settings.RowColumnRow) sum++;
     167
     168            if (sum > 0)
     169            {
     170                set = new int[sum];
     171                int count = 0;
     172                if (settings.ColumnColumnColumn)
     173                {
     174                    set[count] = 0;
     175                    count++;
     176                }
     177                if (settings.ColumnColumnRow)
     178                {
     179                    set[count] = 1;
     180                    count++;
     181                }
     182                if (settings.RowColumnColumn)
     183                {
     184                    set[count] = 2;
     185                    count++;
     186                }
     187
     188                if (settings.RowColumnRow)
     189                {
     190                    set[count] = 3;
     191                    count++;
     192                }
     193                return set;
     194            }
     195            else
     196            {
     197                return null;
     198            }
     199
     200        }
     201
     202        private byte[] costfunction_bruteforce(IControlEncryption sender)
     203        {
     204            int[] set = getBruteforceSettings();
     205            stop = false;
     206            if (sender != null && costMaster != null && set != null)
     207            {
     208                GuiLogMessage("start", NotificationLevel.Info);
     209                double best = Double.MinValue;
     210                if (costMaster.getRelationOperator() == RelationOperator.LessThen)
     211                {
     212                    best = Double.MaxValue;
     213                }
     214                String best_text = "";
     215                byte[] best_bytes = null;
     216
     217
     218                //Just for fractional-calculation:
     219                PermutationGenerator per = new PermutationGenerator(2);
     220
     221
     222                int max = 0;
     223                max = settings.MaxLength;
     224                //GuiLogMessage("Max: " + max, NotificationLevel.Info);
     225                if (max > 1 && max < 21)
     226                {
     227                    long size = 0;
     228                    for (int i = 2; i <= max; i++)
    177229                    {
    178                         long size = 0;
    179                         for (int i = 2; i <= max; i++)
     230                        size = size + per.getFactorial(i);
     231                    }
     232                    size = size * set.Length;
     233                    long sum = 0;
     234                    for (int i = 0; i <= max; i++)
     235                    {
     236                        // for every selected bruteforce mode:
     237                        for (int s = 0; s < set.Length; s++)
    180238                        {
    181                             size = size + per.getFactorial(i);
    182                         }
    183                         long sum = 0;
    184                         for (int i = 0; i <= max; i++)
    185                         {
     239                            switch (set[s])
     240                            {
     241                                case (0):
     242                                    controlMaster.changeSettings("ReadIn", ReadInMode.byColumn);
     243                                    controlMaster.changeSettings("Permute", PermutationMode.byColumn);
     244                                    controlMaster.changeSettings("ReadOut", ReadOutMode.byColumn);
     245                                    break;
     246                                case (1):
     247                                    controlMaster.changeSettings("ReadIn", ReadInMode.byColumn);
     248                                    controlMaster.changeSettings("Permute", PermutationMode.byColumn);
     249                                    controlMaster.changeSettings("ReadOut", ReadOutMode.byRow);
     250                                    break;
     251                                case (2):
     252                                    controlMaster.changeSettings("ReadIn", ReadInMode.byRow);
     253                                    controlMaster.changeSettings("Permute", PermutationMode.byColumn);
     254                                    controlMaster.changeSettings("ReadOut", ReadOutMode.byColumn);
     255                                    break;
     256                                case (3):
     257                                    controlMaster.changeSettings("ReadIn", ReadInMode.byRow);
     258                                    controlMaster.changeSettings("Permute", PermutationMode.byColumn);
     259                                    controlMaster.changeSettings("ReadOut", ReadOutMode.byRow);
     260                                    break;
     261                            }
     262
    186263                            per = new PermutationGenerator(i);
    187                            
    188                             while (per.hasMore())
     264
     265                            while (per.hasMore() && !stop)
    189266                            {
    190267                                int[] key = per.getNext();
     
    197274                                if (dec != null)
    198275                                {
    199                                     String tmp = System.Text.Encoding.ASCII.GetString(dec);
    200                                     if (tmp.Contains(crib))
     276                                    double val = costMaster.calculateCost(dec);
     277                                    if (costMaster.getRelationOperator() == RelationOperator.LessThen)
    201278                                    {
    202                                         found = dec;
     279                                        if (val < best)
     280                                        {
     281                                            best = val;
     282                                            best_text = System.Text.Encoding.ASCII.GetString(dec);
     283                                            best_bytes = dec;
     284                                        }
     285                                    }
     286                                    else
     287                                    {
     288                                        if (val > best)
     289                                        {
     290                                            best = val;
     291                                            best_text = System.Text.Encoding.ASCII.GetString(dec);
     292                                            best_bytes = dec;
     293                                        }
    203294                                    }
    204295                                }
    205                                
     296
     297
    206298                                sum++;
    207                                 ProgressChanged(sum, size);
     299                                if (sum % 1000 == 0)
     300                                {
     301                                    ProgressChanged(sum, size);
     302                                }
     303
    208304                            }
    209                         }
    210                         return found;
    211                     }
    212                     else
    213                     {
    214                         GuiLogMessage("Error: Check transposition bruteforce length.", NotificationLevel.Error);
    215                         return null;
    216                     }
    217                 }
    218                 else
    219                 {
    220                     GuiLogMessage("Invalide Crib", NotificationLevel.Error);
    221                     return null;
    222                 }
    223             }
    224             else
    225             {
    226                 GuiLogMessage("Sender Error", NotificationLevel.Error);
    227                 return null;
    228             }
    229         }
    230 
    231         private byte[] costfunction_bruteforce(IControlEncryption sender)
    232         {
    233             if (sender != null && costMaster != null)
    234             {
    235                 GuiLogMessage("start", NotificationLevel.Info);
    236                 double best = Double.MinValue;
    237                 if (costMaster.getRelationOperator() == RelationOperator.LessThen)
    238                 {
    239                     best = Double.MaxValue;
    240                 }
    241                 String best_text = "";
    242                 byte[] best_bytes = null;
    243 
    244                 //Just for fractional-calculation:
    245                 PermutationGenerator per = new PermutationGenerator(2);
    246                 int max = 0;
    247                 max = settings.MaxLength;
    248                 GuiLogMessage("Max: " + max, NotificationLevel.Info);
    249                 if (max > 1)
    250                 {
    251                     long size = 0;
    252                     for (int i = 2; i <= max; i++)
    253                     {
    254                         size = size + per.getFactorial(i);
    255                     }
    256                     long sum = 0;
    257                     for (int i = 0; i <= max; i++)
    258                     {
    259                         per = new PermutationGenerator(i);
    260 
    261                         while (per.hasMore())
    262                         {
    263                             int[] key = per.getNext();
    264                             byte[] b = new byte[key.Length];
    265                             for (int j = 0; j < b.Length; j++)
    266                             {
    267                                 b[j] = Convert.ToByte(key[j]);
    268                             }
    269                             byte[] dec = sender.Decrypt(b, b.Length);
    270                             if (dec != null)
    271                             {
    272                                 double val = costMaster.calculateCost(dec);
    273                                 if (costMaster.getRelationOperator() == RelationOperator.LessThen)
    274                                 {
    275                                     if (val < best)
    276                                     {
    277                                         best = val;
    278                                         best_text = System.Text.Encoding.ASCII.GetString(dec);
    279                                         best_bytes = dec;
    280                                     }
    281                                 }
    282                                 else
    283                                 {
    284                                     if (val > best)
    285                                     {
    286                                         best = val;
    287                                         best_text = System.Text.Encoding.ASCII.GetString(dec);
    288                                         best_bytes = dec;
    289                                     }
    290                                 }
    291                             }
    292                             else
    293                             {
    294                             }
    295                             sum++;
    296                             ProgressChanged(sum, size);
    297305                        }
    298306                    }
     
    302310                else
    303311                {
    304                     GuiLogMessage("Error: Check transposition bruteforce length.", NotificationLevel.Error);
     312                    GuiLogMessage("Error: Check transposition bruteforce length. Max length is 20!", NotificationLevel.Error);
    305313                    return null;
    306314                }
     
    313321        }
    314322
    315 
    316 
    317323        #endregion
    318324
  • trunk/CrypPlugins/TranspositionAnalyser/TranspositionAnalyserSettings.cs

    r859 r917  
    1414        #region ISettings Member
    1515
    16         private int selectedAction = 0;
    17         public enum ActionMode { costfunction = 0, crib = 1 };
    18         [PropertySaveOrder(1)]
    19         [ContextMenu("Action", "Select the analyse algorithm", 1, DisplayLevel.Beginner, ContextMenuControlType.ComboBox, null, new string[] { "Bruteforce with Cost function", "Bruteforce for crib"})]
    20         [TaskPane("Action", "Select the analyse algorithm", null, 1, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Bruteforce with Cost function", "Bruteforce for crib" })]
    21         public int Action
    22         {
    23             get { return this.selectedAction; }
    24             set
    25             {
    26                 if (value != selectedAction) HasChanges = true;
    27                 this.selectedAction = value;
    28                 OnPropertyChanged("Action");
    29             }
    30         }
    3116
    3217        // FIX: REGEX
    3318        private int bruteforce_length = 8;
    3419        [PropertySaveOrder(2)]
    35         [TaskPaneAttribute("Transposition Bruteforce length", "Enter the max length to be bruteforced", null, 2, true, DisplayLevel.Beginner, ControlType.TextBox, ValidationType.RegEx, "[0-9]{1,2}")]
     20        [TaskPaneAttribute("Transposition Bruteforce length", "Enter the max length to be bruteforced (max: 20)", null, 2, true, DisplayLevel.Beginner, ControlType.TextBox, ValidationType.RegEx, "[0-9]{1,2}")]
    3621        public int MaxLength
    3722        {
     
    4328        }
    4429
    45 
    46         private String crib = "";
     30        private Boolean row_colum_column = true;
    4731        [PropertySaveOrder(3)]
    48         [TaskPaneAttribute("Crib:", "Enter the crib to be searched for", null, 3, true, DisplayLevel.Beginner, ControlType.TextBox)]
    49         public String Crib
     32        [ContextMenu("Bruteforce Row-Column-Column", "Bruteforce this transposition settings: Read in by row. Permute by column. Read out by Column", 4, DisplayLevel.Beginner, ContextMenuControlType.CheckBox, null, "Row-Column-Column")]
     33        [TaskPane("Bruteforce Row-Column-Column", "Bruteforce this transposition settings: Read in by row. Permute by column. Read out by Column", null, 4, false, DisplayLevel.Expert, ControlType.CheckBox, "")]
     34        public bool RowColumnColumn
    5035        {
    51             get { return crib; }
     36            get { return this.row_colum_column; }
    5237            set
    5338            {
    54                 crib = value;
     39                if (value != this.row_colum_column) HasChanges = true;
     40                this.row_colum_column= value;
     41                OnPropertyChanged("RowColumnColumn");
    5542            }
    5643        }
     44
     45        private Boolean row_colum_row = true;
     46        [PropertySaveOrder(4)]
     47        [ContextMenu("Bruteforce Row-Column-Row", "Bruteforce this transposition settings: Read in by row. Permute by column. Read out by Row", 4, DisplayLevel.Beginner, ContextMenuControlType.CheckBox, null, "Row-Column-Column")]
     48        [TaskPane("Bruteforce Row-Column-Row", "Bruteforce this transposition settings: Read in by row. Permute by column. Read out by Row", null, 4, false, DisplayLevel.Expert, ControlType.CheckBox, "")]
     49        public bool RowColumnRow
     50        {
     51            get { return this.row_colum_row; }
     52            set
     53            {
     54                if (value != this.row_colum_row) HasChanges = true;
     55                this.row_colum_row = value;
     56                OnPropertyChanged("RowColumnRow");
     57            }
     58        }
     59
     60
     61        private Boolean column_colum_row = true;
     62        [PropertySaveOrder(5)]
     63        [ContextMenu("Bruteforce Column-Column-Row", "Bruteforce this transposition settings: Read in by column. Permute by column. Read out by Row", 4, DisplayLevel.Beginner, ContextMenuControlType.CheckBox, null, "Row-Column-Column")]
     64        [TaskPane("Bruteforce Column-Column-Row", "Bruteforce this transposition settings: Read in by column. Permute by column. Read out by Row", null, 4, false, DisplayLevel.Expert, ControlType.CheckBox, "")]
     65        public bool ColumnColumnRow
     66        {
     67            get { return this.column_colum_row; }
     68            set
     69            {
     70                if (value != this.column_colum_row) HasChanges = true;
     71                this.column_colum_row = value;
     72                OnPropertyChanged("ColumnColumnRow");
     73            }
     74        }
     75
     76        private Boolean column_colum_column = true;
     77        [PropertySaveOrder(6)]
     78        [ContextMenu("Bruteforce Column-Column-Column", "Bruteforce this transposition settings: Read in by column. Permute by column. Read out by column", 4, DisplayLevel.Beginner, ContextMenuControlType.CheckBox, null, "Row-Column-Column")]
     79        [TaskPane("Bruteforce Column-Column-Column", "Bruteforce this transposition settings: Read in by column. Permute by column. Read out by column", null, 4, false, DisplayLevel.Expert, ControlType.CheckBox, "")]
     80        public bool ColumnColumnColumn
     81        {
     82            get { return this.column_colum_column; }
     83            set
     84            {
     85                if (value != this.column_colum_column) HasChanges = true;
     86                this.column_colum_column = value;
     87                OnPropertyChanged("ColumnColumnColumn");
     88            }
     89        }
     90
    5791
    5892        public bool HasChanges
Note: See TracChangeset for help on using the changeset viewer.