当前位置: 首页 > 面试题库 >

使用BouncyCastle从文件中读取椭圆曲线私钥

龙成仁
2023-03-14
问题内容

该BouncyCastle的加密API允许创建和使用的常规验证数字签名java.security包对象,如java.security.PublicKeyjava.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密钥文件时,它们包含其他参数。


问题答案:

在Java中,这几乎是相同的代码。在剥离保护字符串并解码Base64数据后,将其提供给此实用程序方法:

public static PrivateKey keyToValue(byte[] pkcs8key)
    throws GeneralSecurityException {

    PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(pkcs8key);
    KeyFactory factory = KeyFactory.getInstance("ECDSA");
    PrivateKey privateKey = factory.generatePrivate(spec);
    return privateKey;
}


 类似资料:
  • 问题内容: 该BouncyCastle的加密API允许创建和使用的常规验证数字签名包对象,如,和它们的容器。 假设我使用OpenSSL创建一个.pem(或更简单的话是一个.der文件),其中包含要在应用程序中使用的椭圆曲线私钥。例如,它看起来像这样: 如何使用BouncyCastle API获取同时包含此私钥和相应公钥的? 请注意,我要使用BouncyCastle 1.50(在撰写本文时为最新)中

  • 我正在使用Ruby 2.5.x OpenSSL库研究椭圆曲线。我可以很容易地使用 但是给定一个私钥,我想重新生成公钥。 我知道OpenSSL可以做到这一点,因为命令行允许您这样做,Ruby比特币项目也可以做到这一点。但是Ruby比特币项目使用FFI而不是Ruby提供的接口有自己的OpenSSL接口。 Ruby 2.5.x openssl 库是否没有公开足够的 OpenSSL 接口,以便能够从私钥生

  • 创建一个形状为椭圆的曲线。 将xRadius与yRadius设为相等的值它将会成为一个圆。 代码示例 const curve = new THREE.EllipseCurve( 0, 0, // ax, aY 10, 10, // xRadius, yRadius 0, 2 * Math.PI, // aStartAngle, aEndA

  • 我目前正在从事一个项目,涉及从Vault获取PEM或DER格式的椭圆曲线证书/私钥包,并需要将其导入Java密钥库。我可以找到大量关于使用keytools执行此操作的信息,但无法找到有关如何成功将DER编码字符串转换为以将其插入密钥库的信息。 下面是我的非工作代码

  • 我正在处理一些ECC加密问题。 目标是用C或bash编写程序,它将以由128个十六进制字符组成的散列作为输入(例如:8A9A35145C4EA5260DF9972C804FE2D3F9F3D7A2AC01A6BEB21C82BB30957B3952273AC9166B90C120737A925780F84A1D2359E7AA05201C674D29746FCA07),并将从

  • 问题内容: 我正在尝试为椭圆曲线创建自己的库。有些事情行得通,但有些则行不通。 要根据私钥计算公钥,应将生成器点乘以私钥,然后得到另一个点:公钥点(ECPoint = BigInteger * ECPoint)。 现在,我有一个私钥,并将其与Secp256k1曲线的生成器点相乘。我得到一个钥匙,但这不是我应该得到的钥匙。 这是我的JAVA代码: 我的代码有问题吗?secp256k1是否有特定的乘法