将 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 中使用导入的密钥。