2010-06-27 139 views
0

我需要在app.config中存储用户名和密码。我想用Rijndael算法加密这些值。我在哪里存储密钥和IV来解密un和pw?我需要将应用程序部署到具有不同用户的不同服务器上。Rijndael商店IV和密钥

+0

@IUnknownPointer:真的吗?像什么? – 2010-06-28 11:15:51

回答

1

加密web.config或app.config文件通常使用RSA或DPAPI加密完成。

我不确定它是否适合您的情况,只有在应用程序的用户受到限制而不是管理员的情况下才有效。

http://msdn.microsoft.com/en-us/library/ff647398.aspx

+0

DPAPI可能是不使用硬件设备即可完成的最佳选择。 RSA不会帮忙。 – 2010-06-28 11:19:21

+0

您可以在多台服务器上使用RSA加密,因为该密钥可以导出,但在我看来这不是一个好的解决方案。 – 2010-06-28 13:37:13

0

当然不会存储在程序集中 - 一个相对简单的IL看起来可能会放弃这个秘密。即使模糊它,也不会提供额外的安全性。

最简单的就是在不同的服务器上本地使用OS \文件系统安全来控制对密钥文件的读取访问。

0

理想情况下,无法通过网络访问的位置中的文本文件上,只能通过具有严格权限的本地文件系统访问。

如果您需要分发应用程序,你可以使用下面的结构

  • C:\MyApp密钥和其他私人信息
  • C:\MyApp\www虚拟目录

这将防止窥视眼睛(或网络服务器错误)访问数据。只有物理访问机器才有可能揭示它,而且通常可以更好地控制。

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); 
} 
相关问题