【问题标题】:Java: How to generate KeyPair form private key, using only pure Java.Security without BouncyCastle?Java:如何生成 KeyPair 形式的私钥,只使用没有 BouncyCastle 的纯 Java.Security?
【发布时间】:2019-09-03 10:54:07
【问题描述】:

Java: 如何生成KeyPair 形式的私钥,只使用纯Java.Security 而没有像BouncyCastle 这样的第三方提供商?

我正在使用此代码生成KeyPair

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256k1");
keyGen.initialize(ecSpec, new SecureRandom());
KeyPair keyPair = keyGen.generateKeyPair();

但是如果我想从我已经知道的私钥生成KeyPair 怎么办? 我试图在网上找到解决方案,但没有成功。

【问题讨论】:

  • 你检查过this 吗?
  • Java 只能通过两种方式导入私钥:1) PKCS8 格式,无论是否加密,或 2) 使用单独的 BigInteger 组件,使用私钥规范类和参数规范类。第一种方法通常更干净。

标签: java cryptography bouncycastle public-key-encryption


【解决方案1】:

Java 中的公钥就是 s * G,其中 s 是私钥(一个向量),G 是椭圆曲线的基点。但是,没有办法在 Java 中执行 EC 点计算,所以你被卡住了。

您可以做的一件事是从外部库中提取 EC 点计算并使用它。好吧,好吧,或者您可以自己执行计算。毕竟,Java 确实为您提供了检索 s 的 BigInteger 值以及 G 的 x 和 y 值的选项。

有一种使用 ECDH 进行计算的迂回方式(毕竟,这基本上 点乘法),但这是一个很长的解决方法,有这么多的黑客,以至于自己执行计算是很多的更简单,更清洁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 2015-03-21
    • 1970-01-01
    相关资源
    最近更新 更多