9

これまでは、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 でも同じことをしたいのですが、やり方がわかりません。次の手順を試しました。

  1. PEM ヘッダーを削除する
  2. PEM フッターを削除する
  3. CR/LFを削除
  4. トリムストリング
  5. Base64 文字列をデコードする
  6. 結果を ArrayBuffer に変換します

次に、キーをインポートしようとしました:

cryptoSubtle.importKey("spki", publicKey, {name: "RSA-OAEP", hash: {name: "SHA-256"}}, false, ["encrypt"]);

私は多くの方法を試しました (ASN/DER 形式を展開するなど)。しかし、さまざまなエラー (DOMException データなど) が発生します。PEM 形式がサポートされている形式として受け入れられるかどうか、またはキーを JSON Web Key 形式などに変換する必要があるかどうかはわかりません。

サードパーティの JS ライブラリを使わずに簡単な方法はありますか?

4

2 に答える 2