如何在我的.NET程序集中保护无法通过反编译提取的私有字符串(如API密钥)?

时间:2012-09-19 09:09:52

标签: .net obfuscation

我使用的其中一个库要求您在使用为您的帐户唯一生成的API密钥时传递它,并且必须保持完全私密且安全。

如果我将密钥作为private const string API_KEY = "ABC";放入我的应用程序,那么有人可能会反编译我的代码并查看密钥。

一般的.NET混淆(例如来自免费的混淆工具)是否足以掩盖这一点,或者是否有更好的方法来尝试阻止snoopers获取原始API密钥?

1 个答案:

答案 0 :(得分:1)

您可以在app.config文件中使用自定义部分(很好的选择)。用您的数据(密钥)填充它,然后加密配置文件。这是样本:

            //loading config file...
            config = ConfigurationManager.OpenExeConfiguration("AvtoNetPublisher.exe");
            //getting specific section (in this case custom class)
            csp = (GmailSettingsProvider)config.GetSection("gsp");
            if (!csp.SectionInformation.IsProtected)
            {
                DialogResult result = MessageBox.Show("Configuration is not protected, proceed to enter configuration!", "Configuration is not protected", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                if (result != DialogResult.OK)
                {
                    throw new Exception("Configuration was interupted by user!");
                }
                csp.UserName = Microsoft.VisualBasic.Interaction.InputBox("Enter user name", "UserName", csp.UserName, Cursor.Position.X, Cursor.Position.Y);
                csp.Password = Microsoft.VisualBasic.Interaction.InputBox("Enter password", "Password", csp.Password, Cursor.Position.X, Cursor.Position.Y);
                csp.ImapServer = Microsoft.VisualBasic.Interaction.InputBox("Enter ImapServer", "ImapServer", csp.ImapServer, Cursor.Position.X, Cursor.Position.Y);
                csp.Port = Convert.ToInt16(Microsoft.VisualBasic.Interaction.InputBox("Enter int32 Port", "Port", csp.Port.ToString(), Cursor.Position.X, Cursor.Position.Y));
                csp.EnableSSL = Convert.ToBoolean(Microsoft.VisualBasic.Interaction.InputBox("Enter bool EnableSSL", "EnableSSL", csp.EnableSSL.ToString(), Cursor.Position.X, Cursor.Position.Y));
                csp.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
                config.Save();
            }

这可以在首次安装或加载时触发。