如何将椭圆曲线公钥从java客户端发送到js服务器?

dldeef67  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(128)

我正在做一个应用程序,其中服务器验证客户端使用EC加密。为此,我需要一个方法来发送公钥到服务器。
这是我的代码生成公钥:

import java.io.FileInputStream;
import java.io.FileWriter;
import java.security.*;
import java.security.spec.ECGenParameterSpec;
import java.util.Base64;

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class StoreKeys{
    public static void main(String args[]) throws Exception {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
        ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256r1");
        keyGen.initialize(ecSpec);
        KeyPair keyPair = keyGen.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
    }
}

我已经尝试过将密钥作为坐标(重新生成它)和PEM发送,但是我发现没有一种方法对我有效。
对于连接到服务器,我使用TCP 'net'库的nodejs.
会很感激任何帮助。

nue99wik

nue99wik1#

在客户端(Java),你需要把密钥转换成一个可传输的字符串。我建议如下:

String serialisedPublicKey = publicKey.getModulus().toString() + "|" +
    publicKey.getPublicExponent().toString();

使用node-rsa将其转换回js的公钥:

const parts = serialisedPublicKey.split(‘|’);
   

   const publicKey = key.importKey({
    n: +parts[0],
    e: +parts[1]
}, 'components-public');

我会通过在Java端创建一个http客户端,在nodejs端创建一个http服务器(例如express)来传输。

相关问题