Java Algid分析错误,不是序列
尝试使用以下方法从文件中读取RSA私钥时Java Algid分析错误,不是序列,java,security,rsa,Java,Security,Rsa,尝试使用以下方法从文件中读取RSA私钥时 public PrivateKey getPrivateKey() throws NoSuchAlgorithmException, InvalidKeySpecException, IOException { final InputStream inputStream = getClass().getClassLoader() .getResourceAsStream("
public PrivateKey getPrivateKey()
throws NoSuchAlgorithmException,
InvalidKeySpecException, IOException {
final InputStream inputStream = getClass().getClassLoader()
.getResourceAsStream("privatekey");
byte[] privKeyBytes = null;
try {
privKeyBytes = IOUtils.toByteArray(inputStream);
} catch (final IOException exception) {
LOGGER.error("", exception);
IOUtils.closeQuietly(inputStream);
}
LOGGER.debug("privKeyBytes: {}", privKeyBytes);
String BEGIN = "-----BEGIN RSA PRIVATE KEY-----";
String END = "-----END RSA PRIVATE KEY-----";
String str = new String(privKeyBytes);
if (str.contains(BEGIN) && str.contains(END)) {
str = str.substring(BEGIN.length(), str.lastIndexOf(END));
}
KeyFactory fac = KeyFactory.getInstance("RSA");
EncodedKeySpec privKeySpec =
new PKCS8EncodedKeySpec(Base64.decode(str.getBytes()));
return fac.generatePrivate(privKeySpec);
}
我有个例外
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:200) ~[na:1.6.0_23]
at java.security.KeyFactory.generatePrivate(KeyFactory.java:342) ~[na:1.6.0_23]
在fac.generatePrivate(privKeySpec)呼叫中
这个错误意味着什么
谢谢
Dmitri表示您的密钥不是PKCS#8格式。最简单的方法是使用
opensslpkcs8-topk8
命令转换密钥一次。或者,您可以使用的类。我也遇到了同样的问题,而密钥的格式并不是真正的问题。我所要做的就是打电话给
java.security.Security.addProvider(
new org.bouncycastle.jce.provider.BouncyCastleProvider()
);
一切正常您必须使用私钥创建PCKS8文件 private.pem=>私钥文件的名称
openssl genrsa-out private.pem 1024
public_key.pem=>公钥文件的名称
openssl rsa-in private.pem-pubout-outform pem-out public_key.pem
私钥 => PCKS8格式的私钥名称!您可以在java中读取此格式
openssl pkcs8-topk8-notify PEM-in private.PEM-out private_key.PEM-nocrypt
谢谢,成功了。下面是命令:opensslpkcs8-topk8-nocrypt-in myrsakey.pem-out myrsakey_pcks8如果不是pkcs8格式,它可以是什么格式?如果可以有多个选项,如何在使用OPENSSL命令转换为PKCS8之前知道格式?@PSatishPatro:私钥是PKCS#1格式的。在本例中,线索是“----BEGIN RSA PRIVATE KEY-----”,它表示这是“PEM”格式的PKCS#1 PRIVATE。这是我的问题-该文件是使用创建PKCS#1格式的genrsa
生成的(这是OP加载的格式,从BEGIN RSA PRIVATE KEY
头可以看出),而PKCS#8是一种不同的格式(在PEM中,由于不同的头可以检测到编码:BEGIN PRIVATE KEY
)。我的密钥生成器现在看起来是这样的:openssl genrsa 2048 | openssl pkcs8-topk8-nocrypt-out private.pem
您有类似的EC私钥密钥生成器吗?@RahulAgrawal,很遗憾,没有公钥呢?默认情况下是否为PKCS#8格式?@SaiRamReddy“-outform PEM”设置输出格式,请查看文档: