【发布时间】:2010-09-14 15:54:49
【问题描述】:
我正在寻找一种在 Visual Studio 项目(C# 中)中加密和解密字符串的安全方法。我发现有原生的 DES 类,但不够安全。你有什么建议吗?
更新: 好的,那么问题是:什么是最安全的加密/解密字符串的方法而没有太多麻烦(也就是必须安装外部工具等。虽然外部库很好)。以及将秘密“密钥”放在哪里(在代码中编译值是否足够安全?)。
更新 #2 如果我使用类似这样的代码将加密字符串保存在配置文件中:
using System.Security.Cryptography;
using System.Security;
byte[] encrypted = ProtectedData.Protect(StrToByteArray("my secret text"), null, DataProtectionScope.LocalMachine);
byte[] derypted = ProtectedData.Unprotect(encrypted , null, DataProtectionScope.LocalMachine);
这足够安全吗?我猜想使用“LocalMachine”参数而不是“User”参数,有人可以在.net 中编写一个应用程序,将它放在机器上并执行它来解密加密的字符串。所以如果我想让它更安全,我必须为每个用户设置一个不同的配置文件?我理解正确吗?
【问题讨论】:
-
在这一点上,DES 还不够安全,无法阻止我的小妹妹。
-
什么 dtb 说的。另外,当您找到 DES 类时,您没有注意到这里的 AES、RSA、Rijndael 类 msdn.microsoft.com/en-us/library/…?
-
DES、TripleDES、AES、Rijndael 等对称加密算法的“安全性”主要取决于破解它们所需的时间。 AES 在这方面优于 DES。但弱点通常在其他地方,例如保护对称密钥、选择正确的填充或防止social engineering。攻击者倾向于攻击最薄弱的地方,而不是你最关注的地方。
-
@erickson:我的观点是:如果您按照解密方法发送对称密钥,我可以立即“破解”DES 和 AES。实际上,启动 Reflector 并找到密钥比解密秘密数据需要更多的时间。
-
@dtb - 对。但我的观点是,如果你正确实现了你的协议但选择了 DES,你就完蛋了,而如果你选择了 AES 之类的东西,你就安全了。
标签: c# .net encryption