0

JWK ⇄ PEM raktų konverteris

Konvertuokite kriptografinius raktus tarp JWK ir PEM formatų naudojant tikrąją Web Crypto API, dekoduokite algoritmą/kreivę/dydį ir apskaičiuokite RFC 7638 JWK kontrolinį kodą.

🔒 Visiškai apdorojama jūsų naršyklėje – niekas, kurį čia įvedėte, niekada neįkeliama.

Apdorojama... 0%
Analizuojamas raktas
Konvertuojamas formatas
Skaičiuojamas kontrolinis kodas
Atlikta

Rezultatas

JSON Web Keys (JWK) ir PEM koduoti raktai pakaitomis naudojami JWT bibliotekose, TLS įrankiuose ir OAuth/OIDC konfigūracijose, tačiau konvertuoti tarp jų rankiniu būdu reiškia base64 dekoduoti DER struktūras arba perrašinėti JSON – čia lengva nepastebimai suklysti. Šis įrankis konversiją atlieka naudodamas naršyklės tikrąją Web Crypto API, o ne teksto manipuliacijas: įklijuotas PEM blokas importuojamas su crypto.subtle.importKey('spki'|'pkcs8', ...) ir reeksportuojamas kaip JWK su exportKey('jwk', ...); įklijuotas JWK importuojamas su importKey('jwk', ...) ir reeksportuojamas kaip SPKI arba PKCS8 DER, tada įvyniojamas į teisingą PEM antraštę. Kadangi pati naršyklė patikrina ir dekoduoja rakto medžiagą, netinkamas raktas arba neteisingai parinktas algoritmas iš karto praneša apie klaidą, užuot tyliai generavęs šiukšles.

Palaikomi algoritmai: RSA (RSASSA-PKCS1-v1_5), EC kreivėse P-256/P-384/P-521 ir – ten, kur naršyklė juos įgyvendina – Ed25519 bei X25519. Naršyklės palaikymas Ed25519/X25519 Web Crypto vis dar nevienodas tarp variklių, todėl užuot spėjus pagal user agent eilutę, įrankis vykdo realų crypto.subtle.generateKey() patikrinimą pasirinktai kreivei ir aiškiai praneša, jei ji čia nepalaikoma, o ne grąžina sufabrikuotą rezultatą.

Kiekvienos konversijos metu taip pat dekoduojami tikrieji rakto metaduomenys: RSA raktams – modulio bitų ilgis ir maišos algoritmas tiesiai iš CryptoKey objekto; EC ir OKP raktams – įvardinta kreivė; o kiekvienam raktui – RFC 7638 JWK kontrolinis kodas – SHA-256 maiša iš JWK privalomų narių, surašytų griežta leksikografine tvarka (RSA: e/kty/n; EC: crv/kty/x/y; OKP/Ed25519/X25519: crv/kty/x). Šis kontrolinis kodas yra tai, ką daugelis sistemų naudoja kaip rakto „kid“ identifikatorių, o supainiojus narių tvarką gaunama visiškai kita maiša – būtent tokia klaida, kurią lengva padaryti ranka rašytuose įgyvendinimuose.

Kadangi viskas vyksta per crypto.subtle jūsų pačių naršyklės skirtuke, privataus rakto medžiaga niekada nepalieka jūsų įrenginio – jokiame konversijos etape nenaudojamas joks serveris, įkėlimas ar išorinė API užklausa.