【问题标题】:Generating PublicKey from x and y values of elliptic curve point从椭圆曲线点的 x 和 y 值生成 PublicKey
【发布时间】:2015-05-08 06:00:17
【问题描述】:

我正在尝试在我的应用中生成一个共享密钥,如下所示:

public static byte[] generateSharedSecret(PrivateKey privateKey PublicKey publicKey) {
    KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH", "SC");
    keyAgreement.init(privateKey);
    keyAgreement.doPhase(publicKey, true);
    return keyAgreement.generateSecret();
} 

这工作正常,但我在这里使用的PublicKey 应该来自后端。

后端只向我发送椭圆曲线上一个点的xy 值,现在我应该从中生成PublicKey。但我就是想不通!如何仅根据这两个值创建 PublicKey 实例?

【问题讨论】:

    标签: android bouncycastle spongycastle


    【解决方案1】:

    其实很简单!但是除了xy 值之外,您还需要一件事。您还需要ECParameterSpecECParameterSpec 描述了您正在使用的椭圆曲线,并且您的应用必须使用与后端相同的 ECParameterSpec


    使用xy 值,您可以创建ECPoint 实例,并与ECParameterSpec 一起创建ECPublicKeySpec

    ECParameterSpec ecParameters = ...;
    BigInteger x = ...;
    BigInteger y = ...;
    
    ECPoint ecPoint = new ECPoint(x, y);
    ECPublicKeySpec keySpec = new ECPublicKeySpec(ecPoint, ecParameters);
    

    现在有了ECPublicKeySpec,您可以使用KeyFactory 生成PublicKey

    KeyFactory keyFactory = KeyFactory.getInstance("EC");
    PublicKey publicKey = keyFactory.generatePublic(keySpec);
    

    您可以找到有关此主题的更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多