Dat*_*shi 8 android bouncycastle spongycastle
我试图在我的应用程序中生成共享密钥,如下所示:
public static byte[] generateSharedSecret(PrivateKey privateKey PublicKey publicKey) {
KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH", "SC");
keyAgreement.init(privateKey);
keyAgreement.doPhase(publicKey, true);
return keyAgreement.generateSecret();
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但PublicKey我在这里使用的应该来自后端.
后端只是向我发送椭圆曲线上的点x和y值,现在我应该从中生成PublicKey.但我无法弄明白!如何PublicKey从这两个值创建实例?
这其实很简单!但除了x和y值之外你还需要一件事.你还需要一个ECParameterSpec!在ECParameterSpec描述你所使用的椭圆曲线和您的应用可以使用相同ECParameterSpec的后端呢!
使用x和y值,您可以创建一个ECPoint实例,并与您一起ECParameterSpec创建一个ECPublicKeySpec:
ECParameterSpec ecParameters = ...;
BigInteger x = ...;
BigInteger y = ...;
ECPoint ecPoint = new ECPoint(x, y);
ECPublicKeySpec keySpec = new ECPublicKeySpec(ecPoint, ecParameters);
Run Code Online (Sandbox Code Playgroud)
现在用它ECPublicKeySpec可以生成PublicKey使用KeyFactory:
KeyFactory keyFactory = KeyFactory.getInstance("EC");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到有关此主题的更多信息.
| 归档时间: |
|
| 查看次数: |
2430 次 |
| 最近记录: |