Конвертер ключів JWK ⇄ PEM
Перетворюйте криптографічні ключі між форматами JWK та PEM за допомогою справжнього Web Crypto API, розкодовуйте алгоритм/криву/розмір та обчислюйте відбиток JWK відповідно до RFC 7638.
🔒 Обробляється повністю у вашому браузері — те, що ви тут вводите, ніколи не вивантажується.
Результат
Ключі JSON Web Keys (JWK) та ключі у форматі PEM зустрічаються в JWT-бібліотеках, інструментах TLS та конфігурації OAuth/OIDC поперемінно, але перетворення між ними вручну означає декодування DER-структур з base64 або переформатування JSON — легко припуститися непомітної помилки. Цей інструмент виконує перетворення за допомогою справжнього Web Crypto API браузера замість маніпуляцій з текстом: вставлений блок PEM імпортується через crypto.subtle.importKey('spki'|'pkcs8', ...) і повторно експортується як JWK через exportKey('jwk', ...); вставлений JWK імпортується через importKey('jwk', ...) і повторно експортується як SPKI або PKCS8 DER, а потім обгортається у правильний заголовок PEM. Оскільки браузер сам перевіряє та декодує ключовий матеріал, неправильний ключ або невідповідний вибір алгоритму спричиняє чітку помилку, замість того, щоб мовчки видавати сміття.
Підтримувані алгоритми: RSA (RSASSA-PKCS1-v1_5), EC на кривих P-256/P-384/P-521 та — якщо браузер їх реалізує — Ed25519 та X25519. Підтримка Ed25519/X25519 у Web Crypto все ще неоднакова в різних рушіях, тому замість вгадування за рядком user agent, інструмент запускає справжню перевірку crypto.subtle.generateKey() для вибраної кривої і прямо повідомляє, якщо вона тут не підтримується, а не повертає сфабрикований результат.
Кожне перетворення також декодує справжні метадані ключа: для ключів RSA — бітову довжину модуля та геш-алгоритм безпосередньо з об'єкта CryptoKey; для ключів EC та OKP — названу криву; а для кожного ключа — відбиток JWK RFC 7638 — SHA-256 геш від обов'язкових елементів JWK, серіалізованих у строгому лексикографічному порядку (e/kty/n для RSA, crv/kty/x/y для EC, crv/kty/x для OKP/Ed25519/X25519). Цей відбиток багато систем використовують як ідентифікатор "kid" ключа, і якщо порядок елементів неправильний, генерується зовсім інший геш, що є типовою помилкою саморобної реалізації.
Оскільки все виконується через crypto.subtle у вашій власній вкладці браузера, приватний ключовий матеріал ніколи не залишає ваш пристрій — немає сервера, немає завантаження, і жодного зовнішнього виклику API на жодному етапі перетворення.