C# 在Windows Primation Foundation(WPF)应用中实现安全登录机制
我创建了一个小的WPF应用程序来执行一些操作。我想将此应用程序分发给一些人,但我希望它只能由授权人员访问。我真的不需要注册机制 因为应用程序非常小,并且将作为EXE文件交付,所以我认为拥有一个数据库不是一个有效的想法 我曾考虑在应用程序中创建一个包含授权人员凭据的文件,但据我所知,WPF应用程序可以很容易地进行反向工程。我将我的想法转变为让应用程序联系服务器来授权此人或其他人,但不确定这是否是一个好的选择C# 在Windows Primation Foundation(WPF)应用中实现安全登录机制,c#,wpf,authentication,login,C#,Wpf,Authentication,Login,我创建了一个小的WPF应用程序来执行一些操作。我想将此应用程序分发给一些人,但我希望它只能由授权人员访问。我真的不需要注册机制 因为应用程序非常小,并且将作为EXE文件交付,所以我认为拥有一个数据库不是一个有效的想法 我曾考虑在应用程序中创建一个包含授权人员凭据的文件,但据我所知,WPF应用程序可以很容易地进行反向工程。我将我的想法转变为让应用程序联系服务器来授权此人或其他人,但不确定这是否是一个好的选择 你能给我推荐一些阅读资料或最佳实践来学习吗?因为每当我搜索这个主题时,我都会得到一个实现U
你能给我推荐一些阅读资料或最佳实践来学习吗?因为每当我搜索这个主题时,我都会得到一个实现UI(这是我知道怎么做的)而不是登录机制的例子。MSDN的富客户端应用程序设计指南 读取安全注意事项、数据处理注意事项和数据 通路
撤销任何.Net应用程序都很容易,因此,拥有身份验证系统的目的是为了对付不懂反向编程的人,你可以使用使用Cpu Id的身份验证系统,比如我使用的witch,但任何像我说的.Net都是可逆的。 我会告诉你我的身份验证逻辑:
public static string GetId( )
{
string cpuInfo = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances( );
foreach (ManagementObject mo in moc)
{
if (cpuInfo == "")
{
//Get only the first CPU's ID
cpuInfo = mo.Properties["processorID"].Value.ToString( );
break;
}
}
return cpuInfo;
}
在您拥有cpu id后,请执行一些加密
Public static string Encrypt(string CpuId)
{ // do some encryption
retuen encryptionCpuId;
}
之后,在您的UI中创建一个对话框窗口,向用户显示其cpuID并将其发送给您,然后您将加密用户的cpuID并向其提供激活密钥,为此,您必须创建另一个项目以生成加密,并在您的应用程序(您要发布的应用程序)中检查:
所以每个用户都有自己的密钥
在所有这些之后,您必须知道,任何人都可以反映您的代码并破解此机制 若你们的程序并没有使用来自服务器的任何资源,那个么联系服务器来验证凭证将并没有多大帮助。此人可能会修改您的应用程序,完全忽略登录检查,而无需做很多工作。尽管如此,它还是比将凭证直接存储在应用程序本身要好一些。
if(Key== Encrypt(GetId()) {// Welcome }
else {Environment.Exit(0); }