2016-10-28 4 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----- 및 추가베이스 64에 결과 배열 버퍼를 변환

안부

답변

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; 
}