我正在我的客户端和服务器之间实现密钥交换机制。 客户端是用C#编写的,服务器是用Java编写的。
在客户端上,我使用以下代码生成我的公钥
aliceKey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP521);
alicePubKeyBlob = aliceKey.Export(CngKeyBlobFormat.EccPublicBlob);
alicePubKeyBlob
的大小为140字节。
然而,在服务器端,密钥大小为P-521curve
(使用充气城堡)的66字节
如果我尝试在客户端导入服务器密钥,我会收到一条消息"Parameter is incorrect"
有什么东西我错过了吗?
答案 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的填充。