Ignore:
Timestamp:
Oct 15, 2010, 1:39:40 PM (11 years ago)
Author:
Christoph Hartmann
Message:

accepts a custom (user defined) bigraph statistic, wich is generated by the PlayfairAnalysisStatistic plugin

File:
1 edited

Legend:

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

    r1939 r1979  
    2727using Mischel.Collections;
    2828using System.Threading;
     29using System.Windows;
    2930
    3031
     
    3233{   
    3334    [Author("Christoph Hartmann", "chris-ha@freenet.de", "Johannes Gutenberg-Universität Mainz", "http://www.uni-mainz.de")]
    34     [PluginInfo(false, "Playfair Analysis", "Ciphertext only attack on Playfair", "PlayfairAnalysis/DetailedDescription/Description.xaml", "PlayfairAnalysis/Images/icon.png")]
     35    [PluginInfo(false, "Playfair (Bruteforce) Analysis", "Ciphertext only attack on Playfair", "PlayfairAnalysis/DetailedDescription/Description.xaml", "PlayfairAnalysis/Images/icon.png")]
    3536    [EncryptionType(EncryptionType.Classic)]
    3637    public class PlayfairAnalysis : ISpecific
     
    4445        private Thread playFairAttackThread;
    4546        private bool executionStopped;
     47        private double[,] customLogStat;
     48        private double[] customLogStat2;
     49        private string alphabet = "";
    4650
    4751        #endregion
     
    5357        /// </summary>
    5458        [PropertyInfo(Direction.InputData, "Text input", "Input a string to be analyzed", null, DisplayLevel.Beginner)]
    55         public string InputString
     59        public virtual string InputString
    5660        {
    5761            get { return this.inputString; }
     
    6569            }
    6670        }
     71
     72        /*
     73        [PropertyInfo(Direction.InputData, "Bigraph Statistic", "Bigraph Statistic from Playfair Analysis Statistic Plugin", null, false, false, DisplayLevel.Beginner, QuickWatchFormat.Hex, null)]
     74        public virtual double[] CustomLogStat
     75        {
     76            get { return this.customLogStat2; }
     77            set
     78            {
     79                if (value != this.customLogStat2)
     80                {
     81                    this.customLogStat2 = value;
     82                    OnPropertyChanged("CustomLogStat");
     83                }
     84            }
     85        }
     86        */
     87
     88        CryptoolStream csBigraphStatistic;
     89        [PropertyInfo(Direction.InputData, "Bigraph Statistic", "Bigraph Statistic from Playfair Analysis Statistic Plugin", null, DisplayLevel.Beginner)]
     90        public CryptoolStream CustomLogStat
     91        {
     92            get
     93            {
     94                if (this.csBigraphStatistic != null)
     95                {
     96                    CryptoolStream cs = new CryptoolStream();
     97                    cs.OpenRead(this.csBigraphStatistic.FileName);
     98                    return cs;
     99                }
     100                return null;
     101            }
     102
     103            set
     104            {
     105                if (value != this.csBigraphStatistic)
     106                {
     107                    this.csBigraphStatistic = value;
     108                    OnPropertyChanged("CustomLogStat");
     109                }
     110            }
     111        }
     112
     113
     114
    67115
    68116        /// <summary>
     
    70118        /// </summary>
    71119        [PropertyInfo(Direction.OutputData, "Text output", "The output string after playfair analysis", null, DisplayLevel.Beginner)]
    72         public string OutputString
     120        public virtual string OutputString
    73121        {
    74122            get { return this.outputString; }
     
    82130
    83131        [PropertyInfo(Direction.OutputData, "CryptoolStream output", "The raw CryptoolStream data after playfair analysis", null, DisplayLevel.Beginner)]
    84         public CryptoolStream OutputData
     132        public virtual CryptoolStream OutputData
    85133        {
    86134            get
     
    149197            if (settings.HeapSize < 1)
    150198            {
    151                 System.Windows.MessageBox.Show("Heap size hast to be a positiv integer!\nHeap size is set to 5000");
     199                System.Windows.MessageBox.Show("Heap size has to be a positiv integer!\nHeap size is set to 5000");
    152200                settings.HeapSize = 5000;
    153201            }
     
    156204            // BigraphStatistic.CreateBS(@"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\", 6);
    157205
    158 
    159             // Read Bigraph Statistic from xml file
    160            
    161             switch (settings.MatrixSize)
    162             {
    163                 case 0:
    164                     if (settings.Language == 0)
     206            if (settings.UseCustomStatistic == 1)       // Use Bigraph Statistic that is generated by PlayfairAnalysisStatistic plugin
     207            {
     208                int alphabetLength;
     209                int offset = 0;
     210                csBigraphStatistic = CustomLogStat;
     211
     212                alphabetLength = (int)csBigraphStatistic.Read(offset, 1)[0];
     213                matrixSize = (int)(Math.Sqrt(alphabetLength));
     214
     215                BigraphStat = new Double[(int)Math.Pow(matrixSize, 2), (int)Math.Pow(matrixSize, 2)];
     216                byte[] statisticBuffer = new byte[8 * BigraphStat.Length];
     217
     218                alphabet = "";
     219                for (int i = 0; i < alphabetLength; i++)
     220                {
     221                    alphabet += (char)csBigraphStatistic.Read(offset, 1)[0];
     222                }
     223
     224               
     225                statisticBuffer = csBigraphStatistic.Read(offset, 8 * BigraphStat.Length);
     226               
     227
     228                for (int i = 0; i < (int)Math.Pow(matrixSize, 2); i++)
     229                {                               
     230                    for (int j = 0; j < (int)Math.Pow(matrixSize, 2); j++)
     231                    {                       
     232                        BigraphStat[i, j] = BitConverter.ToDouble(statisticBuffer, offset);
     233                        offset += 8;
     234                    }                               
     235                }
     236
     237                GuiLogMessage("MatrixSize: " + Convert.ToString(matrixSize), NotificationLevel.Info);
     238                GuiLogMessage("Custom Bigraph Stat successfully set", NotificationLevel.Info);
     239            }
     240
     241            else          // Read Bigraph Statistic from xml file
     242            {               
     243                switch (settings.MatrixSize)
     244                {
     245                    case 0:
     246                        if (settings.Language == 0)
     247                        {
     248                            BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10sde.xml";
     249                        }
     250                        else
     251                        {
     252                            BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10seng.xml";
     253                        }
     254                        matrixSize = 5;
     255                        alphabet = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
     256
     257                        break;
     258
     259                    case 1:
     260                        if (settings.Language == 0)
     261                        {
     262                            BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10lde.xml";
     263                        }
     264                        else
     265                        {
     266                            BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10leng.xml";
     267                        }
     268                        matrixSize = 6;
     269                        alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
     270                        break;
     271
     272                    default:
     273                        BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10sde.xml";
     274                        matrixSize = 5;
     275                        alphabet = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
     276                        break;
     277                }
     278
     279                BigraphStat = new Double[(int)Math.Pow(matrixSize, 2), (int)Math.Pow(matrixSize, 2)];
     280
     281                System.Xml.Serialization.XmlSerializer ReadBS = new System.Xml.Serialization.XmlSerializer(typeof(Double[][]));
     282                System.Xml.XmlReader XmlReader = System.Xml.XmlReader.Create(BsPath);
     283                Double[][] BigraphStatDummy = (Double[][])ReadBS.Deserialize(XmlReader);
     284                XmlReader.Close();
     285
     286                for (int i = 0; i < Math.Pow(matrixSize, 2); i++)
     287                {
     288                    for (int j = 0; j < Math.Pow(matrixSize, 2); j++)
    165289                    {
    166                         BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10sde.xml";
     290                        BigraphStat[i, j] = BigraphStatDummy[i][j];
    167291                    }
    168                     else
    169                     {
    170                         BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10seng.xml";
    171                     }
    172                     matrixSize = 5;
    173                     break;
    174 
    175                 case 1:
    176                     if (settings.Language == 0)
    177                     {
    178                         BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10lde.xml";
    179                     }
    180                     else
    181                     {
    182                         BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10leng.xml";
    183                     }
    184                     matrixSize = 6;
    185                     break;
    186 
    187                 default:
    188                     BsPath = @"c:\Documents and Settings\PT7130\My Documents\Visual Studio 2010\Projects\Cryptool2\trunk\CrypPlugins\PlayfairAnalysis\Data\BSLog10sde.xml";
    189                     matrixSize = 5;
    190                     break;
    191             }
    192 
    193             GuiLogMessage("MatrixSize: " + Convert.ToString(matrixSize), NotificationLevel.Info);
    194            
    195 
    196             BigraphStat = new Double[(int)Math.Pow(matrixSize, 2), (int)Math.Pow(matrixSize, 2)];
    197            
    198             System.Xml.Serialization.XmlSerializer ReadBS = new System.Xml.Serialization.XmlSerializer(typeof(Double[][]));
    199             System.Xml.XmlReader XmlReader = System.Xml.XmlReader.Create(BsPath);
    200             Double[][] BigraphStatDummy = (Double[][])ReadBS.Deserialize(XmlReader);
    201             XmlReader.Close();
    202 
    203             for (int i = 0; i < Math.Pow(matrixSize, 2); i++)
    204             {
    205                 for (int j = 0; j < Math.Pow(matrixSize, 2); j++)
    206                 {
    207                     BigraphStat[i, j] = BigraphStatDummy[i][j];
    208                 }
    209             }
    210            
    211             GuiLogMessage("Bigraph statistics loaded: " + BsPath, NotificationLevel.Info);
     292                }
     293
     294                GuiLogMessage("MatrixSize: " + Convert.ToString(matrixSize), NotificationLevel.Info);
     295                GuiLogMessage("Bigraph statistics loaded: " + BsPath, NotificationLevel.Info);
     296            }
     297
    212298            GuiLogMessage("Starting Analysis", NotificationLevel.Info);
    213299
    214             KeySearcher keySearcher = new KeySearcher(matrixSize, settings.HeapSize, BigraphStat, InputString);
     300            KeySearcher keySearcher = new KeySearcher(matrixSize, settings.HeapSize, BigraphStat, alphabet, InputString);
    215301
    216302            keySearcher.LogMessageByKeySearcher += new KeySearcher.LogMessageByKeySearcherEventHandler(OnLogMessageByKeySearcher);
     
    251337        public void Stop()
    252338        {
    253             playFairAttackThread.Abort();
     339            if (playFairAttackThread != null)
     340            {
     341                playFairAttackThread.Abort();
     342            }
    254343            executionStopped = true;
    255344        }
     
    257346        public void Initialize()
    258347        {
     348            settings.UseCustomStatistic = 0;
    259349        }
    260350
Note: See TracChangeset for help on using the changeset viewer.