Криптография и Делфи. Проекты, в основном - учебные

Принципы и направления

  • Основное: бесплатные консультации (Делфи, Free Pascal, алгоритмы но не математическая теория): ответы на вопросы, исходники отдельных подпрограмм. Учебники и статьи по криптографии можно скачать здесь На старом сайте: www.win-ni.narod.ru можно посмотреть : "Методы шифрования в учебном процессе" (Блочное шифрование по ГОСТ 28147-89, Алгоритм RSA - без исходников)

  • Платно: - создаю и тестирую программы в соответствии с заданием. Но самостоятельная разработка учебных программ необходима для подготовки настоящего специалиста, так что не увлекайтесь заказами. Когда делаешь сам - возникают вопросы, ответы на которые получить интересно, а читать учебник, не имея таких вопросов, т е для общего развития - скучно.

  • Будут размещены проекты для скачивания, которые можно использовать как угодно. Вы можете также заказать какую-то программу для использования в учебных целях. Применять эти разработки не в учебных целях Вы можете под Вашу ответственность, при наличии у Вас лицензии на занятие соответствующей деятельностью

Тематика, по которой имеются разработки

  1. Модуль (unLongi128_256.dcu - для Делфи7) для операций над 128-битными числами и интерфейс к нему. Можно заказать аналогичный модуль для более длинных чисел или добавить операции.
    Скачать проект - 213 К (Правый щелчок, "Сохранить объект как...")

    Интерфейс модуля:
    unit unLongi128_256;
    // ДЛя хранения цифр длинных чисел используются 32-битные поля - x[J],
    // т е числа типа cardinal (беззнаковые)
    // Числа int64 использовать неудобно, т к они знаковые и использовать
    // для хранения можно 63 бита.
    {$DEFINE HugeInt_64}
    interface
    
    const  
    {$IFDEF HugeInt_64 }  
      HugeIntSize = 64;   
    {$ELSE}{$IFDEF HugeInt_32 }  
      HugeIntSize = 32;   
    {$ELSE}{$IFDEF HugeInt_16 }  
      HugeIntSize = 16;   
    {$ELSE}   
      HugeIntSize = 8;   
    {$ENDIF}{$ENDIF}{$ENDIF}   
        
      HugeIntMSB = HugeIntSize - 1;
    
    type
      HugeInt = array[0..HugeIntMSB] of Byte;
      TStarra = array [1..4] of string;
      Inti64 = record
       L,H: cardinal;
      end;
      Numb256 = array [1..8] of cardinal;
      Numb128 = array [1..4] of cardinal;
    
      TLongi_128 = class
       X: Numb128;  // ЦИФРЫ
       Flag: boolean;  // флаг переполнения
       constructor Create;
       procedure Assig(Const BB: TLongi_128); // Копирует данные из ВВ
       procedure Assigo(Const XX: Numb128); // Копирует данные из XX
       procedure Assigo2(Const x1,x2,x3,x4: cardinal); // Копирует данные из x1..x4
       procedure Prisvoit(Const YY: TStarra);  // Копирует данные из YY
       procedure Pokaz(var YY: TStarra);  // Выводит данные в YY- массив строк
       function  pokaz2:string; // показывает все биты числа. 1 -> 1, 0 -> .
       procedure Add(Const YY: TLongi_128); //Сложение: Self:= Self + YY
       procedure AddMod(Const YY,MM: TLongi_128);//Сложение: Self:=(Self + YY) mod MM
       procedure Addo(Const y1,y2,y3,y4: cardinal);
         //Addo: Сложение: Self:=Self+ данные y1..y4
       procedure Sub(Const YY: TLongi_128); //Вычитание: Self:= Self - YY
       procedure SubMod(Const YY,MM: TLongi_128); //Вычитание: Self:=(Self-YY) mod MM
       function  Nbit: integer;  //Число двоичных цифр, т е бит (не считая ведущие нули)
       procedure shl2(const k: integer); //Self := Self << k
       procedure shr2(const k: integer); //Self := Self >> k
       procedure Moda1(Const MMM: TLongi_128);
          //Moda1: Self := Self mod MMM (Self.Nbit > 2*MMM.Nbit)
       procedure Moda2(Const MMM: TLongi_128);
          //Moda2: Self := Self mod MMM (для любых Self, MMM)
       procedure Mult3232(u,v: cardinal; var uv: inti64);//умножает uv = u*v
       procedure Mult(Const BB: TLongi_128; var z: Numb256);
          // умножает Self*BB. Результат (256 бит) в массиве Z
       procedure Sqr2(var z: Numb256); //Возводит Self в квадрат. Рез-тат: Z
       procedure Sqr2Mod(Const MM: TLongi_128; var zz: Numb128);
          //Sqr2Mod: Self^2 mod MM . Рез-тат: ZZ
       procedure MultMod(Const BB,MM: TLongi_128; var zz: Numb128);
          //MultMod: Self*BB mod MM . Рез-тат: ZZ
       procedure Power2Mod(Const PP,MM: TLongi_128; var yy: Numb128);
          //Power2Mod: Self^PP mod MM . Рез-тат: YY
       function GT(Const BB: TLongi_128): integer;
         // Сравнивает Self <=> BB: Self>BB=>1;Self=BB=>0;Self-1;
       procedure OutArr(var Arra: HugeInt);
       procedure write(FN:string);
       procedure read(FN:string);
    //   procedure read;
       end;
    
       TLongi_256 = class
        X: Numb256;
        flag: boolean;
        constructor Create;
        procedure Assigo(Const Y: Numb256);  //Self.X:= Y ;
        procedure shl2(const k: integer);    //Self:= Self SHL k ;
        procedure shr2(const k: integer);    //Self:= Self SHR k ;
        procedure Sub(Const YY: TLongi_256); //Self:= Self-YY;
        function GT(Const BB: TLongi_256): integer; // Self <=> BB (-1,0,1)
        function Nbit: integer;  // Число бит
        procedure Moda2(Const MMM: TLongi_256); // Self:= Self mod MMM
       end;
    
    procedure String2HugeInt(AString: string; var a: HugeInt);       // ++  
    procedure HugeInt2String(a: HugeInt; var S: string);              //++ 
    function HugeInt_Zero(a: HugeInt): Boolean;      //++
  2. Генерация и тестирование простых чисел методами:
    • Решето Эратосфена.
      Программа находит небольшие простые числа. Например, если у Вас есть терпенье ждать 10 мин, она найдет массив из 6 000 000 простых чисел и выведет последние: 104 395 267 и 104 395 289.
      Скачать программу с исходниками. (SimpleEratosfen.rar - 200Kb)
    • Поклингтона
    • Соловея-Штрассена
    • Рабина-Миллера (числа - до 128 бит)

      Скачать проект - 200 К (Правый щелчок, "Сохранить объект как...")



      (Простые числа можно вычислить в Online здесь )

  3. Цифровая подпись: метод RSA

  4. Блочное шифрование по ГОСТ 28147-89


Реклама от TUT.SU »