RSA и регер live.com

Статус
В этой теме нельзя размещать новые ответы.

KillDead

Хранитель порядка
Регистрация
11 Авг 2006
Сообщения
894
Реакции
579
Делаю регер данного почтовика. В принципе всё просто, но вот с паролем всю голову сломал. Может кто делал и может помочь?
Там почти всё просто, но вот с паролем возникла проблема, он передаётся путём 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 или шифровании? :)
 
Судя по содержимому 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)));
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху