Changeset 1105


Ignore:
Timestamp:
Jan 25, 2010, 9:21:19 PM (12 years ago)
Author:
kohnen
Message:
  • functional QuickWatch
Location:
trunk/CrypPlugins/TranspositionAnalyser
Files:
2 edited

Legend:

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

    r1087 r1105  
    1111using System.Windows.Threading;
    1212using System.Threading;
     13using System.Collections.Generic;
    1314
    1415
     
    2627        private byte[] crib;
    2728        private byte[] input;
     29        private Queue valuequeue;
     30        LinkedList<ValueKey> list1;
    2831
    2932        TranspositionAnalyserSettings settings;
     
    274277        private byte[] costfunction_bruteforce(IControlEncryption sender)
    275278        {
     279            valuequeue = Queue.Synchronized(new Queue());
    276280            int[] set = getBruteforceSettings();
    277281            stop = false;
     
    280284                GuiLogMessage("start", NotificationLevel.Info);
    281285                double best = Double.MinValue;
     286               
    282287                if (costMaster.getRelationOperator() == RelationOperator.LessThen)
    283288                {
    284289                    best = Double.MaxValue;
    285290                }
     291
     292                list1 = getDummyLinkedList(best);
    286293                String best_text = "";
    287294                byte[] best_bytes = null;
     
    291298                //Just for fractional-calculation:
    292299                PermutationGenerator per = new PermutationGenerator(2);
    293 
     300                DateTime starttime = DateTime.Now;
     301                DateTime lastUpdate = DateTime.Now;
    294302
    295303                int max = 0;
     
    338346                            while (per.hasMore() && !stop)
    339347                            {
     348                                best = list1.Last.Value.value;
    340349                                int[] key = per.getNext();
    341350                                byte[] b = new byte[key.Length];
     
    354363                                    if (costMaster.getRelationOperator() == RelationOperator.LessThen)
    355364                                    {
    356                                         if (val == best)
     365                                        if (val <= best)
    357366                                        {
    358                                             if (list == null)
     367                                            ValueKey valkey = new ValueKey();
     368                                            String keyStr = "";
     369                                            foreach (int xyz in key)
    359370                                            {
    360                                                 list = new ArrayList();
    361                                                 list.Add(best_text);
     371                                                keyStr += xyz;
    362372                                            }
    363                                             list.Add(System.Text.Encoding.ASCII.GetString(dec));
    364                                         }
    365 
    366                                         else if (val < best)
    367                                         {
    368                                             list = null;
    369                                             best = val;
    370                                             best_text = System.Text.Encoding.ASCII.GetString(dec);
    371                                             best_bytes = dec;
     373                                            valkey.decryption = dec;
     374                                            valkey.key = keyStr;
     375                                            valkey.value = val;
     376                                            valuequeue.Enqueue(valkey);
    372377                                        }
    373378                                    }
    374379                                    else
    375380                                    {
    376                                         if (val == best)
     381                                        if (val >= best)
    377382                                        {
    378                                             if (list == null)
     383                                            ValueKey valkey = new ValueKey();
     384                                            String keyStr = "";
     385                                            foreach (int xyz in key)
    379386                                            {
    380                                                 list = new ArrayList();
    381                                                 list.Add(best_text);
     387                                                keyStr += xyz;
    382388                                            }
    383                                             list.Add(System.Text.Encoding.ASCII.GetString(dec));
    384                                         }
    385 
    386                                         else if (val > best)
    387                                         {
    388                                             list = null;
    389                                             best = val;
    390                                             best_text = System.Text.Encoding.ASCII.GetString(dec);
    391                                             best_bytes = dec;
     389                                            valkey.decryption = dec;
     390                                            valkey.key = keyStr;
     391                                            valkey.value = val;
     392                                            valuequeue.Enqueue(valkey);
     393                                           
    392394                                        }
    393395                                    }
    394396                                }
    395397
    396 
    397398                                sum++;
    398                                 if (sum % 1000 == 0)
    399                                 {
     399                                if (DateTime.Now >= lastUpdate.AddMilliseconds(1000))
     400                                {   updateToplist(list1);
     401                                    showProgress(starttime, size, sum);
    400402                                    ProgressChanged(sum, size);
     403                                    lastUpdate = DateTime.Now;
    401404                                }
    402 
    403405                            }
    404406                        }
     
    416418                        GuiLogMessage("ENDE " + best + ": " + best_text, NotificationLevel.Info);
    417419                    }
    418                     return best_bytes;
     420                    return list1.First.Value.decryption;
    419421                }
    420422                else
     
    431433        }
    432434
     435        private LinkedList<ValueKey> getDummyLinkedList(double best)
     436        {
     437            ValueKey valueKey = new ValueKey();
     438            valueKey.value = best;
     439            valueKey.key = "dummykey";
     440            valueKey.decryption = new byte[0];
     441            LinkedList<ValueKey> list = new LinkedList<ValueKey>();
     442            LinkedListNode<ValueKey> node = list.AddFirst(valueKey);
     443            for (int i = 0; i < 10; i++)
     444            {
     445                node = list.AddAfter(node, valueKey);
     446            }
     447            return list;
     448        }
     449
     450        private void updateToplist(LinkedList<ValueKey> costList)
     451        {
     452            LinkedListNode<ValueKey> node;
     453            while (valuequeue.Count != 0)
     454            {
     455                ValueKey vk = (ValueKey)valuequeue.Dequeue();
     456                if (this.costMaster.getRelationOperator() == RelationOperator.LargerThen)
     457                {
     458                    if (vk.value > costList.Last().value)
     459                    {
     460                        node = costList.First;
     461                        while (node != null)
     462                        {
     463                            if (vk.value > node.Value.value)
     464                            {
     465                                costList.AddBefore(node, vk);
     466                                costList.RemoveLast();
     467                               // value_threshold = costList.Last.Value.value;
     468                                break;
     469                            }
     470                            node = node.Next;
     471                        }//end while
     472                    }//end if
     473                }
     474                else
     475                {
     476                    if (vk.value < costList.Last().value)
     477                    {
     478                        node = costList.First;
     479                        while (node != null)
     480                        {
     481                            if (vk.value < node.Value.value)
     482                            {
     483                                costList.AddBefore(node, vk);
     484                                costList.RemoveLast();
     485                               // value_threshold = costList.Last.Value.value;
     486                                break;
     487                            }
     488                            node = node.Next;
     489                        }//end while
     490                    }//end if
     491                }
     492            }
     493        }
     494
    433495        #endregion
    434496
     
    447509            }
    448510        }
     511       
    449512        #region cribAnalysis
    450513        public void cribAnalysis(byte[] crib, byte[] cipher)
     
    462525
    463526        #endregion
     527
    464528        #region KeyLengthAnalysis
    465529
     
    620684       
    621685        //hier entsteht eine QUICKWATCH
    622         private void showProgress(String theBestTry)
    623         {
    624                  
    625             //if (QuickWatchPresentation.IsVisible && theBestTry.Length != 0 && !stop)
    626             //{
    627             //    double time = 100;
    628             //  TimeSpan timeleft = new TimeSpan(-1);
    629 
    630             //  try
    631             //  {
    632             //      if (time / (24 * 60 * 60) <= int.MaxValue)
    633             //      {
    634             //          int days = (int)(time / (24 * 60 * 60));
    635             //          time = time - (days * 24 * 60 * 60);
    636             //          int hours = (int)(time / (60 * 60));
    637             //          time = time - (hours * 60 * 60);
    638             //          int minutes = (int)(time / 60);
    639             //          time = time - (minutes * 60);
    640             //          int seconds = (int)time;
    641 
    642 
    643             //          timeleft = new TimeSpan(days, hours, minutes, (int)seconds, 0);
    644             //      }
    645             //  }
    646             //  catch
    647             //  {
    648             //      //can not calculate time span
    649             //  }
    650 
    651             //    ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    652             //    {
    653             //        ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).keysPerSecond.Text = "" + theBestTry;
    654             //        if (timeleft != new TimeSpan(-1))
    655             //        {
    656             //            ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).timeLeft.Text = "" + timeleft;
    657             //            try
    658             //            {
    659             //                ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "" + DateTime.Now.Add(timeleft);
    660             //            }
    661             //            catch
    662             //            {
    663             //                ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "in a galaxy far, far away...";
    664             //            }
    665             //        }
    666             //        else
    667             //        {
    668             //            ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).timeLeft.Text = "incalculable :-)";
    669             //            ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "in a galaxy far, far away...";
    670             //        }
    671 
    672             //        ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).listbox.Items.Clear();
    673             //        linkedListNode = costList.First;
    674             //        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    675             //        int i = 0;
    676             //        while (linkedListNode != null)
    677             //        {
    678             //            i++;
    679             //            ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).listbox.Items.Add(i + ") " + Math.Round(linkedListNode.Value.value, 4) + " = " + linkedListNode.Value.key + " : \"" +
    680             //                enc.GetString(linkedListNode.Value.decryption).Replace("\n", "").Replace("\r", "").Replace("\t", "") + "\"");
    681             //            linkedListNode = linkedListNode.Next;
    682             //        }
    683                 //}
    684                 //, null);
    685             }//end if
    686 
    687 
    688             //if (!stop && QuickWatchPresentation.IsVisible)
    689             //{
    690 
    691             //    ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
    692             //    {
    693             //        ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).listbox.Items.Clear();
    694             //        linkedListNode = costList.First;
    695             //        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    696             //        int i = 0;
    697             //        while (linkedListNode != null)
    698             //        {
    699             //            i++;
    700             //            ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).listbox.Items.Add(i + ") " + Math.Round(linkedListNode.Value.value, 4) + " = " + linkedListNode.Value.key + " : \"" +
    701             //                enc.GetString(linkedListNode.Value.decryption).Replace("\n", "").Replace("\r", "").Replace("\t", "") + "\"");
    702             //            linkedListNode = linkedListNode.Next;
    703             //        }
    704                 //}
    705                 //, null);
    706             //}
    707         //}//bis hier geht die QW
    708        
    709      
    710 
     686        private void showProgress(DateTime startTime, long size, long sum)
     687        {
     688            LinkedListNode<ValueKey> linkedListNode;
     689            if (QuickWatchPresentation.IsVisible && !stop)
     690            {
     691                DateTime currentTime = DateTime.Now;
     692                TimeSpan span = currentTime.Subtract(startTime);
     693                int seconds = span.Seconds;
     694                int minutes = span.Minutes;
     695                int hours = span.Hours;
     696                int days = span.Days;
     697
     698                long allseconds = seconds + 60 * minutes + 60 * 60 * hours + 24 * 60 * 60 * days;
     699                if (allseconds == 0) allseconds = 1;
     700                long keysPerSec = sum / allseconds;
     701
     702                long keystodo = (size - sum);
     703                long secstodo = keystodo / keysPerSec;
     704                DateTime endTime = DateTime.Now.AddSeconds(secstodo);
     705
     706
     707                ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
     708                {
     709
     710                    ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).keysPerSecond.Text = "" + keysPerSec;
     711
     712
     713                    ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).timeLeft.Text = "" + endTime.Subtract(DateTime.Now);
     714
     715                    ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).endTime.Text = "" + endTime;
     716                    //((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).listbox.Clear();
     717                    linkedListNode = list1.First;
     718                    ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).listbox.Items.Clear();
     719                    int i = 0;
     720                    while (linkedListNode != null)
     721                    {
     722                        i++;
     723
     724                        String dec = System.Text.Encoding.ASCII.GetString(linkedListNode.Value.decryption).Substring(0, 25) + "...";
     725                        String key = linkedListNode.Value.key;
     726                        String value = linkedListNode.Value.value + "";
     727                        String outp = i+".:" + key + ":" + dec + "(" + value +")";
     728                        ((TranspositionAnalyserQuickWatchPresentation)QuickWatchPresentation).listbox.Items.Add(outp);
     729                        linkedListNode = linkedListNode.Next;
     730                    }
     731               
     732                }
     733
     734
     735                , null);
     736               
     737            }
     738        }
     739   
    711740    }
     741
     742    public struct ValueKey
     743    {
     744        public double value;
     745        public String key;
     746        public byte[] decryption;
     747    };
    712748}
  • trunk/CrypPlugins/TranspositionAnalyser/TranspositionAnalyserQuickWatchPresentation.xaml

    r1016 r1105  
    2626                 TextAlignment="Center" IsReadOnly="True" TextWrapping="WrapWithOverflow" VerticalAlignment="Top" Height="28" FontSize="10" BorderThickness="1" />
    2727
    28         <Label Grid.Row="2" FontSize="12" Background="White">Most probable results :</Label>
     28        <Label Grid.Row="2" FontSize="12" Background="White">Keys pers second :</Label>
    2929
    3030        <TextBox x:Name="keysPerSecond" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2"
Note: See TracChangeset for help on using the changeset viewer.