Преобразование ключа JWK в PEM с использованием встроенного PHPPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Преобразование ключа JWK в PEM с использованием встроенного PHP

Сообщение Anonymous »

Как преобразовать ключ JWK в ключ pem в PHP без использования сторонних библиотек?
Пример JWK
{
"kty": "RSA",
"kid": "FftONTxoEg",
"use": "sig",
"alg": "RS256",
"n": "wio-SFzFvKKQ9vl5ctaYSi09o8k3Uh7r6Ht2eJv-hSaZ6A6xTXVIBVSm0KvPxaJlpjYPTCcl2sdEyXlD2Uh1khUKU7r9ON3rpN8pFHAere5ig_JGVEShxmt5E_jzMymYnSfkoSW44ulevQeUwP_MiC5VC1KJjTfD73ghX0tQ0-_RjTJJ2cLyFC4VFNboBMCVioUrz8IA3c0KIOl507qswQvMsh2vBTMDDSJfippAGLzUiWXxUlid-vyOC8GCtag61taSorxCw14irk-tsh7hWjDDkSTFn2gChPMfXXj10_lCv0UG29TVUVCAsay4pszzgmc4zwhgSsqQRd939BJexw",
"e": "AQAB"
}

Ожидаемый результат
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwio+SFzFvKKQ9vl5ctaY
Si09o8k3Uh7r6Ht2eJv+hSaZ6A6xTXVIBVSm0KvPxaJlpjYPTCcl2sdEyXlD2Uh1
khUKU7r9ON3rpN8pFHAere5ig/JGVEShxmt5E/jzMymYnSfkoSW44ulevQeUwP/M
iC5VC1KJjTfD73ghX0tQ0+/RjTJJ2cLyFC4VFNboBMCVioUrz8IA3c0KIOl507qs
wQvMsh2vBTMDDSJfippAGLzUiWXxUlid+vyOC8GCtag61taSorxCw14irk+tsh7h
WjDDkSTFn2gChPMfXXj10/lCv0UG29TVUVCAsay4pszzgmc4zwhgSsqQRd939BJe
xwIDAQAB
-----END PUBLIC KEY-----

Я пытаюсь конвертировать с помощью этого кода, и ключ почти аналогичен требуемому результату, но все же отличается от подписи, необходимой для проверки. Может ли кто-нибудь помочь мне с этим?
private function jwkToPem($jwk) {
$modulus = $this->base64UrlDecode($jwk['n']);
$exponent = $this->base64UrlDecode($jwk['e']);

if (ord($modulus[0]) > 0x7f) {
$modulus = "\x00" . $modulus;
}

$modulus = "\x02" . $this->asn1Length(strlen($modulus)) . $modulus;
$exponent = "\x02" . $this->asn1Length(strlen($exponent)) . $exponent;

$rsaPublicKey = "\x30" . $this->asn1Length(strlen($modulus . $exponent)) . $modulus . $exponent;

$rsaOID = "\x30\x0D\x06\x09\x2A\x86\x48\x86\xF7\x0D\x01\x01\x01\x05\x00";

$publicKeyBitString = "\x03" . $this->asn1Length(strlen($rsaPublicKey) + 1) . "\x00" . $rsaPublicKey;

$fullKey = "\x30" . $this->asn1Length(strlen($rsaOID . $publicKeyBitString)) . $rsaOID . $publicKeyBitString;

return "-----BEGIN PUBLIC KEY-----\n" . chunk_split(base64_encode($fullKey), 64) . "-----END PUBLIC KEY-----\n";
}
private function asn1Length($length) {
if ($length

Подробнее здесь: https://stackoverflow.com/questions/790 ... native-php
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»