Changeset 733 for trunk/CrypPlugins/SDES


Ignore:
Timestamp:
Oct 16, 2009, 3:31:46 PM (12 years ago)
Author:
kopal
Message:
  • KeySearcher now can brute force SDES
  • added KeySearcher Sample with SDES
File:
1 edited

Legend:

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

    r732 r733  
    547547        private byte[] input;
    548548        private List<CryptoolStream> listCryptoolStreams = new List<CryptoolStream>();
     549        ElectronicCodeBook ecb;
     550        CipherBlockChaining cbc;
    549551        #endregion
    550552
     
    562564        public SDESControl(SDES Plugin)
    563565        {
    564             this.plugin = Plugin;                 
     566            this.plugin = Plugin;
     567            this.ecb = new ElectronicCodeBook(plugin);
     568            this.cbc = new CipherBlockChaining(plugin);
    565569        }
    566570
     
    610614        /// Makes a byte Array out of a String
    611615        /// example
    612         /// "10101" -> '1','0','1','0','1'
     616        /// "10101" -> 1,0,1,0,1
    613617        ///
    614         /// A 0 is interpreted as '0'
    615         /// any other character as '1'
     618        /// A 0 is interpreted as 0
     619        /// any other character as 1
    616620        /// </summary>
    617621        /// <param name="key"></param>
     
    623627            foreach (char c in key)
    624628                if (c == '0')
    625                     bkey[count++] = (byte)'0';
     629                    bkey[count++] = 0;
    626630                else
    627                     bkey[count++] = (byte)'1';
     631                    bkey[count++] = 1;
    628632            return bkey;
    629633        }
     
    661665                plugin.InputChanged = false;
    662666                input = new byte[blocksize];
    663                 for (int i = 0; i < blocksize; i++)
    664                 {
    665                     if(i<plugin.InputStream.Length)
    666                         input[i] = plugin.InputStream.Read();
    667                 }
    668             }
    669 
    670             plugin.InputKey = key;
     667
     668                byte[] buffer = new byte[1];
     669               
     670                int i = 0;
     671                CryptoolStream inputstream = plugin.InputStream;
     672                while ((inputstream.Read(buffer, 0, 1)) > 0 && i < blocksize)
     673                {
     674                    input[i] = buffer[0];
     675                    i++;
     676                }
     677            }
    671678         
    672679            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    673680            if (((SDESSettings)plugin.Settings).Mode == 0)
     681            {                               
     682                output = ecb.decrypt(input, key, blocksize);
     683            }
     684            else
    674685            {               
    675                 ElectronicCodeBook ecb = new ElectronicCodeBook(plugin);
    676                 ecb.encrypt(input, output, key,blocksize);
    677             }
    678             else
    679             {
    680                 CipherBlockChaining cbc = new CipherBlockChaining(plugin);
    681                 cbc.decrypt(input, output, key, Tools.stringToBinaryByteArray(enc.GetString(plugin.InputIV)),blocksize);
     686                output = cbc.decrypt(input, key, Tools.stringToBinaryByteArray(enc.GetString(plugin.InputIV)),blocksize);
    682687            }           
    683688           
     
    14601465        /// blocksize tells the algorithm how many bytes it has to encrypt
    14611466        /// blocksize = 0 => encrypt all
    1462         public void encrypt(byte[] input, byte[] output, byte[] key, byte[] vector, [Optional, DefaultParameterValue(0)] int blocksize)
    1463         {
    1464 
    1465             int until = output.Length;
    1466 
    1467             if (input.Length < output.Length)
    1468                 until = input.Length;
     1467        public byte[] encrypt(byte[] input, byte[] key, byte[] vector, [Optional, DefaultParameterValue(0)] int blocksize)
     1468        {
     1469            int until = input.Length;           
    14691470
    14701471            if (blocksize < until && blocksize > 0)
    14711472                until = blocksize;
     1473
     1474            byte[] output = new byte[until];
    14721475
    14731476            for (int i = 0; i < until; i++)
     
    14781481
    14791482            }//end while
     1483           
     1484            return output;
    14801485
    14811486        }//end encrypt
     
    15161521        /// blocksize tells the algorithm how many bytes it has to encrypt
    15171522        /// blocksize = 0 => encrypt all
    1518         public void decrypt(byte[] input, byte[] output, byte[] key, byte[] vector, [Optional, DefaultParameterValue(0)] int blocksize)
    1519         {
    1520 
    1521             int until = output.Length;
    1522 
    1523             if (input.Length < output.Length)
    1524                 until = input.Length;
    1525 
     1523        public byte[] decrypt(byte[] input, byte[] key, byte[] vector, [Optional, DefaultParameterValue(0)] int blocksize)
     1524        {
     1525
     1526            int until = input.Length;
     1527           
    15261528            if (blocksize < until && blocksize > 0)
    15271529                until = blocksize;
     1530
     1531            byte[] output = new byte[until];
    15281532
    15291533            for (int i = 0; i < until; i++)
     
    15331537                           
    15341538            }//end while
     1539
     1540            return output;
    15351541
    15361542        }//end encrypt
     
    15911597        /// blocksize tells the algorithm how many bytes it has to encrypt
    15921598        /// blocksize = 0 => encrypt all
    1593         public void encrypt(byte[] input, byte[] output, byte[] key, [Optional, DefaultParameterValue(0)] int blocksize)
    1594         {
    1595 
    1596             int until = output.Length;
    1597 
    1598             if(input.Length < output.Length)
    1599                 until=input.Length;
     1599        public byte[] encrypt(byte[] input, byte[] key, [Optional, DefaultParameterValue(0)] int blocksize)
     1600        {
     1601
     1602            int until = input.Length;
    16001603
    16011604            if(blocksize < until && blocksize > 0)
    16021605                until = blocksize;
     1606
     1607            byte[] output = new byte[until];
    16031608
    16041609            for(int i=0;i<until;i++)
     
    16061611                //Step 2 encrypt symbol
    16071612                output[i] = Tools.byteArrayToByte(this.mAlgorithm.encrypt(Tools.byteToByteArray(input[i]), key));
    1608                
    1609                 mSdes.ProgressChanged(i, until);
    16101613
    16111614            }//end while
     1615
     1616            return output;
    16121617
    16131618        }//end encrypt
     
    16471652        /// blocksize tells the algorithm how many bytes it has to decrypt
    16481653        /// blocksize = 0 => encrypt all
    1649         public void decrypt(byte[] input, byte[] output, byte[] key, [Optional, DefaultParameterValue(0)] int blocksize)
    1650         {
    1651 
    1652             int until = output.Length;
    1653 
    1654             if (input.Length < output.Length)
    1655                 until = input.Length;
     1654        public byte[] decrypt(byte[] input, byte[] key, [Optional, DefaultParameterValue(0)] int blocksize)
     1655        {
     1656            int until = input.Length;
    16561657
    16571658            if (blocksize < until && blocksize > 0)
    16581659                until = blocksize;
     1660           
     1661            byte[] output = new byte[until];
    16591662
    16601663            for (int i = 0; i < until; i++)
     
    16631666                output[i] = Tools.byteArrayToByte(this.mAlgorithm.decrypt(Tools.byteToByteArray(input[i]), key));
    16641667
    1665                 mSdes.ProgressChanged(i, until);
    1666 
    16671668            }//end while
    16681669
     1670            return output;
     1671
    16691672        }//end encrypt
    16701673
Note: See TracChangeset for help on using the changeset viewer.