我需要使用C#创建一个自签名证书(用于本地加密 - 它不用于保护通信).
我已经看到一些使用P/Invoke和Crypt32.dll的实现,但是它们很复杂并且很难更新参数 - 我还想尽可能避免P/Invoke.
我不需要跨平台的东西 - 只在Windows上运行对我来说已经足够了.
理想情况下,结果将是一个X509Certificate2对象,我可以使用该对象插入Windows证书存储区或导出到PFX文件.
我正在尝试从ECDiffieHellmanCng对象的新实例导出密钥,以便稍后可以使用相同的密钥创建它的实例.但是我在尝试导出它时遇到错误.
//Create new ECDiffieHellmanCng which automatically creates new keys
var ecdh = new ECDiffieHellmanCng();
//Export the keys
var privateKey = ecdh.Key.Export(CngKeyBlobFormat.EccPrivateBlob);
Run Code Online (Sandbox Code Playgroud)
当我使用消息" 不支持请求的操作 " 调用Export方法时,我收到CryptographicException .在代码中放入一些断点之后,它甚至在执行方法之前抛出了异常.查看Export方法的定义,它使用SecuritySafeCriticalAttribute进行装饰,因此我怀疑此属性实际上是在抛出异常.导致此异常的原因是什么?如何保存密钥以便以后可以创建相同ECDiffieHellmanCng对象的实例?