Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows Primation Foundation(WPF)应用中实现安全登录机制_C#_Wpf_Authentication_Login - Fatal编程技术网

C# 在Windows Primation Foundation(WPF)应用中实现安全登录机制

C# 在Windows Primation Foundation(WPF)应用中实现安全登录机制,c#,wpf,authentication,login,C#,Wpf,Authentication,Login,我创建了一个小的WPF应用程序来执行一些操作。我想将此应用程序分发给一些人,但我希望它只能由授权人员访问。我真的不需要注册机制 因为应用程序非常小,并且将作为EXE文件交付,所以我认为拥有一个数据库不是一个有效的想法 我曾考虑在应用程序中创建一个包含授权人员凭据的文件,但据我所知,WPF应用程序可以很容易地进行反向工程。我将我的想法转变为让应用程序联系服务器来授权此人或其他人,但不确定这是否是一个好的选择 你能给我推荐一些阅读资料或最佳实践来学习吗?因为每当我搜索这个主题时,我都会得到一个实现U

我创建了一个小的WPF应用程序来执行一些操作。我想将此应用程序分发给一些人,但我希望它只能由授权人员访问。我真的不需要注册机制

因为应用程序非常小,并且将作为EXE文件交付,所以我认为拥有一个数据库不是一个有效的想法

我曾考虑在应用程序中创建一个包含授权人员凭据的文件,但据我所知,WPF应用程序可以很容易地进行反向工程。我将我的想法转变为让应用程序联系服务器来授权此人或其他人,但不确定这是否是一个好的选择


你能给我推荐一些阅读资料或最佳实践来学习吗?因为每当我搜索这个主题时,我都会得到一个实现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); }