.net – 将基于ECC的证书从Windows证书存储导入CngKey
如何从基于ECC的X509Certificate2中获取公钥/私钥到CngKey用于ECDsaCng和ECDiffieHellmanCng?
我正在使用RSA 2048位密钥对来签名/加密东西.我正在通过从X509Store的证书中提取证件,在那里他们被安全地存储,标有不可导出的私钥.我想将当前的实现转换为使用ECDSA和ECDH,以便我可以使用较小的密钥大小来保证相同的安全性. 我已经使用openssl成功生成了ECC证书: > openssl ecparam -out private.pem -name prime256v1 -genkey 我已经成功地将上述生成的证书安装到证书库.我可以通过指纹检索,但私钥和公钥的加密提供者抛出“不支持算法”异常.相反,我明白我应该使用ECDsaCng和ECDiffieHellmanCng来签名/加密.但这些在CngKey的交易. Bouncy Castle不是一个选择,因为它需要私钥才能导出. CLR Security将通过GetCngPrivateKey给我一个CngKey对,但不能与ECDsa一起使用,因为CLRSecurity返回的密钥是ECDH密钥.此外,CLR Security还没有给我一种从X509Certificate2获取公开密钥进行签名验证的方法(我甚至没有或需要签名者的私钥). 有任何想法吗?我在我的智慧结束…任何帮助将不胜感激.
您需要从证书的公钥创建CngKey:
CngKey包含8个附加字节,前4个字节用于所使用曲线的名称(ECS1,ECS3或ECS5),最后4个是包含的长度.填充(32,48或66). 来自证书的公钥的第一个字节被删除(因为对于ECDSA公钥来说,它总是0x04). 因此,例如对于使用P-256曲线和SHA-256散列算法的ECDSA,您将获得长度为65字节的公钥.丢弃第一个字节,留下64个字节,然后前缀为4个字节为曲线,4个字节为密钥长度,即(Encoding.ASCII):
现在你有公共密钥(72字节)创建CngKey从:
你可以验证签名:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-server-2008 – “右键单击文件”会更新其上次访问
- win10系统电脑无法识别u盘的解决办法
- Windows Phone 7 – WP7应用程序版本
- windows cmd管道即使用/ U开关也不是unicode
- windows-server-2003 – IIS应用程序池无法响应ping
- .net – UISpy.exe和Inspect.exe有什么区别? (来自Microso
- windows – 什么是WinHttpAutoProxySvc?
- windows – Emacs非常缓慢地创建缓冲区
- 【Jmeter】Address already in use : connect &&P
- 用键盘上的按钮显示UIView,比如Skype,Viber messengers(Swi