2016-10-28 6 views
2

私はRSASSA-PKCS1-v1_5(https://github.com/diafygi/webcrypto-examples#rsassa-pkcs1-v1_5---sign)でWebCryptoを使用していますので、公開鍵をjavascriptコードを使用してPEM形式にエクスポートする必要があります。webcryptoキーをPEM形式にエクスポート

ドキュメントでは、この方法でキーをエクスポートすることができます: https://github.com/diafygi/webcrypto-examples#rsassa-pkcs1-v1_5---exportkey しかし、私は別のフォーマットが必要です。

ありがとうございます。 spki

window.crypto.subtle.exportKey("spki",keys.publicKey); 

そしてPEMヘッダ-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----を添加BASE64に得られた配列バッファを変換する

よろしく

答えて

4

エクスポート公開鍵。私はspkiフォーマットがうまくブラウザでサポートされていない完全な例

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; 
} 
関連する問題