生成 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 私鑰,你可以隨意使用它。請享用!