Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Возведение в степень по модулю

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
iflight
Отправлено: 30 Апреля, 2011 - 11:02:58
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


Помог: 2 раз(а)




По учебе надо реализовать RSA(http://ru.wikipedia.org/wiki/RSA) в примитивном виде, т.е. ключи можно брать достаточно маленькие.
Сами ключи вроде как сгенерировал, хоть и понимаю что далеко не лучшим способом.

PHP:
скопировать код в буфер обмена
  1. function is_easy($numb) {                       //функция проверки на чистоту
  2.  if(($numb % $i) == 0) { return false; break;}
  3.  }
  4.  return true;
  5. }
  6.  
  7. function get_nod($a,$b) { //нахождение НОД по алгоритму Евклида
  8. $ar=$a;
  9. $br=$b;
  10.         do{
  11.                 if($ar<$br){
  12.                 $br=$br%$ar;
  13.                 }else{
  14.                 $ar=$ar%$br;
  15.                 }
  16.         } while($ar!==0 && $br!==0);
  17. return max($ar,$br);   
  18. }
  19.  
  20.  
  21.  
  22. do {            // Генерим простое число p
  23. $p=mt_rand(100,500);
  24. } while(is_easy($p)<> true);
  25.  
  26. do {                // Генерим простое число q
  27. $q=mt_rand(100,500);
  28. } while(is_easy($q)<> true);
  29.  
  30. $n = $p*$q;  //считаем n
  31.  
  32. $eyler = ($p-1)*($q-1); // считаем функцию Эйлера
  33.  
  34. do {                // Генерим e
  35.         $e=mt_rand(3,50);
  36. } while(get_nod($e,$eyler)!==1);
  37.  
  38. do {                // Генерим d
  39.         $d=mt_rand();
  40. } while((($e*$d)%$eyler)!==1);


Ключи выходят например такие: q=439 n=184819 Эйлейр=183960 e=23 d=2121052239

Проблемма возникла на самом кодировании, т.е. возведении в степень по модулю. Использовал такую функцию:

PHP:
скопировать код в буфер обмена
  1. function powmod($a, $b, $c)
  2. {
  3.     $z = 1;
  4.  
  5.     while ($b)
  6.     {
  7.         if ($b % 2 == 0)
  8.         {
  9.              $b = $b/2;
  10.              $a = ($a * $a) % $c;
  11.         }
  12.         else
  13.         {
  14.              $b--;
  15.              $z = ($z * $a) % $c;
  16.          }
  17.      }
  18.      return $z;
  19. }

С мелкими числами считает нормально (например ключи (3,33) и (7,33)), но с сгенерированными мною нет, подставлял пример из вики, так же считает не правильно.

В таком программировании не шарю) Весь опыт работы с php сводится к web) Подскажите, может где ошибка, направьте на путь истинный)

(Отредактировано автором: 30 Апреля, 2011 - 11:04:10)

 
 Top
Haron
Отправлено: 30 Апреля, 2011 - 12:12:09
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




http://www.php.su/learnphp/operators/?arith
Цитата:
Операция вычисления остатка от деления "%" работает только с целыми числами, так что применение ее к дробным может привести к нежелательному результату.


Оно?


-----
И чё?
 
 Top
iflight
Отправлено: 30 Апреля, 2011 - 20:14:05
Post Id



Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011  
Откуда: Россия, Сыктывкар


Помог: 2 раз(а)




Хм, а где там дробные могут получиться? Везде все целое вроде как.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB