Seb*_*eba 3 javascript rsa webcrypto-api
我正在使用WebCrypto和RSASSA-PKCS1-v1_5(https://github.com/diafygi/webcrypto-examples#rsassa-pkcs1-v1_5---sign),我需要使用javascript代码将公钥导出为PEM格式.
文档说可以通过这种方式导出密钥:https: //github.com/diafygi/webcrypto-examples#rsassa-pkcs1-v1_5---exportkey 但我需要不同的格式.
任何的想法?
提前致谢.
问候
ped*_*ofb 12
将公钥导出到 spki
window.crypto.subtle.exportKey("spki",keys.publicKey);
Run Code Online (Sandbox Code Playgroud)
并将生成的数组缓冲区转换为base64,添加PEM头-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----.下面我提供spkiToPEM一个完整的例子
crypto.subtle.generateKey(
{
name: "RSASSA-PKCS1-v1_5",
modulusLength: 2048,
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
hash: {name: "SHA-256"},
},
false,
["sign", "verify"]
).then(function(keys){
return window.crypto.subtle.exportKey("spki",keys.publicKey);
}).then (function(keydata){
var pem = spkiToPEM(keydata);
console.log(pem);
}).catch(function(err){
console.error(err);
});
function spkiToPEM(keydata){
var keydataS = arrayBufferToString(keydata);
var keydataB64 = window.btoa(keydataS);
var keydataB64Pem = formatAsPem(keydataB64);
return keydataB64Pem;
}
function arrayBufferToString( buffer ) {
var binary = '';
var bytes = new Uint8Array( buffer );
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode( bytes[ i ] );
}
return binary;
}
function formatAsPem(str) {
var finalString = '-----BEGIN PUBLIC KEY-----\n';
while(str.length > 0) {
finalString += str.substring(0, 64) + '\n';
str = str.substring(64);
}
finalString = finalString + "-----END PUBLIC KEY-----";
return finalString;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1796 次 |
| 最近记录: |