【问题标题】:1024-bit Diffie-Hellman in C#C# 中的 1024 位 Diffie-Hellman
【发布时间】:2014-01-15 20:44:20
【问题描述】:

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

我们已经知道公共 P 和 G,我需要生成一个 1024 位的公共密钥发送到服务器。

以下内容在带有 OpenSSL 的 C++ 中的服务器端使用。目前,我在通过 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);
}

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

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

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

【问题讨论】:

    标签: c# bouncycastle diffie-hellman


    【解决方案1】:

    这是 CodeProject 上的一个工作代码示例 + 文章,评分很高:

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

    【讨论】:

    • 我之前发现了那篇文章,但它没有提供设置 P 和 G 参数的方法,它只使用随机生成的素数。但是我又看了一遍,看起来修改它可能不会太难。我会试一试的。
    • 事实证明,那篇文章中的代码非常简单,我实际上能够理解 Diffie-Hellman 的过程——这比我意识到的要简单得多——而且我能够自己动手效果很好。所以我会接受答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多