2017-09-15 8 views
0

로 가져 오기 RSA 키는 내가 jsbn하여 RSA 키 생성 :WebCrypto : crypto.subtle.importKey (...)

{ 
    "e": "10001", 
    "n": "74a258004dd6c338b27688c1dd13d90da3269321d6dfa3cd8d7cfd7521453d0c5a9828bd507cfc6fe004ddcc09c498d2ceea8e05c214a63ab99d33c9060236f02d5f8bd1e7b334c7f74745948664aeba1a5addf7e7d76911ebf382852aabe86e06f83e0f7669be172380069547f542d8b0848b8bcf53e57c04d5e4163820ced3e4078418efe98df9f8c54c0cda66db3262f20b81464162c44216ca8b63c8f0cfe090dfe1d1950428ad6948204f3f44ba0648de44a9c44d44b91bd8f9ff7cccaceb9f20204f3ba1e228f13249fe04a7fc69cfe57d35e8897e16bc7872f585c909fec9b95a5240ab6589c3ebbe3ad614bfbdc966218daf9d9dddb39fdf6c0d3b49", 
    ...} 

을 그리고 crypto.subtle.importKey하여 가져올.

예외 : DOMException :

이 내가 찾을 오류가 인 JWK 회원 "N"base64url을 수 없습니다 패딩 포함 된 디코딩 또는

이 사람이 문제가 어디 알고 있나요?

아래 코드를 살펴보십시오.

var keyData = { 
    kty: 'RSA', 
    e: hexToBase64(rsaJson.e), 
    n: hexToBase64(rsaJson.n), 
    alg: 'RSA-OAEP-256', 
    ext: true 
}; 

var algo = { 
    name: 'RSA-OAEP', 
    hash: {name: 'SHA-256'} 
}; 

var importedKey = crypto.subtle.importKey('jwk', keyData, algo, false, ['encrypt']).catch(function(err) { 
     console.log(err); 
    }); 

답변

0

당신은 base64로 약간 다릅니다 base64url으로 인코딩 된 값으로 JWK 키를 제공해야합니다. 이 코드는 약속과 함께 작동 및 비동기입니다 또한 WebCryptographyApi

var keyData = { 
    kty: 'RSA', 
    e: b64tob64u(hexToBase64(rsaJson.e)), 
    n: b64tob64u(hexToBase64(rsaJson.n)), 
    alg: 'RSA-OAEP-256', 
    ext: true 
}; 

var algo = { 
    name: 'RSA-OAEP', 
    hash: {name: 'SHA-256'} 
}; 

crypto.subtle.importKey('jwk', keyData, algo, false, ['encrypt']) 
.then (function (importedKey){ 
    console.log(importedKey); 
}).catch(function(err) { 
    console.log(err); 
}); 

function b64tob64u(a){ 
    a=a.replace(/\=/g,""); 
    a=a.replace(/\+/g,"-"); 
    a=a.replace(/\//g,"_"); 
    return a 
} 

주를 작동 인코딩

에게 base64url하는 hexToBase64의 결과를 변환합니다. 나는

crypto.subtle.importKey(params...).then (function (importedKey) 
+0

대와

var importedKey = crypto.subtle.importKey(params...) 

을 변경했습니다. 이것은 나를 위해 작동합니다. 메모 해 주셔서 감사합니다. 이미 "다음"기능을 사용하고 있습니다. – Ana

+0

안녕하세요. 암호화를 위해 공개 키를 가져 오는 경우 작동합니다. 해독을 위해 개인 키를 가져 오는 것이 효과가없는 이유는 무엇입니까? – Ana

+0

같은 방식으로 작동해야합니다. 나는 당신의 새로운 질문에 대답했다. – pedrofb