0

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

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

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

4

1 回答 1

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

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

于 2012-09-19T09:17:26.823 回答