gpt4 book ai didi

java - 在 android 的棉花糖设备中从 RSA key 生成私钥的异常

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:35 24 4
gpt4 key购买 nike

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

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
  • 我在我的 marshmallow 设备 但在我的 Oreo 中遇到了这个异常
    设备
    ,它工作正常,我能够生成私钥成功
  • 如何解决这个问题

最佳答案

PEM 文件中的 header -----BEGIN RSA PRIVATE KEY----- 表示它包含一个 PKCS#1 key ,但 Java(和 Android)不支持 pkcs1,所以你需要使用像 openssl 这样的工具将 key 从 pkcs1 转换为 pcks8

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

或者,您可以使用 BouncycaSTLe 加载 key 。参见 Read RSA private key of format PKCS1 in JAVA


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

关于java - 在 android 的棉花糖设备中从 RSA key 生成私钥的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54283897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com