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

本文关键字:曲线 P521 公钥 长度 blob 加密 | 更新日期: 2023-09-27 18:17:23

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

在客户机上,我使用以下代码生成我的公钥
aliceKey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP521); 
alicePubKeyBlob = aliceKey.Export(CngKeyBlobFormat.EccPublicBlob);

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

如果我尝试在客户端导入服务器密钥,我得到一个异常的消息"Parameter is incorrect"

我错过了什么吗?

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

我找到问题了。

参考: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 &Y每个66字节。如果长度小于66字节,则确保为X & & Y添加0x00的填充。