0

ממיר מפתחות JWK ⇄ PEM

המר מפתחות קריפטוגרפיים בין פורמט JWK ל-PEM באמצעות Web Crypto API האמיתי, פענח אלגוריתם/עקומה/גודל, וחשב את טביעת ה-JWK לפי RFC 7638.

🔒 מעובד כולו בדפדפן שלך - שום דבר שתזין כאן לא יועלה לעולם.

מעבד... 0%
מפענח מפתח
ממיר פורמט
מחשב טביעת אצבע
סיום

תוצאה

מפתחות JSON Web (JWK) ומפתחות מקודדי PEM מופיעים לסירוגין בספריות JWT, בכלי TLS ובתצורות OAuth/OIDC, אבל המרה ידנית ביניהם משמעה פענוח base64 של מבני DER או עיצוב מחדש של JSON — קל לטעות בכך באופן עדין. כלי זה מבצע את ההמרה עם Web Crypto API האמיתי של הדפדפן במקום מניפולציית טקסט: בלוק PEM מודבק מיובא עם crypto.subtle.importKey('spki'|'pkcs8', ...) ומיוצא מחדש כ-JWK עם exportKey('jwk', ...); JWK מודבק מיובא עם importKey('jwk', ...) ומיוצא מחדש כ-DER של SPKI או PKCS8, ואז נעטף בכותרת PEM הנכונה. מכיוון שהדפדפן עצמו מאמת ומפענח את חומר המפתח, מפתח פגום או בחירת אלגוריתם לא תואמת נכשלים בקול רם במקום לייצר זבל בשקט.

האלגוריתמים הנתמכים הם RSA (RSASSA-PKCS1-v1_5), EC בעקומות P-256/P-384/P-521, ו—היכן שהדפדפן מיישם אותם—Ed25519 ו-X25519. תמיכת הדפדפן ב-Ed25519/X25519 ב-Web Crypto עדיין אינה אחידה בין מנועים, כך שבמקום לנחש ממחרוזת סוכן המשתמש, הכלי מריץ בדיקת 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 חיצונית מעורבת בשום שלב של ההמרה.