![](/img/trans.png)
[英]How do I obtain the public key from an ECDSA private key in Java with Bouncy Castle?
[英]How to read DER DSA private key to AsymmetricKeyParameter in bouncy castle (Java)
如何將帶有私有 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)
我最終使用的解決方法是將密鑰轉換為PEM格式並使用以下命令:
@Cleanup
FileReader privateKeyReader = new FileReader(new File("key.pem"));
@Cleanup
PEMParser parser = new PEMParser(privateKeyReader);
PEMKeyPair keyPair = (PEMKeyPair) parser.readObject();
AsymmetricKeyParameter privateKey = PrivateKeyFactory
.createKey(keyPair.getPrivateKeyInfo());
AsymmetricKeyParameter publicKey = PublicKeyFactory
.createKey(keyPair.getPublicKeyInfo());
byte[] privateKeyBytes = FileUtils.readFileToByteArray(new File("sign-key-private.der"));
KeyFactory kf = KeyFactory.getInstance("RSA", "BC");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
RSAPrivateKey rsaKey = (RSAPrivateKey) kf.generatePrivate(keySpec);
AsymmetricKeyParameter privateKeyParameter = new RSAKeyParameters(true, rsaKey.getModulus(), rsaKey.getPrivateExponent());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.