RSA и регер live.com

Тема в разделе "PHP", создана пользователем KillDead, 25 апр 2015.

Статус темы:
Закрыта.
Модераторы: latteo
  1. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    Делаю регер данного почтовика. В принципе всё просто, но вот с паролем всю голову сломал. Может кто делал и может помочь?
    Там почти всё просто, но вот с паролем возникла проблема, он передаётся путём RSA шифрования по такой схеме
    1. Запрашивается Перейти по ссылке и получают ключи
    Код:
    Key="e=10001;m=a60f1b66ef4023496137ee371eb24b307642d7351335bc9055c1cd1b6d67ad1b38119579f61276ea82e35e370208567a9667e6cec28df2a3af1a0f64f51405551fe8cd4f92fe103547dd1f75ec64650c4274c9391d394a747b9d0bdc4774ce02ef81c7492ab011734f1adb5f39155ad7d80cb80243024f356be1812f23a043bd"
    ; var randomNum="d469f5a5826ed76edd153f951fee747783e4a9c2d78529c05fc9ae492668117dd7bd7ee3816fa9a3dac1b615fb13fbbd6ed4af11b009171fd18d704782bb933eb8f78e86382a8bebde69ab7b015b6d7b3e557a9cb21b4009094b89df09470932a4dc4436"
    ; 
    
    Key - это публичный ключ, как я вонял это 10001- экспонента, остальное модуль.
    randomNum- непоятная хрень
    2. Всё это кодируется. Отфармотированный js тут Перейти по ссылке
    Код:
    вызывается метод Encrypt("", "", 'newpwd', 'введённый пароль')
    
    Сделал примерно следующее

    Код:
    // http://phpseclib.sourceforge.net/rsa/intro.html
    $int_m = new Math_BigInteger($m, 16);
    $int_e = new Math_BigInteger($e, 16);
    
    
      $xml = "<RSAKeyValue><Modulus>" .
                  $int_m->toString() .
                    "</Modulus><Exponent>".$int_e->toString()."</Exponent></RSAKeyValue>";
                   
            $rsa->loadKey($xml);
     
           $text = $rsa->encrypt('qwerty123');
          
    
    Ругается. Пробовал по разному- результат, ошибка 500. Скорее всего ключ не тот, подставлял данные из js - всё было норм.
    В принципе, в js версии вызывается applyPKCSv2Padding, которому передаётся randomNum, куда в пхп его пихать- так и не понял.
    Кто нибудь шарит в live или шифровании? :)
     
    latteo нравится это.
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    205
    Симпатии:
    262
    Судя по содержимому RSA.php в xml ожидаются сырые данные в base64. В js скрипте пароль предварительно обрабатывает функция PackageNewPwdOnly, которая добавляет в начало пару байт с единицей и пару байт нолей в конце. Переменная randomNum в php не нужна.
    Результат шифрования обрабатывается byteArrayToBase64, которая кроме кодирования в base64 еще и строку разворачивает в обратном порядке. В итоге на php это должно выглядеть примерно так
    PHP:
    $moduls "A60F1B66EF4023496137EE371EB24B307642D7351335BC9055C1CD1B6D67AD1B38119579F61276EA82E35E370208567A9667E6CEC28DF2A3AF1A0F64F51405551FE8CD4F92FE103547DD1F75EC64650C4274C9391D394A747B9D0BDC4774CE02EF81C7492AB011734F1ADB5F39155AD7D80CB80243024F356BE1812F23A043BD";

    $xml "<RSAKeyValue>".
        
    "<Modulus>".base64_encode(pack('H*',$moduls))."</Modulus>".
        
    "<Exponent>".base64_encode(pack('H*','010001'))."</Exponent>".
        
    "</RSAKeyValue>";

    $pass 'qwerty';
    $pass "\1\1".pack('C'strlen($pass)).$pass."\0\0";

    $rsa = new Crypt_RSA();
    $rsa->loadKey($xml);
    $text base64_encode(strrev($rsa->encrypt($pass)));
     
    Последнее редактирование: 27 апр 2015
    KillDead нравится это.
Статус темы:
Закрыта.