我需要在app.config中存储用户名和密码。我想使用Rijndael算法加密这些值。我在哪里存储密钥和IV来解密un和pw?我需要将应用程序部署到具有不同用户的不同服务器。
答案 0 :(得分:1)
加密web.config或app.config文件通常使用RSA或DPAPI加密。
我不确定它是否适合您的情况,只有在应用程序的用户受到限制而非管理员的情况下才有效。
答案 1 :(得分:0)
绝对不要存放在程序集中 - 相对简单的看看IL可能会放弃这个秘密。即使是偶然的,也不会提供额外的安全保障。
最简单的方法是在不同服务器上本地使用OS \ file-system安全性来控制对密钥文件的读访问权。
答案 2 :(得分:0)
理想情况下,在无法通过网络访问的位置的文本文件中,只能通过具有严格权限的本地文件系统。
如果您需要分发应用,可以使用以下结构
C:\MyApp
获取密钥和其他私人信息C:\MyApp\www
用于虚拟目录这可以防止窥探(或网络服务器错误)访问数据。只有对机器的物理访问才有可能揭示它,并且通常可以更好地控制它。
答案 3 :(得分:0)
如何使用机器密钥加密来完成它?有(据我所知)没有简单的方法可以做到这一点,但你可以使用反射破解你的方式进入框架。机器键不是或仅部分存储在机器上。如果将ASP.NET配置为“为每个应用程序生成唯一键”,则应用程序的路径用于派生密钥。
代码将是这样的:
private static MethodInfo _cookieEncryptMethod;
private static MethodInfo _cookieDecryptMethod;
public static string MachineKeyEncrypt(string data)
{
if (_cookieEncryptMethod == null)
{
_cookieEncryptMethod = Type.GetType("System.Web.Security.CookieProtectionHelper").GetMethod("Encode", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
}
var dataBytes = Encoding.UTF8.GetBytes(data);
return (string) _cookieEncryptMethod.Invoke(null, new object[] { CookieProtection.All, dataBytes, dataBytes.Length });
}
public static string MachineKeyDecrypt(string source)
{
if (_cookieDecryptMethod == null)
{
_cookieDecryptMethod = Type.GetType("System.Web.Security.CookieProtectionHelper").GetMethod("Decode", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
}
var data = (byte[]) _cookieDecryptMethod.Invoke(null, new object[] { CookieProtection.All, source });
return Encoding.UTF8.GetString(data);
}