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

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

  • gvozdb

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

    Spritz 9 декабря 2012 г. 9: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

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

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

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

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

    Spritz 9 декабря 2012 г. 23: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 <[email protected]>
    *Glenn Haecker <[email protected]>
    *Segey Semenov <[email protected]>
    *Suivan <[email protected]>
    *
    *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

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

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

    phpinfo();


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

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

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

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

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

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

    Spritz 10 декабря 2012 г. 4: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 г. 5:25, спустя 35 минут 8 секунд

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

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

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

    стоит 4ая

    ахуенно
  • AlexB

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

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


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


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

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

    Spritz 10 декабря 2012 г. 12: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

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