Changeset 865 for trunk/CrypPlugins/DES


Ignore:
Timestamp:
Nov 17, 2009, 9:31:19 PM (12 years ago)
Author:
Sven Rech
Message:

some big optimizations to the keypattern mechanism of the keysearcher.
The keysearcher itself should have zero performace overhead now.
But bruteforcing AES and DES is still very slow.
By profiling, we found out that the Microsoft Crypto implementations are to blame, because they aren't optimized for speed.
So the next step would be to replace those implementations....

File:
1 edited

Legend:

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

    r819 r865  
    579579        }
    580580
    581         public byte[] getKeyFromString(string key)
     581        public byte[] getKeyFromString(string key, ref int[] arrayPointers, ref int[] arraySuccessors, ref int[] arrayUppers)
    582582        {
    583583            byte[] bkey = new byte[8];
     584            int counter = 0;
     585            bool allocated = false;
     586
    584587            for (int i = 0; i <= 7; i++)
    585588            {
    586                 bkey[i] = Convert.ToByte(key.Substring(i * 3, 2), 16);               
     589                string substr = key.Substring(i * 3, 2);
     590
     591                if (!allocated && (substr[0] == '*' || substr[1] == '*'))
     592                {
     593                    arrayPointers = new int[8];
     594                    for (int j = 0; j < 8; j++)
     595                        arrayPointers[j] = -1;
     596                    arraySuccessors = new int[8];
     597                    arrayUppers = new int[8];
     598                    allocated = true;
     599                }
     600
     601                if (substr[0] != '*' && substr[1] != '*')
     602                    bkey[i] = Convert.ToByte(substr, 16);
     603                else if (substr[0] == '*' && substr[1] == '*')
     604                {
     605                    bkey[i] = 0;
     606                    arrayPointers[counter] = i;
     607                    arraySuccessors[counter] = 1;
     608                    arrayUppers[counter] = 255;
     609                    counter++;
     610                }
     611                else if (substr[0] != '*' && substr[1] == '*')
     612                {
     613                    bkey[i] = Convert.ToByte(substr[0] + "0", 16);
     614                    arrayPointers[counter] = i;
     615                    arraySuccessors[counter] = 1;
     616                    arrayUppers[counter] = Convert.ToByte(substr[0] + "F", 16);
     617                    counter++;
     618                }
     619                else if (substr[0] == '*' && substr[1] != '*')
     620                {
     621                    bkey[i] = Convert.ToByte("0" + substr[1], 16);
     622                    arrayPointers[counter] = i;
     623                    arraySuccessors[counter] = 16;
     624                    arrayUppers[counter] = Convert.ToByte("F" + substr[1], 16);
     625                    counter++;
     626                }
    587627            }
    588628            return bkey;
Note: See TracChangeset for help on using the changeset viewer.