Javascript 使用不同长度的公钥进行ECDH密钥交换?

Javascript 使用不同长度的公钥进行ECDH密钥交换?,javascript,cryptography,elliptic-curve,diffie-hellman,Javascript,Cryptography,Elliptic Curve,Diffie Hellman,我目前正在进行ECDH密钥交换实现。我用的是P-384曲线。其他曲线也是可能的,但我认为实现应该非常相似 客户端(Javascript)和服务器(Java)希望找到一个共享的秘密,因此 1) 服务器创建公钥和私钥 2) 服务器将公钥发送到客户端。 注意:公钥长度120字节 3) 客户端创建私钥和公钥。 注意:公钥长度为97字节,私钥长度为48字节 4) 客户端尝试计算共享机密。但是,我得到了一个“错误的参数”错误 在客户端,我使用带有e2e包的Google闭包库。() 对于实现,我查看了ecdh

我目前正在进行ECDH密钥交换实现。我用的是P-384曲线。其他曲线也是可能的,但我认为实现应该非常相似

客户端(Javascript)和服务器(Java)希望找到一个共享的秘密,因此

1) 服务器创建公钥和私钥

2) 服务器将公钥发送到客户端。 注意:公钥长度120字节

3) 客户端创建私钥和公钥。 注意:公钥长度为97字节,私钥长度为48字节

4) 客户端尝试计算共享机密。但是,我得到了一个“错误的参数”错误

在客户端,我使用带有e2e包的Google闭包库。()

对于实现,我查看了ecdh.js和ecdh_test.html文件

我在客户端的实现如下所示:

var serverPublicKeyStringAsHex = "3076301006072a8648ce3d020106052b8104....." //*
var serverPublicKey = goog.crypt.hexToByteArray(serverPublicKeyStringAsHex)
var bobKeyPair = e2e.ecc.Protocol.generateKeyPair("P_384"); 
var bobECDH = new e2e.ecc.Ecdh("P_384");
var bobMessage = bobECDH.bob(serverPublicKey, bobKeyPair['privKey']);
如前所述,我在控制台中得到一个“错误参数”错误。 更详细的信息:

我想知道是否因为服务器公钥的长度错误而出现此错误?如果这就是原因,那么我的实现中可能存在什么问题?我在服务器端使用相同的EC

通过这个问题,我发现键有未压缩和压缩表示。但是,我不认为这可能是我的问题,因为密钥长度(服务器公钥:120字节,客户端公钥:97字节)与所描述的模式不匹配(字段大小+1与2*字段大小+1)

谢谢你的帮助,因为我在这个问题上花了这么多时间,不知道下一步该怎么办

*如果有必要知道,这是完整的公钥: 3076301006072A8648CE3D0200106052B8104002203620004F87DC79943B20E0F57D61F8B7D02425BAA4D12200B8B8C1E3596F5AB49AE6AD2ACFFAD95E586031821B4AEDEFE5CF1D0262563CFDC8DBE4F28973EBEBF3985BA50C7B275888934DCD607C288A5AF196834393CD7F01C548E5EDCA0B您这里的是一个(可能与X9.42兼容)。我假设JavaScript只需要其中编码的未压缩点。因此,您需要解析ASN.1并检索公钥中偏移量23(十进制)处的未压缩点