我怎样才能构建从base64编码字符串java.security.PublicKey对象?(How

2019-06-25 05:37发布

我有一个从外部源(Android商店)一bse64encoded串公钥,我需要用它来验证签名的内容。 我怎么能转换串入java.security.PublicKey接口的实例。 我在Java 6,如果有差别。

最关键的是(可能)使用标准的Java lib和不充气城堡(它从远程团队,所以我不知道)产生。 他们的代码示例表示使用Security.generatePublicKey(base64EncodedPublicKey); 但在标准Java安全对象有没有这样的方法。

Answer 1:

好了笑容......试试这个

  • BASE64解码该密钥数据获得一个字节数组(byte [])
  • 使用字节数组创建一个新的X509EncodedKeySpec
  • 使用KeyFactory.getInstance(“RSA”)假设RSA在这里得到的KeyFactory的实例
  • 调用与X509EncodedKeySpec方法generatePublic(keySpec)根据
  • 结果/应该/是您使用的公钥。


Answer 2:

代码上面的回答

public static PublicKey getKey(String key){
    try{
        byte[] byteKey = Base64.decode(key.getBytes(), Base64.DEFAULT);
        X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
        KeyFactory kf = KeyFactory.getInstance("RSA");

        return kf.generatePublic(X509publicKey);
    }
    catch(Exception e){
        e.printStackTrace();
    }

    return null;
}


Answer 3:

试试这个....

PublicKey getPublicKey(byte[] encodedKey) throws NoSuchAlgorithmException, InvalidKeySpecException
{
    KeyFactory factory = KeyFactory.getInstance("RSA");
    X509EncodedKeySpec encodedKeySpec = new X509EncodedKeySpec(encodedKey);
    return factory.generatePublic(encodedKeySpec);
}


Answer 4:

使用海绵城堡

public static PublicKey getPublicKeyFromString(String key) throws Exception {
    KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
    org.spongycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey
            = org.spongycastle.asn1.pkcs.RSAPublicKey.getInstance(decodeB64(key));
    RSAPublicKeySpec keySpec
            = new RSAPublicKeySpec(pkcs1PublicKey.getModulus(), pkcs1PublicKey.getPublicExponent());
    PublicKey publicKey = keyFactory.generatePublic(keySpec);
    return publicKey;
}


文章来源: How can I construct a java.security.PublicKey object from a base64 encoded string?