将字符串转换为公钥时获取到了空的公钥。

4
public static PublicKey strToPublicKey(String s) {

    PublicKey pbKey = null;
    try {

        BufferedReader br = new BufferedReader(new StringReader(s));
        PEMReader pr = new PEMReader(br);
        Object obj = pr.readObject();

        if (obj instanceof PublicKey) {
            pbKey = (PublicKey) pr.readObject();
        } else if (obj instanceof KeyPair) {
            KeyPair kp = (KeyPair) pr.readObject();
            pbKey = kp.getPublic();
        }
        pr.close();

    } catch (Exception e) {
        Log.d("CIPHER", e.getMessage());
    }
    return pbKey;
}

这行代码返回了空值(null)

pbKey = (PublicKey) pr.readObject();
    Cipher cipher = Cipher.getInstance("RSA/None/OAEPWithSHA1AndMGF1Padding", "BC");

当我尝试将服务器密钥转换为RSA公钥类型时,在此行返回空值。
pbKey = (PublicKey) pr.readObject();

你尝试过使用调试器断点吗? - Pankaj Mundra
是的,我在这一行得到了 null pbKey = (PublicKey) pr.readObject(); - Vipin
请查看下面的 SO链接,该链接将从base64字符串生成公钥。 - Pankaj Mundra
@PankajMundra 他正在使用更高级别的API,而且这个API不仅仅假定RSA,他没有理由不这样做。 - user207421
这个读取器是用于 OpenSSL 使用的 "X509 证书、PKCS8 编码密钥和 PKCS7 对象" 的格式。您能确认输入字符串是否属于其中之一吗?(最好提供一个示例输入字符串)? - lockcmpxchg8b
1个回答

2

你的代码不太合理。你已经读取了关键信息。通过 instanceof 测试已经证明了这一点。你不应该再读取另一个对象:你应该对已经读取的对象进行 转换


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接