我使用的其中一个库要求您在使用它时传递一个 API 密钥,该密钥是为您的帐户唯一生成的,并且必须保持完全私密和安全。
如果我将密钥放入我的应用程序中,private const string API_KEY = "ABC";
那么有人可能会反编译我的代码并查看密钥。
一般的 .NET 混淆(例如来自免费混淆工具)是否足以掩盖这一点,还是有更好的方法来尝试阻止窥探者获取原始 API 密钥?
我使用的其中一个库要求您在使用它时传递一个 API 密钥,该密钥是为您的帐户唯一生成的,并且必须保持完全私密和安全。
如果我将密钥放入我的应用程序中,private const string API_KEY = "ABC";
那么有人可能会反编译我的代码并查看密钥。
一般的 .NET 混淆(例如来自免费混淆工具)是否足以掩盖这一点,还是有更好的方法来尝试阻止窥探者获取原始 API 密钥?
您可以在 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();
}
这可以在首次应用安装或加载时触发。