Cho đến bây giờ tôi đã sử dụng JSEncrypt có thể tải khóa công khai từ một chuỗi được định dạng PEM. Và sau đó sử dụng nó với RSA để mã hóa một chuỗi. Ví dụ:Làm cách nào để tải khóa công khai ở định dạng PEM để mã hóa?
<textarea id="pubkey">-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+iOltdDtDdUq6u67L2Mb4HW5j
7E1scmYtg2mnnQD85LxFICZv3I3rQ4wMulfcH+n9VCrifdu4vN89lRLKgsb9Kzim
GUrbOWEZdKZ9D5Sfo90EXocM5NtHou14aN8xkRWbN7x/RK5o9jfJwKmrC1fCm6tx
2Qwvx5kypWQUN6UpCQIDAQAB
-----END PUBLIC KEY-----
</textarea>
và sau đó:
var encrypt = new JSEncrypt();
encrypt.setPublicKey($('#pubkey').val());
Tôi muốn làm điều tương tự với WebCrypto nhưng tôi không hiểu làm thế nào để làm. Tôi đã thử các bước sau:
- Tháo tiêu đề PEM
- Tháo chân PEM
- Di CR/LF
- Trim chuỗi
- Giải mã chuỗi Base64
- Chuyển đổi kết quả đến một ArrayBuffer
Sau đó, tôi đã cố nhập khóa:
cryptoSubtle.importKey("spki", publicKey, {name: "RSA-OAEP", hash: {name: "SHA-256"}}, false, ["encrypt"]);
Tôi đã thử nhiều cách (giải nén định dạng ASN/DER, v.v.) Nhưng tôi gặp các lỗi khác nhau (dữ liệu DOMException, v.v.). Tôi không biết định dạng PEM có được chấp nhận dưới dạng định dạng được hỗ trợ hay không hoặc tôi phải chuyển đổi khóa ở định dạng Khóa Web JSON, v.v.
Có cách nào đơn giản để thực hiện mà không có thư viện JS của bên thứ ba không?
Bạn không nên giải mã Base64 Dữ liệu PEM trước? – robertklep
Nếu tôi giải mã dữ liệu và sau đó chuyển đổi nó thành một ArrayBuffer, tôi nhận được một DOMException –