Changeset 1176


Ignore:
Timestamp:
Feb 24, 2010, 12:08:31 AM (12 years ago)
Author:
Sven Rech
Message:

better entropy implementation

and changed nativecryptography settings

Location:
trunk
Files:
3 edited

Legend:

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

    r991 r1176  
    2727using System.IO;
    2828using System.Text.RegularExpressions;
     29using System.Threading;
    2930namespace Cryptool.Plugins.CostFunction
    3031{
     
    341342        /// <returns>Index of Coincidence</returns>
    342343        public double calculateIndexOfCoincidence(byte[] text, int bytesToUse)
    343         {
     344        {           
    344345            if (bytesToUse > text.Length)
    345346                bytesToUse = text.Length;
     
    370371        }//end calculateIndexOfCoincidence
    371372
     373
     374        private int lastUsedSize = -1;
     375        private double[] xlogx;
     376        private Mutex prepareMutex = new Mutex();
     377
     378        private void prepareEntropy(int size)
     379        {
     380            xlogx = new double[size + 1];
     381            //precomputations for fast entropy calculation     
     382            xlogx[0] = 0.0;
     383            for (int i = 1; i <= size; i++)
     384                xlogx[i] = -1.0 * i * Math.Log(i / (double)size) / Math.Log(2.0);
     385        }
     386
    372387        /// <summary>
    373388        /// Calculates the Entropy of a given byte array
     
    392407                bytesToUse = text.Length;
    393408
    394             double[] n = new double[256];
     409            if (lastUsedSize != bytesToUse)
     410            {
     411                try
     412                {
     413                    prepareMutex.WaitOne();
     414                    if (lastUsedSize != bytesToUse)
     415                    {
     416                        prepareEntropy(bytesToUse);
     417                        lastUsedSize = bytesToUse;
     418                    }
     419                }
     420                finally
     421                {
     422                    prepareMutex.ReleaseMutex();
     423                }
     424            }
     425
     426            int[] n = new int[256];
    395427            //count all ASCII symbols
    396428            int counter = 0;
     
    406438            //calculate probabilities and sum entropy
    407439            for (int i = 0; i < n.Length; i++)
    408             {
    409                 double pz = n[i] / bytesToUse; //probability of character n[i]
    410                 if (pz > 0)
    411                     entropy = entropy + pz * Math.Log(pz, 2);
    412             }
    413 
    414             return -1 * entropy; // because of log we have negative values, but we want positive
     440                entropy += xlogx[n[i]];
     441
     442            return entropy / (double)bytesToUse;
    415443
    416444        }//end calculateEntropy
    417 
    418445
    419446        /// <summary>
     
    601628            try
    602629            {
    603                 bytesToUse = int.Parse(((CostFunctionSettings)this.plugin.Settings).BytesToUse);
     630                bytesToUse = ((CostFunctionSettings)this.plugin.Settings).BytesToUseInteger;
    604631            }
    605632            catch (Exception ex)
  • trunk/CrypPlugins/CostFunction/CostFunctionSettings.cs

    r991 r1176  
    3232        private int functionType;
    3333        private String bytesToUse = "256";
     34        private int bytesToUseInteger = 256;
    3435        #endregion
    3536       
     
    5657            {
    5758                bytesToUse = value;
    58                 OnPropertyChanged("BytesToUse");
     59                bytesToUseInteger = int.Parse(value);
     60                OnPropertyChanged("BytesToUse");
    5961            }
     62        }
     63
     64        public int BytesToUseInteger
     65        {
     66            get { return bytesToUseInteger; }
    6067        }
    6168
  • trunk/NativeCryptography/NativeCryptography.vcproj

    r1174 r1176  
    4242                        <Tool
    4343                                Name="VCCLCompilerTool"
    44                                 Optimization="0"
     44                                Optimization="2"
     45                                EnableIntrinsicFunctions="true"
     46                                FavorSizeOrSpeed="1"
    4547                                PreprocessorDefinitions="WIN32;_DEBUG"
    4648                                RuntimeLibrary="3"
     
    8688                        <Tool
    8789                                Name="VCPostBuildEventTool"
    88                                 CommandLine="cd &quot;$(ProjectDir)&quot;&#x0D;&#x0A;cd ..\CrypWin\bin\$(ConfigurationName)&#x0D;&#x0A;if not exist &quot;./CrypPlugins&quot; mkdir &quot;./CrypPlugins&quot;&#x0D;&#x0A;&#x0D;&#x0A;copy &quot;$(TargetDir)NativeCryptography*.*&quot; &quot;./CrypPlugins&quot;"
     90                                CommandLine="cd &quot;$(ProjectDir)&quot;&#x0D;&#x0A;cd ..\CrypWin\bin\$(ConfigurationName)&#x0D;&#x0A;if not exist &quot;./CrypPlugins&quot; mkdir &quot;./CrypPlugins&quot;&#x0D;&#x0A;&#x0D;&#x0A;copy &quot;$(TargetDir)NativeCryptography*.*&quot; &quot;./CrypPlugins&quot;&#x0D;&#x0A;"
    8991                        />
    9092                </Configuration>
     
    115117                        <Tool
    116118                                Name="VCCLCompilerTool"
     119                                Optimization="2"
     120                                EnableIntrinsicFunctions="true"
     121                                FavorSizeOrSpeed="1"
    117122                                PreprocessorDefinitions="WIN32;NDEBUG"
    118123                                RuntimeLibrary="2"
     
    157162                        <Tool
    158163                                Name="VCPostBuildEventTool"
    159                                 CommandLine="cd &quot;$(ProjectDir)&quot;&#x0D;&#x0A;cd ..\CrypWin\bin\$(ConfigurationName)&#x0D;&#x0A;if not exist &quot;./CrypPlugins&quot; mkdir &quot;./CrypPlugins&quot;&#x0D;&#x0A;&#x0D;&#x0A;copy &quot;$(TargetDir)NativeCryptography*.*&quot; &quot;./CrypPlugins&quot;"
     164                                CommandLine="cd &quot;$(ProjectDir)&quot;&#x0D;&#x0A;cd ..\CrypWin\bin\$(ConfigurationName)&#x0D;&#x0A;if not exist &quot;./CrypPlugins&quot; mkdir &quot;./CrypPlugins&quot;&#x0D;&#x0A;&#x0D;&#x0A;copy &quot;$(TargetDir)NativeCryptography*.*&quot; &quot;./CrypPlugins&quot;&#x0D;&#x0A;"
    160165                        />
    161166                </Configuration>
Note: See TracChangeset for help on using the changeset viewer.