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 APIs获取包含私钥和相应公钥的
java.security.KeyPair
?请注意,我想使用BouncyCastle 1.50中提供的API(在撰写本文时为最新版本),而不使用任何已弃用的API。这不幸地排除了其他SO答案中使用的
PEMReader
类。此外,此问题特定于椭圆曲线的格式;与RSA或DSA密钥文件相比,它们包含其他参数。
EC PARAMETERS
块是由于openssl ecparam -genkey
默认工作方式而发生的意外,并且不是实际密钥的必要部分,您可以通过指定-noout
来省略它,尽管这有些不太明显。 EC(DSA / DH)的实际密钥结构(在base64 / DER数据中“隐藏”)确实包含一些RSA所没有但DSA却有的参数信息。 - dave_thompson_085