Changeset 1191


Ignore:
Timestamp:
Feb 25, 2010, 11:35:07 PM (12 years ago)
Author:
Sven Rech
Message:

faster bruteforce implementation for des

Location:
trunk
Files:
7 added
4 edited

Legend:

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

    r1162 r1191  
    1414// Reference to the CubeAttackController interface (own dll)
    1515using Cryptool.CubeAttackController;
     16using NativeCryptography;
    1617
    1718namespace Cryptool.Plugins.Cryptography.Encryption
     
    553554        public byte[] Decrypt(byte[] ciphertext, byte[] key, int bytesToUse)
    554555        {
    555             CryptoStream crypto_stream = null;
    556556            int size = bytesToUse > ciphertext.Length ? ciphertext.Length : bytesToUse;
    557557
    558             byte[] output = new byte[size];
    559            
    560             // always recreating this instance is thread-safe, but may cost us some performance
    561             SymmetricAlgorithm des_algorithm  = new DESCryptoServiceProvider();
    562 
    563             switch (((DESSettings)plugin.Settings).Mode)
    564             { //0="ECB"=default, 1="CBC", 2="CFB", 3="OFB"
    565                 case 1: des_algorithm.Mode = CipherMode.CBC; break;
    566                 case 2: des_algorithm.Mode = CipherMode.CFB; break;
    567                 case 3: des_algorithm.Mode = CipherMode.OFB; break;
    568                 default: des_algorithm.Mode = CipherMode.ECB; break;
    569             }
    570 
    571             // Padding for DES must always be set to zeroes
    572             // other padding types lead to error while decrypting
    573             // padding type of none leads to error if size does not match exactly a multiple of 8 Byte
    574             des_algorithm.Padding = PaddingMode.Zeros;
    575 
    576             // TODO: this must be passed via the interface
    577             des_algorithm.IV = new byte[des_algorithm.BlockSize / 8]; // IV of 0x00..00
    578 
    579             try
    580             {
    581                 des_algorithm.Key = key;
    582             }
    583             catch
    584             {
    585                 //dirty hack to allow weak keys:
    586                 FieldInfo field = des_algorithm.GetType().GetField("KeyValue", BindingFlags.NonPublic | BindingFlags.Instance);
    587                 //Console.WriteLine(des_algorithm.GetType());
    588                 field.SetValue(des_algorithm, key);
    589             }
    590 
    591             ICryptoTransform p_decryptor;
    592             try
    593             {
    594                 p_decryptor = des_algorithm.CreateDecryptor();
    595             }
    596             catch
    597             {
    598                 //dirty hack to allow weak keys:
    599                 MethodInfo mi = des_algorithm.GetType().GetMethod("_NewEncryptor", BindingFlags.NonPublic | BindingFlags.Instance);
    600                 object[] Par = { des_algorithm.Key, des_algorithm.Mode, des_algorithm.IV, des_algorithm.FeedbackSize, 0 };
    601                 p_decryptor = mi.Invoke(des_algorithm, Par) as ICryptoTransform;
    602             }
    603 
    604             crypto_stream = new CryptoStream(new MemoryStream(ciphertext,0,size), p_decryptor, CryptoStreamMode.Read);
    605 
    606             int read, readOverall = 0;
    607             do
    608             {
    609                 read = crypto_stream.Read(output, readOverall, output.Length - readOverall);
    610                 readOverall += read;
    611             } while (read > 0 && readOverall < output.Length);
    612 
    613             return output;
     558            return NativeCryptography.Crypto.decryptDES(ciphertext, key, size);
    614559        }
    615560
  • trunk/CrypPlugins/DES/DES.csproj

    r1040 r1191  
    1313    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    1414    <FileAlignment>512</FileAlignment>
    15     <SignAssembly>true</SignAssembly>
     15    <SignAssembly>false</SignAssembly>
    1616    <AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
    1717  </PropertyGroup>
     
    7979      <Name>CrypPluginBase</Name>
    8080    </ProjectReference>
     81    <ProjectReference Include="..\..\NativeCryptography\NativeCryptography.vcproj">
     82      <Project>{97B06ADB-43E4-4320-9AD8-D167421F0644}</Project>
     83      <Name>NativeCryptography</Name>
     84    </ProjectReference>
    8185    <ProjectReference Include="..\CubeAttackController\CubeAttackController.csproj">
    8286      <Project>{2100AC2F-3F2B-48A2-AF42-87EC52C8A703}</Project>
  • trunk/NativeCryptography/NativeCryptography.h

    r1175 r1191  
    11#pragma once
    22#include "aes_core.h"
     3#include "DES/des.h"
    34#include <stdlib.h>
    45
     
    6667                        return output;
    6768                }
     69
     70                static array<unsigned char>^ decryptDES(array<unsigned char>^ input, array<unsigned char>^ key, const int length)
     71                {
     72                        const int blockSize = 8;
     73                        int numBlocks = length / blockSize;
     74                        if (length % blockSize != 0)
     75                                numBlocks++;
     76
     77                        unsigned char* inp = (unsigned char*)malloc(numBlocks*blockSize);
     78                        unsigned char* outp = (unsigned char*)malloc(numBlocks*blockSize);
     79                        unsigned char ckey[8];
     80
     81                        arrayToCArray(input, inp, numBlocks*blockSize);                 
     82                        arrayToCArray(key, ckey, 8);                   
     83
     84                        DES_key_schedule deskey;
     85                        DES_set_key_unchecked(&ckey, &deskey);
     86                        DES_ecb_encrypt((const_DES_cblock*)inp, (const_DES_cblock*)outp, &deskey, DES_DECRYPT);
     87                        for (int c = 1; c < numBlocks; c++)
     88                        {
     89                                DES_ecb_encrypt((const_DES_cblock*)(inp+c*blockSize), (const_DES_cblock*)(outp+c*blockSize), &deskey, DES_DECRYPT);                                                     
     90                        }
     91
     92                        array<unsigned char>^ output = gcnew array<unsigned char>(length);
     93                        carrayToArray(output, outp, length);
     94                        free(inp);
     95                        free(outp);                     
     96                        return output;
     97                }
    6898        };
    6999}
  • trunk/NativeCryptography/NativeCryptography.vcproj

    r1176 r1191  
    217217                                >
    218218                        </File>
     219                        <Filter
     220                                Name="DES"
     221                                >
     222                                <File
     223                                        RelativePath=".\DES\des_enc.c"
     224                                        >
     225                                        <FileConfiguration
     226                                                Name="Debug|Win32"
     227                                                >
     228                                                <Tool
     229                                                        Name="VCCLCompilerTool"
     230                                                        CompileAsManaged="0"
     231                                                />
     232                                        </FileConfiguration>
     233                                        <FileConfiguration
     234                                                Name="Release|Win32"
     235                                                >
     236                                                <Tool
     237                                                        Name="VCCLCompilerTool"
     238                                                        CompileAsManaged="0"
     239                                                />
     240                                        </FileConfiguration>
     241                                </File>
     242                                <File
     243                                        RelativePath=".\DES\ecb_enc.c"
     244                                        >
     245                                        <FileConfiguration
     246                                                Name="Debug|Win32"
     247                                                >
     248                                                <Tool
     249                                                        Name="VCCLCompilerTool"
     250                                                        CompileAsManaged="0"
     251                                                />
     252                                        </FileConfiguration>
     253                                        <FileConfiguration
     254                                                Name="Release|Win32"
     255                                                >
     256                                                <Tool
     257                                                        Name="VCCLCompilerTool"
     258                                                        CompileAsManaged="0"
     259                                                />
     260                                        </FileConfiguration>
     261                                </File>
     262                                <File
     263                                        RelativePath=".\DES\set_key.c"
     264                                        >
     265                                        <FileConfiguration
     266                                                Name="Debug|Win32"
     267                                                >
     268                                                <Tool
     269                                                        Name="VCCLCompilerTool"
     270                                                        CompileAsManaged="0"
     271                                                />
     272                                        </FileConfiguration>
     273                                        <FileConfiguration
     274                                                Name="Release|Win32"
     275                                                >
     276                                                <Tool
     277                                                        Name="VCCLCompilerTool"
     278                                                        CompileAsManaged="0"
     279                                                />
     280                                        </FileConfiguration>
     281                                </File>
     282                        </Filter>
    219283                </Filter>
    220284                <Filter
     
    228292                        </File>
    229293                        <File
     294                                RelativePath=".\DES\des.h"
     295                                >
     296                                <FileConfiguration
     297                                        Name="Debug|Win32"
     298                                        >
     299                                        <Tool
     300                                                Name="VCCLCompilerTool"
     301                                        />
     302                                </FileConfiguration>
     303                                <FileConfiguration
     304                                        Name="Release|Win32"
     305                                        >
     306                                        <Tool
     307                                                Name="VCCLCompilerTool"
     308                                        />
     309                                </FileConfiguration>
     310                        </File>
     311                        <File
     312                                RelativePath=".\DES\des_locl.h"
     313                                >
     314                        </File>
     315                        <File
    230316                                RelativePath=".\NativeCryptography.h"
     317                                >
     318                        </File>
     319                        <File
     320                                RelativePath=".\DES\spr.h"
    231321                                >
    232322                        </File>
Note: See TracChangeset for help on using the changeset viewer.