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/CostFunction
Files:
2 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        }
Note: See TracChangeset for help on using the changeset viewer.