0

เครื่องมือแปลงคีย์ JWK ⇄ PEM

แปลงคีย์เข้ารหัสระหว่างรูปแบบ JWK และ PEM โดยใช้ Web Crypto API จริง ถอดรหัสอัลกอริทึม/เส้นโค้ง/ขนาด และคำนวณลายนิ้วมือ JWK ตาม RFC 7638

🔒 ประมวลผลทั้งหมดในเบราว์เซอร์ของคุณ — ไม่มีการอัปโหลดสิ่งใดที่คุณป้อนที่นี่

กำลังประมวลผล... 0%
กำลังแยกวิเคราะห์คีย์
กำลังแปลงรูปแบบ
กำลังคำนวณลายนิ้วมือ
เสร็จสิ้น

ผลลัพธ์

JSON Web Keys (JWK) และคีย์ที่เข้ารหัสแบบ PEM ปรากฏใช้แทนกันได้ในไลบรารี JWT, เครื่องมือ TLS และการตั้งค่า OAuth/OIDC แต่การแปลงระหว่างสองรูปแบบด้วยตนเองหมายถึงการถอดรหัส base64 ของโครงสร้าง DER หรือการจัดรูปแบบ 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 ภายนอกใด ๆ ทั้งสิ้นในทุกขั้นตอนของการแปลง