BouncyCastle 加密 API 允许使用常规方法创建和验证数字签名java.security
封装对象,例如java.security.PublicKey
, java.security.PrivateKey
和他们的容器java.security.KeyPair
.
假设我使用 OpenSSL 创建一个 .pem(或者,如果更简单的话,创建一个 .der 文件),其中包含我想要在应用程序中使用的椭圆曲线私钥。例如,它看起来像这样:
-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIDzESrZFmTaOozu2NyiS8LMZGqkHfpSOoI/qA9Lw+d4NoAcGBSuBBAAK
oUQDQgAE7kIqoSQzC/UUXdFdQ9Xvu1Lri7pFfd7xDbQWhSqHaDtj+XY36Z1Cznun
GDxlA0AavdVDuoGXxNQPIed3FxPE3Q==
-----END EC PRIVATE KEY-----
如何使用 BouncyCastle API 获取java.security.KeyPair
包含该私钥和相应的公钥?
请注意,我想使用 BouncyCastle 1.50(撰写本文时为最新版本)中提供的 API,并且不使用已弃用的 API。不幸的是,这排除了PEMReader
其他 SO 答案中使用的类。此外,这个问题特定于椭圆曲线的格式;与 RSA 或 DSA 密钥文件相比,它们包含附加参数。
除了标准 JCE 方法之外由迪瓦诺夫所示 https://stackoverflow.com/a/23369629/2868801只要你给它正确的输入(请参阅我的评论),或者只是像你的自我回答一样首先使用 JCE,充气城堡1.48 起仍然包含旧的 PEMReader 功能,只是组织方式有点不同,对于这种情况,您can use就像是:
static void SO22963581BCPEMPrivateEC () throws Exception {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Reader rdr = new StringReader ("-----BEGIN EC PRIVATE KEY-----\n"
+"MHQCAQEEIDzESrZFmTaOozu2NyiS8LMZGqkHfpSOoI/qA9Lw+d4NoAcGBSuBBAAK\n"
+"oUQDQgAE7kIqoSQzC/UUXdFdQ9Xvu1Lri7pFfd7xDbQWhSqHaDtj+XY36Z1Cznun\n"
+"GDxlA0AavdVDuoGXxNQPIed3FxPE3Q==\n"+"-----END EC PRIVATE KEY-----\n");
Object parsed = new org.bouncycastle.openssl.PEMParser(rdr).readObject();
KeyPair pair = new org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter().getKeyPair((org.bouncycastle.openssl.PEMKeyPair)parsed);
System.out.println (pair.getPrivate().getAlgorithm());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)