【问题标题】:How to load PublicKey RSA from bytes using JavaScript如何使用 JavaScript 从字节加载 PublicKey RSA
【发布时间】:2017-05-14 04:59:30
【问题描述】:

我在 AngularJS 应用程序中使用 Java 开发的服务。该服务向我返回 RSA 公钥的字节。我需要通过 JavaScript 中的字节挂载密钥。总之,我需要在 JavaScript 中执行 Java 中正在执行的操作,如下所示:

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

谁能帮帮我?

【问题讨论】:

    标签: javascript rsa public-key


    【解决方案1】:

    您可以使用标准 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;
    }
    

    查看更多示例here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 2014-04-29
      相关资源
      最近更新 更多