C#中的1024位Diffie-Hellman

Ger*_*ald 5 c# bouncycastle diffie-hellman

所以我正在开发一个项目,将C#客户端与现有的服务器技术连接起来.其中一个要求是使用Diffie-Hellman进行密钥交换.

我们已知公共P和G,我需要生成一个1024位的公钥才能发送到服务器.

以下是在C++中使用OpenSSL在服务器端使用的.目前我在通过P/Invoke调用的本机DLL中使用相同的代码,它也可以工作.如果可能的话,我宁愿消除本机DLL依赖.

char publicKey[128];
char P[128]; //this is set to a static 128-byte value, omitting for brevity
unsigned long G = 2;

DH* dh = DH_new();
dh->p = BN_new();
dh->g = BN_new();

BN_set_word(dh->g, G);
BN_bin2bn(P, 128, dh->p);
if(DH_generate_key(dh))
{
   BN_bn2bin(dh->pub_key, publicKey);
}
Run Code Online (Sandbox Code Playgroud)

这会生成一个1024位的公钥.

我已经尝试过在BouncyCastle中使用DH类,但无论出于什么原因我无法给它一个1024位密钥,它想给我一个960位密钥.可能是因为我真的不知道自己在做什么.我找不到关于如何使用类的实际解释方式.

是否可以使用BouncyCastle DH类与上面发布的OpenSSL DH代码一样工作?如果没有,是否有另一个更好的C#实现?

ntz*_*lis 3

这是一个工作代码示例 + CodeProject 上的文章,评级非常好:

http://www.codeproject.com/Articles/24632/Shared-Key-Generation-using-Diffie-Hellman