Ignore:
Timestamp:
Oct 9, 2009, 6:10:42 PM (12 years ago)
Author:
kopal
Message:

interface IControlCost added
brute force sdes with keysearcher implemented

File:
1 edited

Legend:

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

    r682 r702  
    88using Cryptool.PluginBase.Control;
    99using System.Collections;
     10using System.Collections.Generic;
    1011
    1112namespace KeySearcher
     
    230231
    231232        public void Execute()
    232         {
    233             if (ControlMaster != null)
    234             {
     233        {           
     234            if (ControlMaster != null && costMaster != null)
     235            {
     236                int maxInList = 10;
     237               
     238                LinkedList<ValueKey> costList = new LinkedList<ValueKey>();
     239               
    235240                stop = false;
    236241                if (!Pattern.testKey(settings.Key))
     
    246251                    GuiLogMessage("Try key " + key, NotificationLevel.Debug);
    247252                    byte[] decryption = ControlMaster.Decrypt(ControlMaster.getKeyFromString(key));
    248                     //TODO: Check cost function here
     253                   
     254                    ValueKey valueKey = new ValueKey();
     255                    valueKey.value = CostMaster.calculateCost(decryption);;
     256                    valueKey.key = key;
     257
     258                    if(this.costMaster.getRelationOperator() == RelationOperator.LargerThen){
     259
     260                        LinkedListNode<ValueKey> node = costList.First;
     261
     262                        while (node != null)
     263                        {
     264
     265                            if (valueKey.value > node.Value.value)
     266                            {
     267                                costList.AddBefore(node, valueKey);
     268                                break;
     269                            }
     270                            node = node.Next;
     271                        }     
     272                    }else{
     273                        LinkedListNode<ValueKey> node = costList.First;
     274
     275                        while (node != null)
     276                        {
     277
     278                            if (valueKey.value < node.Value.value)
     279                            {
     280                                costList.AddBefore(node, valueKey);
     281                                break;
     282                            }
     283                            node = node.Next;
     284                        }                       
     285                    }
     286                    if (costList.Count > maxInList)
     287                    {
     288                        costList.RemoveLast();
     289                    }
    249290                } while (Pattern.nextKey() && !stop);
    250             }
     291
     292                GuiLogMessage("Calculated value/key - list:", NotificationLevel.Info);
     293                LinkedListNode<ValueKey> n = costList.First;
     294                while (n != null)
     295                {
     296                    GuiLogMessage(n.Value.value + " = " + n.Value.key, NotificationLevel.Info);
     297                    n = n.Next;
     298                }
     299               
     300            }//end if
    251301        }
    252302
     
    316366        }
    317367
     368        #endregion
     369
     370        #region IControlCost Members
     371
     372        private IControlCost costMaster;
     373        [PropertyInfo(Direction.ControlMaster, "Cost Master", "Used for cost calculation", "", DisplayLevel.Beginner)]
     374        public IControlCost CostMaster
     375        {
     376            get { return costMaster; }
     377            set
     378            {
     379                costMaster = value;
     380            }
     381        }
     382
     383        #endregion
     384
    318385        public void GuiLogMessage(string message, NotificationLevel loglevel)
    319386        {
     
    322389        }
    323390
    324         #endregion
     391        private struct ValueKey
     392        {
     393            public double value;
     394            public String key;
     395        };
    325396    }
    326397}
Note: See TracChangeset for help on using the changeset viewer.