gpt4 book ai didi

c# - 使用 ECDiffieHellman 或不使用下一代密码术 (CNG)

转载 作者:行者123 更新时间:2023-11-30 23:17:40 25 4
gpt4 key购买 nike

我试图弄清楚 ECDiffieHellman 在 .Net 下是如何工作的。

我想知道,为什么 ECDiffieHellman 有两个看起来非常相似的实现。
Cng 代表 Cryptography Next Generation (CNG),它应该是更好的,还是不是?

为什么会出现这种二元论?使用哪一个?

System.Security.Cryptography.ECDiffieHellman.Create()

var alice = ECDiffieHellman.Create();
var bob = ECDiffieHellman.Create();

Assert.That(alice.PublicKey.ToXmlString(),
Is.Not.EqualTo(bob.PublicKey.ToXmlString()));

var aliceSharedSecret = alice.DeriveKeyMaterial(bob.PublicKey);
var bobSharedSecret = bob.DeriveKeyMaterial(alice.PublicKey);

Assert.That(aliceSharedSecret, Is.EqualTo(bobSharedSecret));

新的 System.Security.Cryptography.ECDiffieHellmanCng()

var alice = new ECDiffieHellmanCng();
var bob = new ECDiffieHellmanCng();

Assert.That(alice.PublicKey.ToXmlString(),
Is.Not.EqualTo(bob.PublicKey.ToXmlString()));

var aliceSharedSecret = alice.DeriveKeyMaterial(bob.PublicKey);
var bobSharedSecret = bob.DeriveKeyMaterial(alice.PublicKey);

Assert.That(aliceSharedSecret, Is.EqualTo(bobSharedSecret));

最佳答案

ECDiffieHellman是一个抽象基类,ECDiffieHellmanCng是一个完整的实现类型,基于Windows CNG。

ECDiffieHellman.Create(),默认返回一个 ECDiffieHellmanCng 实例。

不幸的是,DeriveKeyMaterial 方法采用额外的参数,这些参数作为 ECDiffieHellmanCng 上的属性公开。这在 .NET Framework 4.6.2 中得到解决,在 ECDiffieHellman 类上创建了多个仅使用参数(无属性)的 DeriveKey* 方法。

关于c# - 使用 ECDiffieHellman 或不使用下一代密码术 (CNG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41303777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com