Changeset 922


Ignore:
Timestamp:
Nov 30, 2009, 5:43:13 PM (12 years ago)
Author:
kohnen
Message:
  • added contains function to CostFunction

(e.g. for partial known plaintext)

Location:
trunk/CrypPlugins
Files:
4 edited

Legend:

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

    r859 r922  
    196196                        this.Value = calculateNGrams(bigramInput,2,1);
    197197                        break;
    198                     case 5: // alternative Bigram
    199                         this.Value = relativeBigramFrequency(bigramInput);
     198                    case 5: //contains
     199                        this.Value = contains(bigramInput);
    200200                        break;
    201201                    default:
     
    268268        #region private methods
    269269
     270        public double contains(string input)
     271        {
     272            if (settings.Contains == null)
     273            {
     274                GuiLogMessage("There is no text to be searched for. Please insert text in the 'Contains text' - Textarea", NotificationLevel.Error);
     275                return new Double();
     276            }
     277
     278            if(input.Contains(settings.Contains))
     279            {
     280                return 1.0;
     281            }
     282            return -1.0;
     283        }
     284
     285
    270286        /// <summary>
    271287        /// Calculates the Index of Coincidence multiplied with 100 of
     
    413429
    414430            return statistics[gramLength];
    415         }
    416 
    417 
    418         public double relativeBigramFrequency(string input)
    419         {
    420             string text = input.ToUpper();
    421             if (bigramMatrix == null)
    422             {
    423                 bigramMatrix = getBiGramMatrix();
    424             }
    425             double sum = 0.0;
    426             double count = 0.0;
    427 
    428             for (int i = 0; i < input.Length - 1; i++)
    429             {
    430                 char a = text[i];
    431                 char b = text[i + 1];
    432 
    433                 if (isInAlphabet(a) && isInAlphabet(b))
    434                 {
    435                     int x = (int)a - 65;
    436                     int y = (int)b - 65;
    437                     sum += bigramMatrix[x, y];
    438                     count++;
    439                 }
    440             }
    441             return (sum/count);
    442         }
    443 
    444         private double[,] getBiGramMatrix()
    445         {
    446             double[,] matrix = new double[26, 26];
    447             StreamReader reader = new StreamReader(Path.Combine(PluginResource.directoryPath, "CostFunctionDeutsch.txt"));
    448            
    449                    
    450             String text;
    451 
    452             while ((text = reader.ReadLine()) != null)
    453             {
    454                 text = text.ToUpper();
    455                 for (int i = 0; i < text.Length - 1; i++)
    456                 {
    457                     char a = text[i];
    458                     char b = text[i + 1];
    459 
    460                     if (isInAlphabet(a) && isInAlphabet(b))
    461                     {
    462                         int x = (int)a - 65;
    463                         int y = (int)b - 65;
    464                         matrix[x, y] = matrix[x, y] + 1;
    465                     }
    466                 }
    467 
    468             }
    469 
    470             for (int i = 0; i < 26; i++)
    471             {
    472                 double count = 0;
    473                 for (int j = 0; j < 26; j++)
    474                 {
    475                     count = count + matrix[i, j];
    476 
    477                 }
    478 
    479                 for (int j = 0; j < 26; j++)
    480                 {
    481                     matrix[i, j] = matrix[i, j] / (count / 100);
    482                 }
    483             }
    484             return matrix;
    485         }
    486 
    487         private bool isInAlphabet(char c)
    488         {
    489             int val = (int)(c);
    490             int test = val - 65;
    491             if (test >= 0 && test <= 25)
    492             {
    493                 return true;
    494             }
    495             return false;
    496431        }
    497432
     
    607542                case 4: // percentage
    608543                    return RelationOperator.LargerThen;
    609                 case 5: // alternative bigrams
     544                case 5: // Contains
    610545                    return RelationOperator.LargerThen;
    611546                default:
     
    648583                case 4: // Bigrams: Percentaged
    649584                    return plugin.calculateNGrams(plugin.ByteArrayToString(text), 2, 1);
    650                 case 5: // alternative Bigram
    651                     return plugin.relativeBigramFrequency(plugin.ByteArrayToString(text));
    652 
     585                case 5: //Contains
     586                    return plugin.contains(plugin.ByteArrayToString(text));
    653587                default:
    654588                    throw new NotImplementedException("The value " + ((CostFunctionSettings)this.plugin.Settings).FunctionType + " is not implemented.");
     
    656590        }
    657591
     592
    658593        #endregion
    659594    }
  • trunk/CrypPlugins/CostFunction/CostFunctionSettings.cs

    r859 r922  
    3333        #endregion
    3434       
    35         [TaskPane("FunctionType", "Select the type of function", null, 1, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Index of coincidence", "Entropy", "Bigrams: log 2", "Bigrams: Sinkov", "Bigrams: Percentaged", "Relative Bigram Frequency" })]
     35        [TaskPane("FunctionType", "Select the type of function", null, 1, false, DisplayLevel.Beginner, ControlType.ComboBox, new string[] { "Index of coincidence", "Entropy", "Bigrams: log 2", "Bigrams: Sinkov", "Bigrams: Percentaged", "Contains"})]
    3636        public int FunctionType
    3737        {
     
    5555                bytesToUse = value;
    5656                OnPropertyChanged("bytesToUse");
     57            }
     58        }
     59
     60
     61        private string contains;
     62        [TaskPane("Contains text", "Text checked for.", null, 5, false, DisplayLevel.Beginner, ControlType.TextBox)]
     63        public String Contains
     64        {
     65            get
     66            {
     67                return contains;
     68            }
     69            set
     70            {
     71                contains = value;
     72                OnPropertyChanged("contains");
    5773            }
    5874        }
  • trunk/CrypPlugins/TranspositionAnalyser/TranspositionAnalyser.cs

    r917 r922  
    88using Cryptool.PluginBase.Control;
    99using Cryptool.PluginBase.Miscellaneous;
     10using System.Collections;
    1011
    1112
     
    9798        public UserControl QuickWatchPresentation
    9899        {
    99             get { return null; }
     100            get;
     101            private set;
    100102        }
    101103
     
    214216                String best_text = "";
    215217                byte[] best_bytes = null;
     218                ArrayList list = null;
    216219
    217220
     
    275278                                {
    276279                                    double val = costMaster.calculateCost(dec);
     280                                    if(val.Equals(new Double()))
     281                                    {
     282                                     return new byte[0];   
     283                                    }
    277284                                    if (costMaster.getRelationOperator() == RelationOperator.LessThen)
    278285                                    {
    279                                         if (val < best)
     286                                        if (val == best)
    280287                                        {
     288                                            if (list == null)
     289                                            {
     290                                                list = new ArrayList();
     291                                                list.Add(best_text);
     292                                            }
     293                                            list.Add(System.Text.Encoding.ASCII.GetString(dec));
     294                                        }
     295
     296                                        else if (val < best)
     297                                        {
     298                                            list = null;
    281299                                            best = val;
    282300                                            best_text = System.Text.Encoding.ASCII.GetString(dec);
     
    286304                                    else
    287305                                    {
    288                                         if (val > best)
     306                                        if (val == best)
    289307                                        {
     308                                            if (list == null)
     309                                            {
     310                                                list = new ArrayList();
     311                                                list.Add(best_text);
     312                                            }
     313                                            list.Add(System.Text.Encoding.ASCII.GetString(dec));
     314                                        }
     315
     316                                        else if (val > best)
     317                                        {
     318                                            list = null;
    290319                                            best = val;
    291320                                            best_text = System.Text.Encoding.ASCII.GetString(dec);
     
    305334                        }
    306335                    }
    307                     GuiLogMessage("ENDE " + best + ": " + best_text, NotificationLevel.Info);
     336                    if (list != null)
     337                    {
     338                        int i = 1;
     339                        foreach (string tmp in list)
     340                        {
     341                            GuiLogMessage("ENDE (" + i++ + ")" + best + ": " + tmp,NotificationLevel.Info);
     342                        }
     343                    }
     344                    else
     345                    {
     346                        GuiLogMessage("ENDE " + best + ": " + best_text, NotificationLevel.Info);
     347                    }
    308348                    return best_bytes;
    309349                }
  • trunk/CrypPlugins/TranspositionAnalyser/TranspositionAnalyser.csproj

    r859 r922  
    5050    <Reference Include="System.Data" />
    5151    <Reference Include="System.Xml" />
     52    <Reference Include="UIAutomationProvider">
     53      <RequiredTargetFramework>3.0</RequiredTargetFramework>
     54    </Reference>
    5255    <Reference Include="WindowsBase">
    5356      <RequiredTargetFramework>3.0</RequiredTargetFramework>
Note: See TracChangeset for help on using the changeset viewer.