Методы и средства защиты информации



              

Алгоритм RSA - часть 4


 

begin

 

WriteLn('К сожалению, простое число не найдено!');

 

WriteLn('Нажмите Enter для выхода.'); ReadLn;

 

Halt(1);

 

end;

 

BN_bignum_to_dec(p,s1);

 

WriteLn('Первое простое число p = ',s1);

//q

 

WriteLn('Введите большое десятичное значение, которое будет

         

использовано в качестве второго простого числа (Enter

          

-> генерируется программой): ');

Продолжение листинга 18.1

 ReadLn(s1);

 

BN_dec_to_bignum(s1,q);

 

BN_bignum_to_dec(q,s2);

 

if (s1<>s2) then

 

begin

 

if (s1<>'') then WriteLn('Число задано неверно!');

 

s1 := '0'; BN_dec_to_bignum(s1,q);

 

for i := 0 to BIGNUM_DWORD do n1[i] := MyRandom();

 

BN_a_shr_k(n1,(BIGNUM_DWORD+1)*32-maxbit,q);

 

BN_bignum_to_dec(q,s2);

 

WriteLn('Сгенерированное число: ',s2);

 

end;

 

WriteLn('Поиск первого простого числа... Ждите...');

 

q[0] := q[0] or 1;

 

s1 := '2'; BN_dec_to_bignum(s1,ntwo);

 

j := 0;

 

while (BN_PrimeTest(q)=0) and (j<8192) do

 

begin

 

BN_a_add_b(q,ntwo,n1);

 

Move(n1,q,sizeof(n1));

 

Write('.');

 

end;

 

WriteLn;

 

if (j>=8192) then

 

begin

 

WriteLn('К сожалению, простое число не найдено!');

 

WriteLn('Нажмите Enter для выхода.'); ReadLn;

 

end;

 

BN_bignum_to_dec(q,s1);

 

WriteLn('Второе простое число q = ',s1);

 

WriteLn;

//n = p*q

 

BN_a_mul_b(p,q,n);

 

BN_a_div_b(n,q,n1);

 

if (BN_a_cmp_b(p,n1)<>0) then

 

begin

 

WriteLn('К сожалению, результат умножения p*q слишком велик!');

 

WriteLn('Нажмите Enter для выхода.'); ReadLn;

 

Halt(1);

 

end;

 

BN_bignum_to_dec(n,s1);

Продолжение листинга 18.1

 WriteLn('n = p*q = ',s1);

// z =(p-1)*(q-1)

 

s1 := '1'; BN_dec_to_bignum(s1,none);

 

BN_a_sub_b(p,none,n1);

 

BN_a_sub_b(q,none,n2);

 

BN_a_mul_b(n1,n2,z);

 

BN_bignum_to_dec(z,s1);

 

WriteLn('z = (p-1)*(q-1) = ',s1);

// d

 

WriteLn('Введите большое десятичное значение, которое будет

         

использовано в качестве открытого ключа (Enter ->

         

генерируется программой): ');

 

ReadLn(s1);

 

BN_dec_to_bignum(s1,d);

 

BN_bignum_to_dec(d,s2);

 

if (s1<>s2) then



Содержание  Назад  Вперед