java– 在android中的marshmallow设备中从RSA密钥生成私钥的异常

java– 在android中的marshmallow设备中从RSA密钥生成私钥的异常,第1张

概述我正在使用此代码从RSA密钥生成私钥publicclassReadPKCS8Pem{privatefinalstaticStringPRIVATE_KEY=Keys.PRIVATE_KEY;publicstaticPrivateKeygetKey(){try{//ReadinthekeyintoaStringStringBuilderpkcs8Line

我正在使用此代码从RSA密钥生成私钥

public class ReadPKCS8Pem {    private final static String PRIVATE_KEY = Keys.PRIVATE_KEY;    public static PrivateKey getKey(){        try{            // Read in the key into a String            StringBuilder pkcs8lines = new StringBuilder();            BufferedReader rdr = new BufferedReader(new StringReader(PRIVATE_KEY));            String line;            while ((line = rdr.readline()) != null) {                pkcs8lines.append(line);            }            // Remove the "BEGIN" and "END" lines, as well as any whitespace            String pkcs8Pem = pkcs8lines.toString();            pkcs8Pem = pkcs8Pem.replace("-----BEGIN RSA PRIVATE KEY-----", "");            pkcs8Pem = pkcs8Pem.replace("-----END RSA PRIVATE KEY-----", "");            pkcs8Pem = pkcs8Pem.replaceAll("\s+","");            // Base64 decode the result            byte [] pkcs8EncodedBytes = Base64.decode(pkcs8Pem, Base64.DEFAulT);            // extract the private key            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8EncodedBytes);            KeyFactory kf = KeyFactory.getInstance("RSA");            PrivateKey privKey = kf.generatePrivate(keySpec);            System.out.println(privKey);            return privKey;        }catch (Exception ex){            ex.printstacktrace();        }        return null;    }}

在线:

PrivateKey privKey = kf.generatePrivate(keySpec);

我得到了例外:

java.lang.RuntimeException: error:0c0890ba:ASN.1 enCoding routines:asn1_check_tlen:WRONG_TAG

>我在我的棉花糖设备中得到了这个例外,但在我的奥利奥
设备,它工作正常,我能够生成私钥
顺利
>如何解决这个问题

解决方法:

PEM文件中的标题—– BEGIN RSA PRIVATE KEY —–表示它包含PKCS#1密钥,但Java(和AndroID)不支持pkcs1,因此您需要将密钥从pkcs1转换为pcks8使用像openssl这样的工具

# openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in pkcs1.key -out pkcs8.key

或者,您可以使用Bouncycastle加载密钥.见Read RSA private key of format PKCS1 in JAVA

我不知道为什么它在Oreo中有效,可能是underliying提供商将支持转换,即使它没有记录https://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec

总结

以上是内存溢出为你收集整理的java – 在android中的marshmallow设备中从RSA密钥生成私钥的异常全部内容,希望文章能够帮你解决java – 在android中的marshmallow设备中从RSA密钥生成私钥的异常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1116765.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存