我使用CryptoStream类来加密文本。如果我想解密它,我必须知道密钥和静脉注射,这样我才能恢复原始文本,但是我在哪里保存它们,以便它们不会被盗?
使用诸如作弊引擎之类的工具,您可以从其他程序的RAM中读取值,当我将键/ iv保存在变量中时,您也可以读取它们。 有办法防止这种情况吗? 有没有办法立即在SecureString中保存解密的文本?所以它永远不会保存为普通字符串?
(我对c#的安全性一无所知。如果有人可以推荐速成课程或书籍,我将不胜感激!)
答案 0 :(得分:1)
您可以使用像Dotfuscator http://www.preemptive.com/products/dotfuscator/overview这样的工具来混淆您的源代码(Visual Studio中包含免费版本,但您需要专业版来加密字符串)。这将防止恶意用户反编译您的代码并查看密钥/ iv。
另一种选择是使用此处显示的.NET DPAPI http://weblogs.asp.net/jongalloway/encrypting-passwords-in-a-net-app-config-file。如果您使用此系统,则需要确保将密钥/ iv置于app.config文件中并在部署构建之前进行加密。
据我所知,没有办法防止未加密的值被读入内存,毕竟,程序需要将这些值发送到处理器。
MSDN为安全开发实践提供了良好的速成课程,可帮助您入门:http://msdn.microsoft.com/en-us/security/aa570401.aspx