使用c#中的椭圆曲线加密(P521曲线)的公钥blob长度

时间:2013-06-07 03:47:02

标签: c#

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

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

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

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

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

的异常

有什么东西我错过了吗?

1 个答案:

答案 0 :(得分: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。

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