これまでは、PEM 形式の文字列から公開鍵をロードできる JSEncrypt を使用していました。次に、文字列を暗号化するために RSA で使用します。例えば :
<textarea id="pubkey">-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+iOltdDtDdUq6u67L2Mb4HW5j
7E1scmYtg2mnnQD85LxFICZv3I3rQ4wMulfcH+n9VCrifdu4vN89lRLKgsb9Kzim
GUrbOWEZdKZ9D5Sfo90EXocM5NtHou14aN8xkRWbN7x/RK5o9jfJwKmrC1fCm6tx
2Qwvx5kypWQUN6UpCQIDAQAB
-----END PUBLIC KEY-----
</textarea>
その後:
var encrypt = new JSEncrypt();
encrypt.setPublicKey($('#pubkey').val());
WebCrypto でも同じことをしたいのですが、やり方がわかりません。次の手順を試しました。
- PEM ヘッダーを削除する
- PEM フッターを削除する
- CR/LFを削除
- トリムストリング
- Base64 文字列をデコードする
- 結果を ArrayBuffer に変換します
次に、キーをインポートしようとしました:
cryptoSubtle.importKey("spki", publicKey, {name: "RSA-OAEP", hash: {name: "SHA-256"}}, false, ["encrypt"]);
私は多くの方法を試しました (ASN/DER 形式を展開するなど)。しかし、さまざまなエラー (DOMException データなど) が発生します。PEM 形式がサポートされている形式として受け入れられるかどうか、またはキーを JSON Web Key 形式などに変換する必要があるかどうかはわかりません。
サードパーティの JS ライブラリを使わずに簡単な方法はありますか?