【发布时间】:2015-04-09 07:13:24
【问题描述】:
如何将带有私有 DSA 密钥(4096 位)的 DER 文件读入 AsymmetricKeyParameter 以便在 DSASigner 中使用?
我尝试了以下代码:
byte[] privateKeyBytes = FileUtils.readFileToByteArray(new File(
"sign-key-private.der"));
AsymmetricKeyParameter privateKey = PrivateKeyFactory
.createKey(privateKeyBytes);
结果是异常:
java.lang.IllegalArgumentException: unknown object in getInstance: org.bouncycastle.asn1.ASN1Integer
at org.bouncycastle.asn1.ASN1Sequence.getInstance(Unknown Source)
at org.bouncycastle.asn1.x509.AlgorithmIdentifier.getInstance(Unknown Source)
at org.bouncycastle.asn1.pkcs.PrivateKeyInfo.<init>(Unknown Source)
at org.bouncycastle.asn1.pkcs.PrivateKeyInfo.getInstance(Unknown Source)
at org.bouncycastle.crypto.util.PrivateKeyFactory.createKey(Unknown Source)
at test.security.core.Program.main(Program.java:41)
【问题讨论】:
-
DER 文件是否以任何方式编码,或受密码保护?
-
根据来源,调用了以下方法:
PrivateKeyFactory.createKey(PrivateKeyInfo.getInstance(new ASN1InputStream(inputStream).readObject()));请尝试手动执行此操作,使用new FileInputStream("sign-key-private.der");查看哪个步骤失败 -
从源和堆栈跟踪,它试图解析 ANS 编码的算法标识符,期望一个序列,并获得一个 ASN 编码的整数。那么......您是否有机会使用 openssl 转储 .DER 文件的内容并确保它可以成功执行此操作?
-
DER 文件不受密码保护,由 XCA 0.9.3 生成。我通过转换为 PEM 文件解决了这个问题
标签: java bouncycastle dsa