首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android: InvalidKeySpecException:编码密钥规范未被识别

Android: InvalidKeySpecException:编码密钥规范未被识别
EN

Stack Overflow用户
提问于 2016-10-20 08:03:13
回答 1查看 5.4K关注 0票数 2

当我试图用字符串实现RSA公钥时。我在下面提到了例外。我正在尝试验证Android中生成的密钥(string,使用Swift)。如何将字符串转换为私钥/公钥?

代码语言:javascript
复制
static PublicKey getRSAPublicKeyFromString (String publicKeyPEM){
    try {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA", "SC");
        byte[] publicKeyBytes = Base64.decode(publicKeyPEM.getBytes("UTF-8"), Base64.DEFAULT);
        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(publicKeyBytes);
        return keyFactory.generatePublic(x509KeySpec);
    }catch (Exception e){
        e.printStackTrace ();
    }

    return null;
}

异常

代码语言:javascript
复制
java.security.spec.InvalidKeySpecException: encoded key spec not recognised
at org.spongycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic(BaseKeyFactorySpi.java:52)
at org.spongycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi.engineGeneratePublic(KeyFactorySpi.java:130)
at java.security.KeyFactory.generatePublic(KeyFactory.java:172)

ios中的公钥:

代码语言:javascript
复制
MIGJAoGBAOibWF15OhLJQAWpQN++UFqyG+2uLEG8PPvCajwwh6FWi6jLiZ9VN+l3JpiJTQwF/yxlSJCZCoYnljKeRBnNxpzBnuTJsyuZ4hI8ehLzDvh9nYzX/TlcZYVshJzyIVRZAbuFOCLNIltjB+Qmw8YGlxzeDSFaB6eEC1OP49hDakURAgMBAAE=
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-20 15:03:13

不幸的是,您拥有的是一个base64编码的PKCS#1 RSAPublicKey,这是Java不产生或消耗的东西。Java生成并使用了一个稍微通用和稍微复杂的X.509 SubjectPublicKeyInfo

使用邦西城堡库,下面是一些生成RSAPublicKey的示例代码:

代码语言:javascript
复制
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Primitive;

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.util.Base64;

public class Main {

    public static void main(String[] args) throws Exception {
        String pubkey64 = "MIGJAoGBAOibWF15OhLJQAWpQN++UFqyG+2uLEG8PPvCajwwh6FWi6jLiZ9VN+l3JpiJTQwF/yxlSJCZCoYnljKeRBnNxpzBnuTJsyuZ4hI8ehLzDvh9nYzX/TlcZYVshJzyIVRZAbuFOCLNIltjB+Qmw8YGlxzeDSFaB6eEC1OP49hDakURAgMBAAE=";
        PublicKey rsaPub = readRSAPublicKey(pubkey64);
        System.out.println(rsaPub);
    }

    private static PublicKey readRSAPublicKey(String pubkey64) throws Exception {
        byte [] derRsaPubBytes = Base64.getDecoder().decode(pubkey64);
        ASN1Primitive asn1Prime = new ASN1InputStream(derRsaPubBytes).readObject();
        org.bouncycastle.asn1.pkcs.RSAPublicKey rsaPub = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(asn1Prime);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePublic(new RSAPublicKeySpec(rsaPub.getModulus(), rsaPub.getPublicExponent()));
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40148760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档