C# 存储敏感硬编码值的理想方法
我的应用程序需要使用特定的消费者密钥和固定值的消费者秘密发布到Twitter 我很难确定在我的应用程序中安全地存储这些值的最佳方式(用户不应该使用另一个Twitter应用程序,只能使用我的) 以下是我已经尝试过的几件事: 场景1:应用内存储设置 失败-应用程序。设置最初未加密 场景2:存储为硬编码值并使用Dotfuscator 失败-模糊处理后,变量在反射器中清晰可见 场景3:加密并存储为硬编码值 失败-在通过方案1时,密钥本身将被硬编码(以确保它生成正确的解密值),并且在方案2中可见 我面临的主要问题是,为了让Twitter识别我的消费者密钥/秘密,需要对它们进行解密,但是我不希望在应用程序本身中明确设置该值 我解决这个问题的最好办法是什么 应用程序设置最初未加密 您可以使用类对此类数据进行加密/解密,并将加密值存储在C# 存储敏感硬编码值的理想方法,c#,wpf,oauth,C#,Wpf,Oauth,我的应用程序需要使用特定的消费者密钥和固定值的消费者秘密发布到Twitter 我很难确定在我的应用程序中安全地存储这些值的最佳方式(用户不应该使用另一个Twitter应用程序,只能使用我的) 以下是我已经尝试过的几件事: 场景1:应用内存储设置 失败-应用程序。设置最初未加密 场景2:存储为硬编码值并使用Dotfuscator 失败-模糊处理后,变量在反射器中清晰可见 场景3:加密并存储为硬编码值 失败-在通过方案1时,密钥本身将被硬编码(以确保它生成正确的解密值),并且在方案2中可见 我面临的
中。设置:
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);
}
正如Stephen C.在回答问题时提到的,你无能为力
我最好的办法是尽可能地让它变得困难,但要知道它从来都不是真正安全的。请参阅[如何保护OAuth密钥不被用户反编译我的项目?][1]。稍有不同的问题,相同的解决方案(实际上没有)。[1] :@Jobo你能把这个作为答案吗?我觉得实际上我无能为力,而你的链接问题似乎恰到好处。问题是,首先必须将不安全的字符串传递给此函数。@JamieKeeling:你说得对,但这取决于你从哪里收到这个不安全的字符串。例如,如果您从web服务器接收到它,或者用户输入它,这不是问题。这些值由我提供(例如,我已经创建了一个Twitter应用程序来处理发布消息),因此不会出现用户输入。此外,如果我从web服务器接收到它,那么它必须是未加密的(并且可以通过fiddler检测到),因为我无法在我的应用程序中解密它。@JamieKeeling:>并且可以通过fiddler检测到-此外,如果你要解密某个东西,可以通过转储进程内存轻松获得它。所以,最好的保护是根本不解密任何东西。它适合你吗?:)我正在使用SecureString来尝试降低这种风险