將 PEM 金鑰對轉換為 CryptoKey

那麼,你有沒有想過如何使用 OpenSSL 在 Web Cryptography API 中生成的 PEM RSA 金鑰對?如果答案是肯定的。大! 你會發現的。

注意:此過程也可用於公鑰,你只需將字首和字尾更改為:

-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----

此示例假定你在 PEM 中生成了 RSA 金鑰對。

function removeLines(str) {
    return str.replace("\n", "");
}

function base64ToArrayBuffer(b64) {
    var byteString = window.atob(b64);
    var byteArray = new Uint8Array(byteString.length);
    for(var i=0; i < byteString.length; i++) {
        byteArray[i] = byteString.charCodeAt(i);
    }

    return byteArray;
}

function pemToArrayBuffer(pem) {
    var b64Lines = removeLines(pem);
    var b64Prefix = b64Lines.replace('-----BEGIN PRIVATE KEY-----', '');
    var b64Final = b64Prefix.replace('-----END PRIVATE KEY-----', '');

    return base64ToArrayBuffer(b64Final);
}

window.crypto.subtle.importKey(
    "pkcs8",
    pemToArrayBuffer(yourprivatekey),
    {
        name: "RSA-OAEP",
        hash: {name: "SHA-256"} // or SHA-512
    },
    true,
    ["decrypt"]
).then(function(importedPrivateKey) {
    console.log(importedPrivateKey);
}).catch(function(err) {
    console.log(err);
});

現在你已經完成了! 你可以在 WebCrypto API 中使用匯入的金鑰。