< pre class="snippet-code-js lang-js Prettyprint-override">
Код: Выделить всё
const modulus = session.rsa.M;
const exponent = session.rsa.E;
const rsaKey = pmlib.rs.KEYUTIL.getKey({ n: modulus, e: exponent });
const encodedPassword = pmlib.rs.KJUR.crypto.Cipher.encrypt(session.id + '**' + password, rsaKey, 'RSA');И теперь я хочу сделать это с помощью PHP. Сначала я отправляю запрос на получение сеанса, содержащего идентификатор, модуль и показатель степени, затем мне нужно зашифровать пароль и сеанс для отправки, чтобы выполнить действие входа в систему и получить файлы cookie. Любая помощь в этом?
ОТРЕДАКТИРОВАНО:
Я попробовал этот код, используя node js, и получил открытый ключ:
Код: Выделить всё
const KEYUTIL = require('jsrsasign').KEYUTIL;
const KJUR = require('jsrsasign');
const modulus = session.rsa.M; // ADA6FB0A9B123950AE71EB0A4A90426156CC7545A3F5617096E7A0C095773B413FCA9DF50C231CA4804991C76BB477D721E363E0C7B61852AAC66134D43E21F3A7433C275C62B05E1CA9C5E750FB13B5DD3E6FBC2415C0EE8D23119CA375CE35307DDF828D40FC15CBA2CA545786B7D236B4A45508775250CC5AC376B29DB129
const exponent = session.rsa.E; // 010001
const rsaKey = KEYUTIL.getKey({ n: modulus, e: exponent });
const pem = KJUR.KEYUTIL.getPEM(rsaKey);
console.log(pem);И когда я пробую этот код, используя php с точным модулем и показателем степени, я получите другой открытый ключ:
Код: Выделить всё
use phpseclib3\Crypt\PublicKeyLoader;
use phpseclib3\Math\BigInteger;
$modulus = $session['rsa']['M'];
$exponent = $session['rsa']['E'];
$rsa_key = PublicKeyLoader::load([
'e' => new BigInteger(base64_decode($exponent), 256),
'n' => new BigInteger(base64_decode($modulus), 256),
]);
echo '';
echo ($rsa_key);
echo '';
openssl_public_encrypt(data, $encoded, $rsa_key);
$encoded = bin2hex($encoded);
Пример ключа от JS:
Код: Выделить всё
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtpvsKmxI5UK5x6wpKkEJhVsx1
RaP1YXCW56DAlXc7QT/KnfUMIxykgEmRx2u0d9ch42Pgx7YYUqrGYTTUPiHzp0M8
J1xisF4cqcXnUPsTtd0+b7wkFcDujSMRnKN1zjUwfd+CjUD8FcuiylRXhrfSNrSk
VQh3UlDMWsN2sp2xKQIDAQAB
-----END PUBLIC KEY-----Пример ключа PHP:
Код: Выделить всё
-----BEGIN PUBLIC KEY-----
MIHgMA0GCSqGSIb3DQEBAQUAA4HOADCBygKBwA/RBAPQ/AfeOQOQtuQthAutwONR
QtdONd9tvBfNfeNPBOxdRRduOAdAwee9+9QOtdBNtu/dvPAfQ+txfew9xNRevfRA
de/e+A+d+d/eu+9OudRfRfAgvPOfPeOAtfQuAd+w9uhfeBNxfddQ9QdwOwOe9g+A
QNdNwudt+/dRdhNPQhNQ9BQPdAhNfQewQuwew/egNNgAg++e+NQABPee+wNRe9Ou
eguxffRfBOAweQdwhA9edfQQ+BNBetwuROghNQIFANNdNNM=
-----END PUBLIC KEY-----Подробнее здесь: https://stackoverflow.com/questions/775 ... ent-in-php
Мобильная версия