生成 RSA 密钥对并转换为 PEM 格式
在本例中,你将学习如何生成 RSA-OAEP 密钥对以及如何将私钥从此密钥对转换为 base64,以便你可以将其与 OpenSSL 等一起使用。请注意,此过程也可用于你刚才拥有的公钥使用下面的前缀和后缀:
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
注意:此示例已在以下浏览器中进行了全面测试:Chrome,Firefox,Opera,Vivaldi
function arrayBufferToBase64(arrayBuffer) {
var byteArray = new Uint8Array(arrayBuffer);
var byteString = '';
for(var i=0; i < byteArray.byteLength; i++) {
byteString += String.fromCharCode(byteArray[i]);
}
var b64 = window.btoa(byteString);
return b64;
}
function addNewLines(str) {
var finalString = '';
while(str.length > 0) {
finalString += str.substring(0, 64) + '\n';
str = str.substring(64);
}
return finalString;
}
function toPem(privateKey) {
var b64 = addNewLines(arrayBufferToBase64(privateKey));
var pem = "-----BEGIN PRIVATE KEY-----\n" + b64 + "-----END PRIVATE KEY-----";
return pem;
}
// Let's generate the key pair first
window.crypto.subtle.generateKey(
{
name: "RSA-OAEP",
modulusLength: 2048, // can be 1024, 2048 or 4096
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
hash: {name: "SHA-256"} // or SHA-512
},
true,
["encrypt", "decrypt"]
).then(function(keyPair) {
/* now when the key pair is generated we are going
to export it from the keypair object in pkcs8
*/
window.crypto.subtle.exportKey(
"pkcs8",
keyPair.privateKey
).then(function(exportedPrivateKey) {
// converting exported private key to PEM format
var pem = toPem(exportedPrivateKey);
console.log(pem);
}).catch(function(err) {
console.log(err);
});
});
而已! 现在你拥有一个完全工作且兼容的 PEM 格式的 RSA-OAEP 私钥,你可以随意使用它。请享用!