1

我正在我的客户端和服务器之间实现密钥交换机制。客户端使用 C# 编写,服务器使用 Java。

在客户端上,我使用以下代码生成我的公钥

aliceKey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP521); 
alicePubKeyBlob = aliceKey.Export(CngKeyBlobFormat.EccPublicBlob);

的大小alicePubKeyBlob为 140 字节。但是在服务器端,密钥大小为 66 字节P-521curve(使用充气城堡)

如果我尝试在客户端中导入服务器密钥,我会收到一条异常消息"Parameter is incorrect"

有什么我错过的吗?

4

1 回答 1

1

我弄清楚了这个问题。

参考: http: //msdn.microsoft.com/en-us/library/windows/desktop/aa375520 (v=vs.85).aspx

140 字节是由于以下格式的公钥。4 字节:ECDHPublicP521 = 0x354B4345 的幻数 4 字节:X 和 Y 长度 = 42 00 00 00(42 = 66 字节长度)接下来的 66 字节是 X,接下来的 66 字节是 Y。

服务器生成每个 66 字节的 X 和 Y。如果长度小于 66 字节,请确保为 X 和 Y 添加 0x00 填充。

于 2013-06-07T06:16:42.870 回答