如何从base64编码的字符串构造java.security.PublicKey对象?

Usm*_*ail 28 java security rsa

我有来自外部源(Android Store)的bse64encoded字符串公钥,我需要使用它来验证签名内容.如何将字符串转换为java.security.PublicKey接口的实例.如果这有所不同,我在Java 6上.

关键是(可能)使用标准java lib生成而不是弹性城堡(来自远程团队,所以我不确定).他们的示例代码说使用Security.generatePublicKey(base64EncodedPublicKey); 但是标准java中的Security对象没有这样的方法.

ale*_*xis 52

上述答案的代码

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 您对"Base64.decode"使用什么导入? (7认同)
  • 我像这样修改了第一行以使其在 Java 8 `byte[] byteKey = Base64.getDecoder().decode(key.getBytes());` (4认同)
  • 显然,你可以从java.util中获得Base64.getDecoder().decode(bytes)方法. (3认同)

Dav*_*e G 22

好笑咧嘴笑...试试这个

  • base64解码密钥数据以获取字节数组(byte [])
  • 使用字节数组创建一个新的X509EncodedKeySpec
  • 使用KeyFactory.getInstance("RSA")获取KeyFactory的实例,假设此处为RSA
  • 使用X509EncodedKeySpec调用方法generatePublic(KeySpec)
  • 结果/应该/是您使用的公钥.