2016-12-29 13 views
3

私はAngularJSアプリケーションでJavaで開発されたサービスを利用しています。このサービスは私にRSA公開鍵のバイトを返します。 JavaScriptのバイトを介してキーをマウントする必要があります。要約すると、私はJavaで以下のようにJavaで行われていることをJavaScriptで行う必要があります:JavaScriptを使用してPublicKey RSAをバイトから読み込む方法

public static PublicKey loadPublicKey(String stored){ 
    byte[] data = Base64.decode(stored); 
    X509EncodedKeySpec spec = new X509EncodedKeySpec(data); 
    KeyFactory fact = KeyFactory.getInstance("RSA"); 
    return fact.generatePublic(spec); 
} 

助けてもらえますか?

答えて

3

標準のjavascript WebCryptographyApiは、公開鍵をインポートして暗号化するか、署名を検証することができます。予想される鍵の使用状況に応じて、アルゴリズムと許可される操作を設定する必要があります。

暗号

//Convert the public key in base 64 (DER encoded) to array buffer 
var publicKeyAB = str2ab(atob(publicKeyB64)); 

//import key to encrypt with RSA-OAEP 
crypto.subtle.importKey(
    "spki",  
     publicKeyAB, 
     { name: "RSA-OAEP", hash: {name: "SHA-256"}}, 
     false, 
     ["encrypt"]) 
.then(function(key){ 
    //do something with the key    
}).catch(function(err) { 
    console.log(err); 
}); 

署名

//Convert the public key in base 64 (DER encoded) to array buffer 
var publicKeyAB = str2ab(atob(publicKeyB64)); 

//import the key to verify RSA signature with SHA 256 
crypto.subtle.importKey(
    "spki",  
     publicKeyAB, 
     {name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-256' }}, 
     false, 
     ["verify"]) 
.then(function(key){ 
    //do something with the key    
}).catch(function(err) { 
    console.log(err); 
}); 

ユーティリティ関数

function str2ab(str) { 
    var arrBuff = new ArrayBuffer(str.length); 
    var bytes = new Uint8Array(arrBuff); 
    for (var iii = 0; iii < str.length; iii++) { 
    bytes[iii] = str.charCodeAt(iii); 
    } 
    return bytes; 
} 

参照Mを確認鉱石の例here

関連する問題