Ignore:
Timestamp:
Nov 26, 2008, 2:16:11 PM (13 years ago)
Author:
angelov
Message:

again

Location:
trunk/CrypPlugins/KasiskiTest
Files:
6 edited

Legend:

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

    r71 r73  
    77using Cryptool.PluginBase.Analysis;
    88using System.ComponentModel;
    9 using System.Collections.ObjectModel;
     9using Cryptool.KasiskiTest;
     10
    1011using System.Windows.Controls;
    1112
    12 namespace KasiskiTest
     13namespace Cryptool.KasiskiTest
    1314{
    1415    [PluginInfo(false,
     
    1920    public class KasiskiTest : IStatistic
    2021    {
    21        
     22        public static DataSource Data = new DataSource();
     23       
     24
    2225        #region Private Variables
    2326        private int integerValue;
    2427        private string stringOutput;
    2528        private string stringInput;
    26         public static DataSource Data = new DataSource();
    2729        #endregion
    2830
     
    8789            set { settings = (KasiskiTestSettings)value; }
    8890        }
     91
     92
     93
    8994        private KasiskiTestPresentation presentation;
    9095        public KasiskiTest()
    9196        {
    92         settings = new KasiskiTestSettings();
    93         presentation = new KasiskiTestPresentation(this);
    94         Presentation = presentation;
    95         }
    96         public UserControl Presentation { get; private set; }
    97 
    98         public System.Windows.Controls.UserControl QuickWatchPresentation
    99         {
    100             get { return null; }
    101         }
     97            settings = new KasiskiTestSettings();
     98            KasiskiTestPresentation presentation = new KasiskiTestPresentation(this);
     99            Presentation = presentation;
     100        }
     101       public UserControl Presentation { get; private set; }
     102
     103
     104       public UserControl QuickWatchPresentation
     105       {
     106           get { return null; }
     107       }
    102108
    103109        public void PreExecution()
     
    110116            if (stringInput != null)
    111117            {
    112 
     118               
    113119                // BEGIN PREWORK TO INPUT STRING DEPENDING ON USER CHOICE IN SETTINGS PANEL
    114 
     120               
    115121                string workString = stringInput; //Copy the input string to a work string in order to make changes to it if neccessary
    116122                string workstring2 = "";
    117 
    118                 //UNKNOWN SYMBOL HANDLING
    119 
    120 
     123               
     124                  //UNKNOWN SYMBOL HANDLING
     125                               
     126               
    121127                if (settings.unknownSymbolHandling == 1) //Determine (via setting in Settings Panel) if unknown symbols (e.g. , : \ /) should be discarded from the text which is to be analysed
    122128                {
     
    134140                    workstring2 = workstring1.ToString(); // Now copy workstring1 to workstring2. Needed because workstring1 can not be altered once its built
    135141                }
    136                 else
     142                else 
    137143                {
    138144                    workstring2 = workString; // In case unknown symbols are to be ignored copy workString to workstring2, and proceed with analysis of workstring2
    139145                }
    140146
    141                 //CASE SENSITIVITY
    142 
    143                 if (settings.caseSensitivity == 0) { workstring2 = workstring2.ToUpper(); }
    144 
    145 
    146 
    147 
     147                   //CASE SENSITIVITY
     148
     149                if (settings.caseSensitivity == 0) { workstring2=workstring2.ToUpper(); }                         
     150               
     151               
     152               
     153               
    148154                //int grammLength = 3; - Setting for maximum gramm length now avaliable in Settings Panel
    149155                ArrayList checkedGramms = new ArrayList();
     
    153159                string grammToSearch;
    154160
    155 
    156 
     161                 
     162                             
    157163
    158164                //TODO "add functionality that allows the user to choose grammLength - Done" , "add another for loop which starts from 3 until gramLength is reached" - array size of checkedGramms[],factors[] and distances[] needs tweaking, otherwise done
    159165
    160 
     166               
    161167                //BEGIN TO SEARCH FOR EQUAL SUBSTRINGS AND TO COUNT DISTANCES BETWEEN THEM
    162168
    163 
     169               
    164170                for (int d = 3; d <= settings.grammLength; d++)
    165171                {
     
    172178                        //{
    173179
    174 
    175                         for (int n = i + settings.grammLength; n <= workstring2.Length - settings.grammLength; n++)  //go through workString starting after the end of the taken grammToSearch
    176                         {
    177                             if (grammToSearch == workstring2.Substring(n, d)) //if grammToSearch in workString
     180                           
     181                            for (int n = i + settings.grammLength; n <= workstring2.Length - settings.grammLength; n++)  //go through workString starting after the end of the taken grammToSearch
    178182                            {
    179                                 distances.Add(n - i);               //save the distance in index 'g' of distances exactly where gramToSearch in checkedGramms is placed 
    180                                 checkedGramms.Add(grammToSearch);                     //put in unused space of checkedGramms
    181 
    182                                 break;
     183                                if (grammToSearch == workstring2.Substring(n, d)) //if grammToSearch in workString
     184                                {
     185                                    distances.Add(n-i);               //save the distance in index 'g' of distances exactly where gramToSearch in checkedGramms is placed 
     186                                    checkedGramms.Add(grammToSearch);                     //put in unused space of checkedGramms
     187                                   
     188break;
     189                                }
     190
     191
    183192                            }
    184 
    185 
    186                         }
    187193                        //}
    188 
     194                       
    189195                    }
    190196                }
     
    193199
    194200
    195 
     201               
    196202
    197203                //TODO: SPEED !@#$%^& !!!
    198204
    199 
    200 
    201 
     205                             
     206               
     207               
    202208                //int[] copyOfDistances = distances.GetType(); //Copy distances to find largest member
    203209                //Array.Copy(distances, copyOfDistances, distances.Length);
    204210                //Array.Sort(copyOfDistances);
    205211                //int sqrtOfLargestDist = Convert.ToInt32(Math.Sqrt(copyOfDistances[copyOfDistances.Length - 1])); //sqrtOf largest distance will give the maximum number of prime factors of the distance for example if the distance is a power of 2 which is the worst case
    206                 int x = 0;
     212                int x=0;
    207213
    208214
    209215                int[,] factors = new int[distances.Count, settings.factorSize /*sqrtOfLargestDist */];    //Rectangular array factors     
    210216
    211                 int[] factorCounter = new int[(settings.factorSize + 1) /*sqrtOfLargestDist */];                //Vector array each factor is the index of the array, the element at this index illustrates how many times the factor is met
    212 
     217                int[] factorCounter = new int[(settings.factorSize+1) /*sqrtOfLargestDist */];                //Vector array each factor is the index of the array, the element at this index illustrates how many times the factor is met
     218               
    213219                for (int z = 0; z <= distances.Count - 1; z++)       //for each distance
    214220                {
    215                     int numberToFactorize = Convert.ToInt32(distances[z]);             //assign variable
     221                    int numberToFactorize = Convert.ToInt32( distances[z]);             //assign variable
    216222                    x = 0;
    217223
    218224                    for (int y = 2; y <= settings.factorSize/*Math.Sqrt(numberToFactorize)*/; y++) // for each number starting from 2 until sqrt(number to factorize)
    219225                    {
    220                         if (numberToFactorize == 0) { break; }
     226                        if (numberToFactorize == 0) { break;}
    221227                        if (numberToFactorize % y == 0 /*& numberToFactorize!=0*/)     // if devisibe without rest
    222228                        {
     
    224230                            x++;
    225231                            factorCounter[y]++;
    226 
    227                             // while (numberToFactorize % y == 0)  //if a factor is found numberToFactorize is divided by it until division without rest is not possible anymore
    228                             // {
    229                             //     numberToFactorize = numberToFactorize / y;
    230                             // }
     232                           
     233                           // while (numberToFactorize % y == 0)  //if a factor is found numberToFactorize is divided by it until division without rest is not possible anymore
     234                           // {
     235                           //     numberToFactorize = numberToFactorize / y;
     236                           // }
    231237                        }
    232238                    }
     
    235241                }
    236242                Data.ValueCollection.Clear();
    237                 for (int z = 2; z <= factorCounter.Count(); z++)
    238                 {
    239                     CollectionElement row = new CollectionElement(z,factorCounter[z]);
     243                for (int n = 2; n < factorCounter.Count()-1; n++)
     244                {
     245                   
     246                    CollectionElement row = new CollectionElement(n, factorCounter[n]);
    240247                    Data.ValueCollection.Add(row);
    241248                }
    242                 presentation.InitializeComponent();
    243                     //BEGIN OUTPUT
    244                     stringOutput = "";
    245                 for (int i = 2; i <= factorCounter.Count() - 1; i++)
    246                 {
    247                     stringOutput += i + ":" + Convert.ToString(factorCounter[i]) + Environment.NewLine;
    248                 }
    249                
    250                 //   for (int k = 0; k <= checkedGramms.Count - 1; k++)
    251                 //   {
    252                 //       if (Convert.ToInt32(distances[k] )!= 0)
    253                 //       { StringOutput += checkedGramms[k] + "/" + Convert.ToString(distances[k]);
    254                 //         for (int l = 0; l <= settings.factorSize /*sqrtOfLargestDist */ - 1; l++)
    255                 //           {
    256                 //               if (factors[k, l] != 0) { StringOutput += "/" + Convert.ToString(factors[k, l]); }
    257                 ///
    258                 //              }
    259                 //              StringOutput += '\n';
    260                 //          }
    261                 //         
    262                 //     }   
    263                 //     
     249                presentation.OpenPresentationFile();
     250
     251                // OUTPUT
     252                StringOutput = "";
     253                for(int i=2; i<=factorCounter.Count()-1; i++)
     254               
     255                {
     256                    StringOutput +=i+":"+Convert.ToString(factorCounter[i])+"\n";
     257                }
     258
     259             //   for (int k = 0; k <= checkedGramms.Count - 1; k++)
     260             //   {
     261             //       if (Convert.ToInt32(distances[k] )!= 0)
     262             //       { StringOutput += checkedGramms[k] + "/" + Convert.ToString(distances[k]);
     263             //         for (int l = 0; l <= settings.factorSize /*sqrtOfLargestDist */ - 1; l++)
     264             //           {
     265             //               if (factors[k, l] != 0) { StringOutput += "/" + Convert.ToString(factors[k, l]); }
     266///
     267          //              }
     268          //              StringOutput += '\n';
     269          //          }
     270          //         
     271           //     }   
     272           //     
    264273                //find the most frequent factor
    265                 //  int biggestSoFar=0;
    266                 //  int biggestSoFarIndex=0;
    267                 // 
    268                 //   for (int j = 0; j <= factorCounter.Length - 1; j++)
    269                 //  {
    270                 //      if (factorCounter[j] > biggestSoFar)
    271                 //     {
     274              //  int biggestSoFar=0;
     275              //  int biggestSoFarIndex=0;
     276             // 
     277             //   for (int j = 0; j <= factorCounter.Length - 1; j++)
     278              //  {
     279              //      if (factorCounter[j] > biggestSoFar)
     280               //     {
    272281                //       
    273282                //        biggestSoFar = factorCounter[j];
    274283                //        biggestSoFarIndex = j;
    275284                //    }
    276                 //     
    277                 // }
    278                 // if (biggestSoFarIndex % 2 == 0)
    279                 // {
    280                 //     StringOutput += '\n' + "The probable keylength is a multiple of: " + biggestSoFarIndex ;
    281                 /// }
    282                 // else
    283                 // {
    284                 //
    285                 //      StringOutput += '\n' + "most frequent factor is:" + biggestSoFarIndex + '\n' + "with: " + biggestSoFar + " hits";
    286                 //   }
    287                 //   integerValue = biggestSoFarIndex;
    288             }
    289 
    290         }
     285               //     
     286               // }
     287               // if (biggestSoFarIndex % 2 == 0)
     288               // {
     289               //     StringOutput += '\n' + "The probable keylength is a multiple of: " + biggestSoFarIndex ;
     290               /// }
     291               // else
     292               // {
     293           //
     294              //      StringOutput += '\n' + "most frequent factor is:" + biggestSoFarIndex + '\n' + "with: " + biggestSoFar + " hits";
     295             //   }
     296             //   integerValue = biggestSoFarIndex;
     297            }
     298
     299        }
     300
     301         //P.S. The arrays used in the solution are:
     302        //checkedGramms -the array contains all checked gramms :) 
     303        //distances - The same size as checkedGramms, if the gramm doesn't repeat itself the value of distances[k] corresponding to checkedGramms[k] equals 0
     304        //factors - same size as checkedGramms and distances on one side ,and 20 (for now)on the other side for the factors , if the corresponding distance is 0 all the factors are also 0
     305       
    291306       
    292307       
     
    333348        #endregion
    334349    }
    335     public class CollectionElement
    336     {
    337 
    338 
    339        
    340         private int m_factor;
    341         private int m_count;
    342 
    343 
    344 
    345         public CollectionElement(int factor, int count)
    346         {
    347             m_factor = factor;
    348             m_count = count;
    349         }
    350 
    351         public int Count
    352         {
    353             get { return m_count; }
    354             set
    355             {
    356                 m_count = value;
    357             }
    358         }
    359         public int Factor
    360         {
    361             get { return m_factor; }
    362             set
    363             {
    364                 m_factor = value;
    365             }
    366         }
    367 
    368     }
    369     public class DataSource
    370     {
    371 
    372         private ObservableCollection<CollectionElement> valueCollection;
    373 
    374         public ObservableCollection<CollectionElement> ValueCollection
    375         {
    376             get { return valueCollection; }
    377             set { valueCollection = value; }
    378         }
    379 
    380         //public void AddtoCollection(int i, double d, string s)
    381        // {
    382         //    CollectionElement z = new CollectionElement(i, d, s);
    383         //    valueCollection.Add(z);
    384        // }
    385 
    386         public DataSource()
    387         {
    388            // CollectionElement z= new CollectionElement(30,30.5,"qqq");
    389             valueCollection = new ObservableCollection<CollectionElement>();
    390            // valueCollection.Add(z);
    391            // CollectionElement y = new CollectionElement(30, 30.5, "qqq");
    392             //CollectionElement s = new CollectionElement(30, 30.5, "qqq");
    393            // valueCollection.Add(s);
    394            // valueCollection.Add(y);
    395            // CollectionElement q = new CollectionElement(30, 30.5, "qqq");
    396            // valueCollection.Add(q);
    397         }
    398     }
    399 
    400350}
  • trunk/CrypPlugins/KasiskiTest/KasiskiTest.csproj

    r71 r73  
    6060  </ItemGroup>
    6161  <ItemGroup>
     62    <Compile Include="CollectionElement.cs" />
     63    <Compile Include="DataSource.cs" />
    6264    <Compile Include="KasiskiTest.cs" />
    63     <Compile Include="KasiskiTestSettings.cs" />
    64     <Compile Include="Properties\AssemblyInfo.cs" />
    6565    <Compile Include="KasiskiTestPresentation.xaml.cs">
    6666      <DependentUpon>KasiskiTestPresentation.xaml</DependentUpon>
    6767    </Compile>
     68    <Compile Include="KasiskiTestSettings.cs" />
     69    <Compile Include="Properties\AssemblyInfo.cs" />
    6870  </ItemGroup>
    6971  <ItemGroup>
  • trunk/CrypPlugins/KasiskiTest/KasiskiTestPresentation.xaml

    r71 r73  
    22    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    33    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4     xmlns:local="clr-namespace:Cryptool.KasiskiTest"     
     4    xmlns:local="clr-namespace:Cryptool.KasiskiTest"       
    55    Background="Transparent"
    66    SnapsToDevicePixels="True"
     
    1111    <UserControl.Resources>
    1212
    13         <local:KasiskiTestPresentation x:Key="source"/>
     13        <local:DataSource x:Key="source"/>
    1414
    1515
     
    2222                <StackPanel Orientation="Vertical" HorizontalAlignment="Center">
    2323
    24                     <TextBlock HorizontalAlignment="Center" Text="{Binding Path=Count}">
     24                    <TextBlock HorizontalAlignment="Center" Text="{Binding Path=Amount}">
    2525                    </TextBlock>
    2626
    2727                    <Rectangle Height="3"/>
    2828
    29                     <Rectangle Height="{Binding Path=Count}" Width="30" StrokeThickness="1" Stroke="Beige" RadiusX="5" RadiusY="5" >
     29                    <Rectangle Height="{Binding Path=Amount}" Width="30" StrokeThickness="1" Stroke="Beige" RadiusX="5" RadiusY="5" >
    3030                        <Rectangle.BitmapEffect>
    3131                            <DropShadowBitmapEffect />
     
    6262
    6363
    64     <ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto"  ScrollViewer.HorizontalScrollBarVisibility="Auto" IsDeferredScrollingEnabled="False">
     64    <ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto"  ScrollViewer.HorizontalScrollBarVisibility="Auto">
    6565        <StackPanel>
    66             <TextBlock TextAlignment="Center" FontSize="20" Foreground="DarkBlue"  FontFamily="Academy" OpacityMask="Turquoise" Text="Probable Key Lengths with respective hits."></TextBlock>
     66            <TextBlock TextAlignment="Center" FontSize="20" Foreground="DarkBlue"  FontFamily="Academy" OpacityMask="Turquoise" Text="Kasiski's Test Analysis"></TextBlock>
    6767
    6868
     
    8080
    8181</UserControl>
     82   
  • trunk/CrypPlugins/KasiskiTest/KasiskiTestPresentation.xaml.cs

    r71 r73  
    1818using System.Windows.Threading;
    1919
    20 namespace KasiskiTest
     20
     21namespace Cryptool.KasiskiTest
    2122{
    22     /// <summary>
    23     /// Interaction logic for KasiskiTestPresentation.xaml
    24     /// </summary>
    25     public partial class KasiskiTestPresentation : UserControl
     23   
     24    public partial class KasiskiTestPresentation: UserControl
    2625    {
    27         //public static DataSource source = KasiskiTest.Data ;
     26       
    2827
    2928
    30         //private FrequencyTest freqT;
     29       
    3130        public KasiskiTestPresentation(KasiskiTest KasiskiTest)
    3231        {
    3332            InitializeComponent();
     33           
    3434        }
    35 
    36         public void InitializeComponent()
    37             {
     35       
     36        public void OpenPresentationFile()
     37        {
    3838            Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    3939            {
    40                 // if (freqT.StringOutput != null)
    41                 // {
     40               
    4241                DataSource source = (DataSource)this.Resources["source"];
    4342                source.ValueCollection.Clear();
     
    4645                    source.ValueCollection.Add(KasiskiTest.Data.ValueCollection[i]);
    4746                }
    48                 //}
     47               
    4948
    5049
    51                }, null);
    52             }
     50            }, null);
     51        }
    5352    }
    5453}
  • trunk/CrypPlugins/KasiskiTest/KasiskiTestSettings.cs

    r4 r73  
    77using System.ComponentModel;
    88
    9 namespace KasiskiTest
     9namespace Cryptool.KasiskiTest
    1010{
    11     class KasiskiTestSettings : ISettings
     11   public class KasiskiTestSettings : ISettings
    1212    {
    1313        #region ISettings Members
     
    3232        public int grammLength = 3;
    3333        public int factorSize = 20;
    34         /// <summary>
    35         /// Visible setting how to deal with alphabet case. 0 = case insentive, 1 = case sensitive
    36         /// </summary>
     34       
    3735       
    3836        [PropertySaveOrder(1)]
Note: See TracChangeset for help on using the changeset viewer.