C# 具有.cer公钥的3DES?

C# 具有.cer公钥的3DES?,c#,encryption,C#,Encryption,我不是密码专家,但据我所知,3DES是一种对称加密算法,这意味着它不使用公钥/私钥 然而,我的任务是使用公钥(特别是.CER文件)加密数据。 如果忽略整个对称/非对称thang,我应该能够使用公钥中的密钥数据作为三重密钥。 但是,我很难从.CER文件中提取密钥字节。 这就是目前的代码 TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider(); X509Certificate2 cert

我不是密码专家,但据我所知,3DES是一种对称加密算法,这意味着它不使用公钥/私钥

然而,我的任务是使用公钥(特别是.CER文件)加密数据。 如果忽略整个对称/非对称thang,我应该能够使用公钥中的密钥数据作为三重密钥。 但是,我很难从.CER文件中提取密钥字节。 这就是目前的代码

TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
X509Certificate2 cert = new X509Certificate2(@"c:\temp\whatever.cer");
cryptoProvider.Key = cert.PublicKey.Key.
我能找到的从证书中提取原始密钥字节的最简单方法是ToXmlString(bool),然后对返回的字符串执行一些hacky substring。 然而,这似乎太老套了,我觉得我一定错过了一个更简单、更明显的方法


我是否缺少一种更简单的方法来使用.cer文件向C#3DES加密类提供密钥数据,还是将其从证书xml字符串中破解出来才是最好的方法?

cryptoProvider.key=cert.GetPublicKey()?

我认为您缺少的是从包含密钥字节的字符串中转换字节

希望方法能帮助您:

byte[] keyBytes = Convert.FromBase64String(sourceString);

使用非对称加密技术对大量数据进行加密不是一条可行之路。相反,使用对称算法加密数据,并使用公钥加密对称密钥(和IV)


来自MSDN的消息确实帮助我开始使用.Net对称加密技术。

在对称加密中使用为非对称加密生成的密钥不是一个好主意。没有什么能阻止你想出一种使用公钥作为3DES加密密钥的方法,但最终的结果是,任何有权访问公钥的人(这意味着每个人!)都可以解密你的密文。

这里真正的问题是,公钥是公开的。这意味着免费提供,意味着它提供零加密安全性

见鬼,这个线程上的任何人都拥有解密所有内容所需的所有信息。谷歌人也是如此

请尽量鼓励您的用户不要像那样使用公钥数据。至少,让他们给你一个密码或者其他稍微安全一点的区块,你可以用它来生成一个一致的密钥


还有一件事。证书密钥大小不同。它可能可以处理在键中丢弃额外字节的问题,但是如果该键恰好短于3DES键所需的长度,则可能会出现数组索引/越界异常。我怀疑这会发生,3DES只需要56位,而且证书密钥几乎总是256位或更大。

最好弄清楚他们到底想要什么,因为要求使用对称算法的公钥密码显然不是吗?我不知道你的情况,阿拉奇尼德,但根据我的经验,这样做更容易。提问者似乎很清楚这里的不兼容性,所以为什么不让他做他被要求做的事情呢?@Alex:因为,正如Alexander所指出的,这几乎肯定会导致一个不安全的实现,无法完成真正想要的。我意识到这一点,但这似乎是客户想要的。我会和他们确认一下,并指出问题所在,但如果这真的是他们的标准,那就这样吧。希望不是这样,而且规范是错误的/缺乏的……我怀疑他们真正想要的是在非对称加密方案(如RSA)中包装(使用IV?)的3DES加密消息。如中所示,msg->3DES->enc msg+IV->RSA->msgToDeliver。那会更有意义,对吧?