ФорумПрограммированиеPHP для идиотов → Не работает класс RSA шифровани

Не работает класс RSA шифровани

  • gvozdb

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 9 декабря 2012 г. 18:36

    Выда
    Спустя 36 сек.
    Выдаёт пустую страницу, вот код:
    <?


    require_once('rsa.php');
    print "fff";
    $RSA = new RSA();

    $keys = $RSA->generate_keys('9990454949', '9990450271', 1);

    //print_r($keys);
    print "fff";

    $message="ываыв";
    $encoded = $RSA->encrypt ($message, $keys[1], $keys[0], 5);
    $decoded = $RSA->decrypt ($encoded, $keys[2], $keys[0]);

    print $encoded;

    ?>
    Спустя 62 сек.
    Хотя должен выдать хотя-бы "fff"… видимо проблема с классом rsa… скачал его отсюда - http://ddev.ru/wp-content/uploads/2009/06/rsa-2007-09-18.zip
    Может кто сталкивался с такой траблой?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 9 декабря 2012 г. 21:36, спустя 3 часа 7 секунд

    Вывод ошибок включи …
  • gvozdb

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 10 декабря 2012 г. 8:52, спустя 11 часов 16 минут 43 секунды

    error_reporting (E_ALL);

    Это? Выдаёт пустую страницу…

    Странно то, что если написать так
    print "fff";
    require_once('rsa.php');

    , то "fff" показывает… а наоборот - выдаёт пустую страницу…

    Вот код класса rsa.php:
    <?
    /* ц
    * Rivest/Shamir/Adelman (RSA) compatible functions
    * to generate keys and encode/decode 
    *
    *With a great thanks to:
    *Ilya Rudev <www@polar-lights.com>
    *Glenn Haecker <ghaecker@idworld.net>
    *Segey Semenov <sergei2002@mail.ru>
    *Suivan <ssuuii@gmx.net>
    *
    *Prime-Numbers.org provide small prime numbers list. 
    *You can browse all small prime numbers(small than 10,000,000,000) there. 
    *There's totally 455042511 prime numbers.
    *http://www.prime-numbers.org/
    */
    
    class RSA{
        /*
        * Function for generating keys. Return array where
        * $array[0] -> modulo N
        * $array[1] -> public key E
        * $array[2] -> private key D
        * Public key pair is N and E
        * Private key pair is N and D
        */
        public function generate_keys ($p, $q, $show_debug=0){
          	$n = bcmul($p, $q);
          
          	//m (we need it to calculate D and E) 
          	$m = bcmul(bcsub($p, 1), bcsub($q, 1));
          
          	// Public key  E 
          	$e = $this->findE($m);
          
          	// Private key D
          	$d = $this->extend($e,$m);
          
          	$keys = array ($n, $e, $d);
    
          	if ($show_debug) {
            		echo "P = $p<br>Q = $q<br><b>N = $n</b> - modulo<br>M = $m<br><b>E = $e</b> - public key<br><b>D = $d</b> - private key<p>";
          	}
          
          	return $keys;
        }
    
        /* 
        * Standard method of calculating D
        * D = E-1 (mod N)
        * It's presumed D will be found in less then 16 iterations 
        */
        private function extend ($Ee,$Em) {
          	$u1 = '1';
          	$u2 = '0';
          	$u3 = $Em;
          	$v1 = '0';
          	$v2 = '1';
          	$v3 = $Ee;
    
          	while (bccomp($v3, 0) != 0) {
            		$qq = bcdiv($u3, $v3, 0);
            		$t1 = bcsub($u1, bcmul($qq, $v1));
            		$t2 = bcsub($u2, bcmul($qq, $v2));
            		$t3 = bcsub($u3, bcmul($qq, $v3));
            		$u1 = $v1;
            		$u2 = $v2;
            		$u3 = $v3;
            		$v1 = $t1;
            		$v2 = $t2;
            		$v3 = $t3;
            		$z  = '1';
          	}
    
          	$uu = $u1;
          	$vv = $u2;
    
          	if (bccomp($vv, 0) == -1) {
            		$inverse = bcadd($vv, $Em);
          	} else {
            		$inverse = $vv;
          	}
    
          	return $inverse;
        }
    
        /* 
        * This function return Greatest Common Divisor for $e and $m numbers 
        */
        private function GCD($e,$m) {
          	$y = $e;
          	$x = $m;
    
          	while (bccomp($y, 0) != 0) {
            		// modulus function
                $w = bcsub($x, bcmul($y, bcdiv($x, $y, 0)));;
            		$x = $y;
            		$y = $w;
          	}
    
          	return $x;
        }
    
        /*
        * Calculating E under conditions:
        * GCD(N,E) = 1 and 1<E<N
        */
        private function findE($m){
            $e = '3';
            if(bccomp($this->GCD($e, $m), '1') != 0){
                $e = '5';
                $step = '2';
    
                while(bccomp($this->GCD($e, $m), '1') != 0){
                    $e = bcadd($e, $step);
    
                    if($step == '2'){
                        $step = '4';
                    }else{
                        $step = '2';
                    }
                }
            }
    
            return $e;
        }
    
        /*
        * ENCRYPT function returns
        * X = M^E (mod N)
        */
        public function encrypt ($m, $e, $n, $s=3) {
            $coded   = '';
            $max     = strlen($m);
            $packets = ceil($max/$s);
            
            for($i=0; $i<$packets; $i++){
                $packet = substr($m, $i*$s, $s);
                $code   = '0';
    
                for($j=0; $j<$s; $j++){
                    $code = bcadd($code, bcmul(ord($packet[$j]), bcpow('256',$j)));
                }
    
                $code   = bcpowmod($code, $e, $n);
                $coded .= $code.' ';
            }
    
          	return trim($coded);
        }
    
        /*
        ENCRYPT function returns
        M = X^D (mod N)
        */
        public function decrypt ($c, $d, $n) {
            $coded   = split(' ', $c);
            $message = '';
            $max     = count($coded);
    
            for($i=0; $i<$max; $i++){
                $code = bcpowmod($coded[$i], $d, $n);
    
                while(bccomp($code, '0') != 0){
                    $ascii    = bcmod($code, '256');
                    $code     = bcdiv($code, '256', 0);
                    $message .= chr($ascii);
                }
            }
    
            return $message;
        }
        
        // Digital Signature
        public function sign($message, $d, $n){
            $messageDigest = md5($message);
            $signature = $this->encrypt($messageDigest, $d, $n, 3);
            return $signature;
        }
        
        public function prove($message, $signature, $e, $n){
            $messageDigest = $this->decrypt($signature, $e, $n);
            if($messageDigest == md5($message)){
                return true;
            }else{
                return false;
            }
        }
    
        public function signFile($file, $d, $n){
            $messageDigest = md5_file($file);
            $signature = $this->encrypt($messageDigest, $d, $n, 3);
            return $signature;
        }
        
        public function proveFile($file, $signature, $e, $n){
            $messageDigest = $this->decrypt($signature, $e, $n);
            if($messageDigest == md5_file($file)){
                return true;
            }else{
                return false;
            }
        }
    }
    ?>
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 10 декабря 2012 г. 11:47, спустя 2 часа 54 минуты 29 секунд

    phpinfo();


    Посмотри включен ли display_errors, если нет - включи для начала.
    И не надо сюда дохуя кода валить, его все равно никто не смотрит.. )))))
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 10 декабря 2012 г. 12:09, спустя 22 минуты 9 секунд

    Для начала следуй стандартам: коротким тегам <? скажи нет! завершающий ?> в конце файла просто не нужен и может породить ошибки.

    Помоему очевидно, что наябывается именно в подключаемом rsa.php, ну или он не может его подключить и не может тебе об этом сказать )))
    error_reporting(-1);
    ini_set('display_errors', 'on');
    Спустя 151 сек.
    кстати, в архиве, который по твоей ссылке, нет файла с именем rsa.php — может дело в этом?
    ιιlllιlllι унц-унц
  • gvozdb

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 10 декабря 2012 г. 13:50, спустя 1 час 41 минуту 13 секунд

    кстати, в архиве, который по твоей ссылке, нет файла с именем rsa.php — может дело в этом?

    Не, переименовать rsa.class.php в rsa.php и в инклуде удалить ".class" не составляет особого труда ;) По поводу коротких тегов… не вижу разницы, что действительно может возникнуть ошибка при использовании онных?

    В общем вот что выдаёт "Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/gvozdb/data/www/***.ru/rsa/1/rsa.php on line 27" скорее всего трабла в версии PHP на сервере, попросил хостера обновить до 5ой (стоит 4ая).
  • gvozdb

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 10 декабря 2012 г. 14:25, спустя 35 минут 8 секунд

    На другом хосте работает… проблема прояснилась, видимо действительно всё упиралось в версию пыхи.
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 10 декабря 2012 г. 14:27, спустя 1 минуту 40 секунд

    стоит 4ая

    ахуенно
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 10 декабря 2012 г. 14:43, спустя 15 минут 38 секунд


    По поводу коротких тегов… не вижу разницы, что действительно может возникнуть ошибка при использовании онных?
    Может, в новых версиях по умолчанию они не поддерживаются.


    стоит 4ая
    Ну слава Богу, что не вторая … )))
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 10 декабря 2012 г. 21:01, спустя 6 часов 18 минут 38 секунд

    Используй openssl, Люк, у них вроде как есть печеньки
    Спустя 116 сек.
    Блеать О_о
    public function encrypt ($m, $e, $n, $s=3) {
            $coded   = '';
            $max     = strlen($m);
            $packets = ceil($max/$s);
            
            for($i=0; $i<$packets; $i++){
                $packet = substr($m, $i*$s, $s);
                $code   = '0'; 
     
                for($j=0; $j<$s; $j++){
                    $code = bcadd($code, bcmul(ord($packet[$j]), bcpow('256',$j)));
                } 
     
                $code   = bcpowmod($code, $e, $n);
                $coded .= $code.' ';
            } 
     
            return trim($coded);
        } 
    Оно шифрует со скорость 1кб в секунду наверно
    Work, buy, consume, die

Пожалуйста, авторизуйтесь, чтобы написать комментарий!