0

Trình chuyển đổi khóa JWK ⇄ PEM

Chuyển đổi khóa mật mã giữa định dạng JWK và PEM bằng Web Crypto API thực, giải mã thuật toán/đường cong/kích thước, và tính JWK thumbprint theo RFC 7638.

🔒 Được xử lý hoàn toàn trong trình duyệt của bạn — không có nội dung nào bạn nhập ở đây được tải lên.

Đang xử lý... 0%
Đang phân tích khóa
Đang chuyển đổi định dạng
Đang tính thumbprint
Xong

Kết quả

JSON Web Keys (JWK) và khóa mã hóa PEM xuất hiện thay thế cho nhau trong các thư viện JWT, công cụ TLS và cấu hình OAuth/OIDC, nhưng chuyển đổi thủ công đồng nghĩa với việc giải mã base64 các cấu trúc DER hoặc định dạng lại JSON — dễ mắc lỗi nhỏ. Công cụ này thực hiện chuyển đổi bằng Web Crypto API thực của trình duyệt thay vì thao tác văn bản: một khối PEM dán vào được nhập bằng crypto.subtle.importKey('spki'|'pkcs8', ...) và xuất lại thành JWK bằng exportKey('jwk', ...); một JWK dán vào được nhập bằng importKey('jwk', ...) và xuất lại thành SPKI hoặc PKCS8 DER, sau đó được bọc trong tiêu đề PEM đúng. Vì trình duyệt tự xác nhận và giải mã vật liệu khóa, khóa không hợp lệ hoặc chọn sai thuật toán sẽ báo lỗi rõ ràng thay vì âm thầm tạo ra kết quả rác.

Các thuật toán được hỗ trợ là RSA (RSASSA-PKCS1-v1_5), EC trên các đường cong P-256/P-384/P-521 và — khi trình duyệt triển khai — Ed25519 và X25519. Hỗ trợ trình duyệt cho Ed25519/X25519 trong Web Crypto vẫn chưa đồng nhất giữa các engine, vì vậy thay vì đoán từ chuỗi user agent, công cụ chạy một lời gọi crypto.subtle.generateKey() thực để thăm dò đường cong đã chọn và cho bạn biết rõ nếu nó không được hỗ trợ ở đây, thay vì trả về kết quả bịa đặt.

Mọi lần chuyển đổi cũng giải mã siêu dữ liệu thực của khóa: với khóa RSA, độ dài bit modulus và thuật toán băm trực tiếp từ đối tượng CryptoKey; với khóa EC và OKP, tên đường cong; và với mọi khóa, RFC 7638 JWK thumbprint — mã băm SHA-256 của các thành phần bắt buộc của JWK được sắp xếp theo thứ tự từ điển chặt chẽ (e/kty/n cho RSA, crv/kty/x/y cho EC, crv/kty/x cho OKP/Ed25519/X25519). Thumbprint này là thứ nhiều hệ thống dùng làm định danh "kid" của khóa, và việc sai thứ tự thành phần sẽ tạo ra mã băm hoàn toàn khác, đó chính là loại sai lầm mà một triển khai thủ công dễ mắc phải.

Vì mọi thứ chạy qua crypto.subtle trong chính tab trình duyệt của bạn, vật liệu khóa riêng tư không bao giờ rời khỏi thiết bị của bạn — không có máy chủ, không tải lên, và không có lời gọi API bên ngoài nào tham gia vào bất kỳ điểm nào trong quá trình chuyển đổi.