Авторизация steam через сайт использую php, странно ведёт себя RSA?

Пытаюсь написать скрипт для авторизации на сайте steamcommunity.com на php. На самом сайте пароль перед отправкой шифруется публичным ключом. Так вот на php у меня возникла очень странная хренотень, строка шифруется почему-то 1 раз из 10! 9 раз выдаёт false вместо шифра а также 1 warning и 1 notice, а на 10-й раз выдаёт зашифрованную строку, причём судя по всему неверную.

Сообщения при шифровании:

Warning: openssl_public_encrypt(): key parameter is not a valid public key in /Steam/phpseclib/Math/BigInteger.php on line 1703
Notice: Integer too large in /Steam/phpseclib/Crypt/RSA.php on line 2133

На 10-й раз этих сообщений не выдаёт! Выдаёт зашифрованную строку!

Код шифрования:
$rsa = new \Crypt_RSA(); 
        $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
        $public_key = [
             "modulus" => new \Math_BigInteger($result->publickey_mod, 16),
             "publicExponent" => new \Math_BigInteger($result->publickey_exp, 16),
        ];
        $rsa->loadKey($public_key, CRYPT_RSA_PUBLIC_FORMAT_RAW);
        $encrypted_password = base64_encode($rsa->encrypt($pass));


Классы BigInteger и RSA тут: phpseclib.sourceforge.net

В чём тут проблема?
  • Вопрос задан
  • 1219 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ho_B_zY
Вот рабочие 2 кода на PhP используя либу phpseclib.sourceforge.net:

include("Crypt/RSA.php");

$RSA = new Crypt_RSA();

$Modulus = "BIG HEX Строка";
$PublicExponent = "010001";
$Pass = "Пароль от Steam";

$RSA->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$RSA->loadKey(["n" => new Math_BigInteger("$Modulus", 16), "e" => new Math_BigInteger("$PublicExponent", 16)]);
$RSA->setPublicKey();
openssl_public_encrypt($Pass, $Data, $RSA->getPublicKey());
$Data = base64_encode($Data);

// ИЛИ

include("Crypt/RSA.php");

$RSA = new Crypt_RSA();

$Modulus = "BIG HEX Строка";
$PublicExponent = "010001";
$Pass = "Пароль от Steam";

$RSA->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$RSA->loadKey([
	"modulus" => new Math_BigInteger("$Modulus", 16),
	"publicExponent" => new Math_BigInteger("$PublicExponent", 16)
], CRYPT_RSA_PUBLIC_FORMAT_RAW);

$PassCrypt = base64_encode($RSA->encrypt($Pass, false));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы