java - 无法加载 RSA 公钥

标签 java rsa public-key

我正在尝试读取如下所示的 RSA 公钥,但在第 6 行出现异常:java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: algid parse error, not a sequence

我的代码:

String rsaPublicKey = rsaPublicKeyString.replace(
    "-----BEGIN RSA PUBLIC KEY-----\n", "");
rsaPublicKey = rsaPublicKey.replace("\n-----END RSA PUBLIC KEY-----", "");
byte[] bytes = EncryptionUtils.decodeBase64(rsaPublicKey);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);
pubKey = (RSAPublicKey)keyFactory.generatePublic(keySpec);

RSA 公钥:

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sqDsm6
lyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS
an9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw
Efzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xayEGB+
8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aIhc3n
Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB
-----END RSA PUBLIC KEY-----

我做错了什么?

更新:

public static byte[] decodeBase64(String data) throws EncryptionException {
    try {
        BASE64Decoder decoder = new BASE64Decoder();
        return decoder.decodeBuffer(data);
    } catch (Exception e) {
        throw new EncryptionException(e);
    }
}

最佳答案

对我来说,我缺少公钥中的 OID。我必须使用此处的帮助在 iOS 端更正该问题:http://blog.wingsofhermes.org/?p=42

此外,我的公钥不必转换为 RSAPublicKey,标准工作得很好:

X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(publicKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);

关于java - 无法加载 RSA 公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17817508/

相关文章:

java - 使用语音识别将单个字符识别为java

C# - 使用公钥 (mod) 和指数 RSA PKCS#1.5 转换字符串

microservices - 将私钥存储在微服务中

java - Dockerfile 运行可执行文件

java - 格式错误的数据库 URL,无法解析主要 URL 部分

java - POST 到 Spring MVC Controller 结果为 "HttpMessageNotReadableException: Could not read JSON: No suitable constructor found"

java - Android 和 Java 中的 RSA 加密

c# - 两个系统之间使用私钥进行 RSA 解密

encryption - 两个私钥非对称加密——可能吗?

java - BCECPublicKey 到指纹