使用.net中的app公钥/私钥加密

时间:2010-02-03 22:41:28

标签: c# .net security encryption backup

-new-我发现了另一种用途。有些数据是通过HTTPS POST数据提交给我的,我想将它存储在我的数据库中(例如客户支持可能需要稍后阅读的母系名称,而不是拼写错误地检查哈希是否匹配)。我只需要加密的部分而不是整个数据库,并且使用单独的数据库可能不值得。 问题:如何使用预制公钥使用.NET加密对称密钥+文本?(其余用于上下文,我只想要答案plz)

-edit-之前我做过对称加密。 如何使用公钥加密对称密钥?如果您可以告诉我如何在单独的应用程序中生成公钥/私钥,那么我可以创建它们并仅存储公众键入我的应用程序。

我正在考虑从更繁忙的网站自动减少压力较小的网站抓取备份。传输数据不是问题,因为我可以使用https但我不完全相信我的便宜的网站是安全的或不会有人环顾我的文件。我主要想保护电子邮件地址和PM,如果我在网站上有它们。

所以我想知道如何在我的应用程序中使用公钥或私钥来加密数据,这样只有我(或者我提供密钥的任何人)才能解密备份。我如何在.NET中执行此操作。登录和传输我可以在几分钟内写,但如何在写入时加密流?

-edit-它只是打击了我。用户/通行证不是秘密。所以我必须在传输之前加密我的备份。如何使用.NET使用公钥加密对称密钥。然后在我身边解密它。使用对称密钥加密文件我知道该怎么做。

3 个答案:

答案 0 :(得分:14)

首先:深度防守。如果您担心备份站点的安全性保护备份站点。通过加密缓解攻击是一个好主意,但它不应该只是 的想法。

其次,您为什么要考虑使用公钥/私钥加密?通常,在尝试将消息从发件人传递给收件人时,您只使用公钥/私钥加密。公钥加密对您的场景有什么价值?

要在C#中加密流,此页面可能有所帮助:

http://support.microsoft.com/kb/307010

更新:

当然,是的,您必须在文件加密到您认为已被盗用的网站之前对其进行加密。

您认为该网站可能不安全。你应该做的假设是网站是你的敌人,并试图伤害你。像攻击者想的那样开始思考。你的敌人会做什么?如果我是你的敌人,你递给我一堆文件代表你存储,我可能会:

  • 删除文件
  • 损坏了您的文件
  • 阅读您的文件
  • 记录进入或出去进行分析的每个字节
  • 用恶意文件替换你的文件 - 特别是你存储在这个网站上的所有可执行代码,脚本等等,你应该假设它们充满了专门针对你的病毒
  • 做些让你陷入困境的东西 - 伪造看起来像是来自你的消息,等等

假设不安全的备份站点操作员正在尝试对您执行所有这些操作。加密可以缓解一些攻击,但不是全部攻击。

没有冒犯,但很明显,你不了解加密来解决这个问题,并且有任何合理的机会让它对抗真正的攻击者。这没什么好羞耻的; 我也没有这方面的知识。相反,我有足够的知识知道这个问题超出了我的范围。尝试更多地了解加密是没有错的;我强烈鼓励。但是如果你有一个真正的威胁,并且你正试图用专业级的加密工具来缓解它,那么就不会推出自己的解决方案。聘请这个领域的专家顾问,他可以就你所面临的现实威胁给出正确的建议。

答案 1 :(得分:1)

使用对称密钥加密,然后使用公钥加密对称密钥,然后删除对称密钥。只有相应私钥(您)的所有者才能解密对称密钥,从而解密文档。应用程序中没有存储任何秘密。好消息是,只有大约一吨的开箱即用产品(pgp)和协议(s-mime)才能解决这个问题。

答案 2 :(得分:1)

您可以使用对称密钥算法(AES,DES,Triple-DES)对代码执行加密,并将其以十六进制形式存储在数据库中(在nvarchar字段中)。因为,你需要以加密的形式将其转移给其他人,你不需要使用任何不对称算法(如RSA,ElGamal等)。如果像RSA这样的东西,你还必须考虑使用类似PGP的数据进行数据签名

但是,无论您使用哪种算法,都需要确保密钥尽可能安全,即AES的对称密钥和RSA的私钥等。

本文提供了有关如何使用/不使用Salt执行对称加密的教程。

http://www.obviex.com/samples/Encryption.aspx