WPF软件正版激活功能的实现
1.设计思路
用户进入注册界面,获得计算机唯一标识码,用户将计算机唯一标识码发送给软件开发商,开发商通过通过算法 授权码=f(计算机唯一标识) 得到授权码,并将授权码发回给用户,用户输入授权码,软件内部通过同样的算法 授权码=f(计算机唯一标识) 进行计算,比较用户输入的授权码与软件计算得到的授权码是否一致,判断软件是否授权成功。(这里暂时采用MD5加密算法作为授权码算法)
2.授权码在软件中的保存位置
通过XML文件保存。
首先创建XML文件,如下图
然后设置该文件的属性/复制 为 复制到输出目录
之后即可通过以下代码读写授权码
string xmlpath = Directory.GetCurrentDirectory() + "\\Data\\Settings.xml";
//写
XElement Settings_XML2 = XElement.Load(xmlpath);//解析xml
Settings_XML2.Element("APPKey").Value = "lzf";//读取APPKey
Settings_XML2.Save(xmlpath);
//读
XElement Settings_XML = XElement.Load(xmlpath);//解析成xml
string appkey = Settings_XML.Element("APPKey").Value.ToString();//读取APPKey
3.获取计算机唯一标识的方法
原计划采用硬件标识来作为唯一标识,因为在论坛中看到一个帖子
http://bbs.csdn.net/topics/390838655
之后放弃使用硬件标识。这里通过软件生成一个GUID并写入注册表作为计算机的唯一标识。
生成GUID并写入注册表的代码如下:
RegistryKey key = Registry.LocalMachine;//注册表,本地计算机的配置数据
RegistryKey software = key.OpenSubKey("software\\AppBindingPC",true);//这里AppBindingPC是程序名,可以随意取
if (software == null)
{
software = key.CreateSubKey("software\\AppBindingPC");//创建目录
}
if(software.GetValue("PCGUID") == null)
{
software.SetValue("PCGUID", Guid.NewGuid().ToString("P"));//创建键值
}
string PCGuid = software.GetValue("PCGUID").ToString();//读取键值
程序运行到这里可能会报错,需要添加修改注册表的权限,或者以管理员权限运行
运行成功后,可以看到注册表中写入了新的键值
另:
通过.NET System.Management类可以获得电脑的硬件信息。
程序源码:http://download.csdn.net/download/lzf1019940946/9943598
参考博客:
//如何让软件绑定计算机硬件
http://blog.csdn.net/smstong/article/details/49848055
//win7下c#程序修改注册表的权限问题
http://www.cnblogs.com/bile/archive/2012/03/05/2381076.html
//C#读写注册表
http://blog.csdn.net/younghaiqing/article/details/61918968
//C#操作注册表
http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-regidit.html
//生成GUID
https://msdn.microsoft.com/en-us/library/97af8hh4.aspx
// C#实现MD5加密
http://blog.csdn.net/pan_junbiao/article/details/19477895
来源:CSDN
作者:黎振锋
链接:https://blog.csdn.net/lzf1019940946/article/details/77448921