Принципы и направления
- Основное: бесплатные консультации (Делфи, Free Pascal, алгоритмы но не математическая теория): ответы на вопросы, исходники отдельных подпрограмм. Учебники и статьи по криптографии можно скачать здесь На старом сайте: www.win-ni.narod.ru
можно посмотреть : "Методы шифрования в учебном процессе" (Блочное шифрование по ГОСТ 28147-89, Алгоритм RSA - без исходников)
- Платно: - создаю и тестирую программы в соответствии с заданием. Но самостоятельная разработка учебных программ необходима для подготовки настоящего специалиста, так что не увлекайтесь заказами. Когда делаешь сам - возникают вопросы, ответы на которые получить интересно, а читать учебник, не имея таких вопросов, т е для общего развития - скучно.
- Будут размещены проекты для скачивания, которые можно использовать как угодно. Вы можете также заказать какую-то программу для использования в учебных целях. Применять эти разработки не в учебных целях Вы можете под Вашу ответственность, при наличии у Вас лицензии на занятие соответствующей деятельностью
Тематика, по которой имеются разработки
- Модуль (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; //++
- Генерация и тестирование простых чисел методами:
- Решето Эратосфена.
Программа находит небольшие простые числа. Например, если у Вас есть терпенье ждать 10 мин, она найдет массив из 6 000 000 простых чисел и выведет последние:
104 395 267 и 104 395 289.
Скачать программу с исходниками. (SimpleEratosfen.rar - 200Kb)
- Поклингтона
- Соловея-Штрассена
- Рабина-Миллера (числа - до 128 бит)
Скачать проект - 200 К (Правый щелчок, "Сохранить объект как...")

(Простые числа можно вычислить в Online
здесь )
- Цифровая подпись: метод RSA
- Блочное шифрование по ГОСТ 28147-89
|