Rijndael 的商店 IV 和钥匙

发布于 2024-09-06 20:59:02 字数 106 浏览 3 评论 0原文

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

I need to store username and password in an app.config. I want to encrypt these values using Rijndael algorithm. Where do I store the key and IV for decrypting the un and pw? I need to deploy the application to different servers with different users.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

苏大泽ㄣ 2024-09-13 20:59:02

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

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

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

Encrypting the web.config or app.config file is usually done with RSA or DPAPI encryption.

I'm not sure if it would suit you in your case, it's only effective if the users of the applications are restricted and not administrators.

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

她比我温柔 2024-09-13 20:59:02

绝对不要存储在程序集中 - 相对简单地查看 IL 可能会泄露秘密。即使对其进行混淆,也无法提供额外的安全性。

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

Definitely don't store in the assembly - a relatively simple look at the IL would probably give up the secret. Even obsfuciating it, would provide little extra security.

Easiest would be to use the OS \ file-system security locally on the different servers to control read access to the key file.

剪不断理还乱 2024-09-13 20:59:02

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

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

  • C:\MyApp 作为密钥和其他私有信息
  • C:\MyApp\www 作为虚拟

目录将防止窥探(或网络服务器错误)访问数据。只有对机器进行物理访问才有可能泄露它,并且通常可以更好地控制。

Ideally on a text file in a location not accessible via web, only via the local filesystem with tight permissions.

If you need to distribute the app, you could use the following structure

  • C:\MyApp for the key and other private information
  • C:\MyApp\www for the virtual directory

This will prevent prying eyes (or webserver bugs) to access the data. Only physical access to the machine will potentially reveal it, and that usually can be better controlled.

梦醒灬来后我 2024-09-13 20:59:02

使用机器密钥加密来做到这一点怎么样? (据我所知)没有简单的方法可以做到这一点,但是您可以使用反射侵入框架。机器密钥没有或仅部分存储在机器上。如果将 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);
}

How about using machine key encryption to do it? There is (as far as I know) no easy way of doing this, but you can hack your way into the framework using reflection. The machine key is either not or only partially stored on a machine. If you configure ASP.NET to 'Generate a unique key for each application', the application's path is used to derive the key.

The code would be something like this:

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文