代码之家  ›  专栏  ›  技术社区  ›  crauscher

储存IV和Rijndael的钥匙

  •  0
  • crauscher  · 技术社区  · 14 年前

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

    4 回复  |  直到 14 年前
        1
  •  1
  •   Damien Dennehy    14 年前

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

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

        2
  •  0
  •   cristobalito    14 年前

    绝对不要存储在程序集中-一个相对简单的IL可能会放弃这个秘密。即使破坏它,也不会提供额外的安全。

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

        3
  •  0
  •   Vinko Vrsalovic    14 年前

    理想情况下,在文本文件中的位置不能通过web访问,只能通过具有严格权限的本地文件系统访问。

    • C:\MyApp 密钥和其他私人信息
    • C:\MyApp\www

        4
  •  0
  •   ErikHeemskerk    14 年前

    代码如下:

    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);
    }