存储敏感硬编码值的理想方法

时间:2013-01-30 08:23:56

标签: c# wpf oauth

我的应用程序需要使用特定的消费者密钥和固定价值的消费者秘密发布到Twitter。

我无法确定在我的应用程序中安全存储这些值的最佳方法(用户不应该使用其他Twitter应用程序 - 仅限我的)。

以下是我尝试过的一些事情:

场景1:存储在App.Settings

失败 - App.Settings最初未加密。

场景2:存储为硬编码值并使用Dotfuscator

失败 - 模糊后,变量在反射器中清晰可见。

场景3:加密并存储为硬编码值。

失败 - 虽然这会通过方案1,但密钥本身将被硬编码(以确保它生成正确的解密值),并且对于方案2是可见的。

我遇到的主要问题是,为了让Twitter识别我的消费者密钥/秘密,他们需要解密,但我不希望在应用程序本身中明确设置此值。

对我来说,最好的解决方法是什么?

2 个答案:

答案 0 :(得分:1)

正如Stephen C.提到How do I protect OAuth keys from a user decompiling my project?的答案一样,你无能为力。

我最好的选择是尽可能地让它变得更加坚硬,但要意识到它永远不会真正安全。

答案 1 :(得分:-1)

  

App.Settings最初未加密

您可以使用ProtectedData类加密/解密此类数据,并将加密值存储在.settings中:

    public static String Encrypt(this String unSecuredString)
    {
        if (String.IsNullOrEmpty(unSecuredString))
            return unSecuredString;

        var decryptedData = Encoding.UTF8.GetBytes(unSecuredString);
        var encryptedData = ProtectedData.Protect(decryptedData, null, DataProtectionScope.CurrentUser);

        return Convert.ToBase64String(encryptedData);
    }

    public static String Decrypt(this String securedString)
    {
        if (String.IsNullOrEmpty(securedString))
            return securedString;

        var encryptedData = Convert.FromBase64String(securedString);
        var decryptedData = ProtectedData.Unprotect(encryptedData, null, DataProtectionScope.CurrentUser);

        return Encoding.UTF8.GetString(decryptedData);
    }