软件授权的一个简易实现方案
2011-04-02 20:37
281 查看
辛辛苦苦开发出来的软件,都希望能够有所保护,除去用软件狗外,授权码是一个比较有效而又比较容易实现的保护机制。以下提供一个简易的实现方案。
第一步:我们要实现一个与程序系统所在机器绑定的唯一机制。在.net环境下,获取mac地址是一个比较靠谱的办法,相对而言获取cpu id或硬盘id都不能保证获得唯一的ID。(当然用户要篡改mac,就没辙了)。然后通过获得的mac地址,进行简单算法换算,获得一个LicenseClientKey。
第二步:我们设计一个算法,根据LicenseClientKey,计算得到一个LicenseKey并将它发布给最终用户。
第三步:最终用户获得LicenseKey后,将LicenseKey安装到系统中。
最后,就是系统程序检测LicenseKey是否正确。通过前面第一步、第二步的方法获得LicenseClientKey,并计算得出LicenseKey,然后比较是否与系统安装的LicenseKey匹配。
代码的实现很简单,这里就只给出获取mac地址及算法换算,并计算LicenseClientKey的代码片段。
需要引用以下几个namespace
Imports System.Net
Imports System.Net.NetworkInformation
Imports System.Security.Cryptography
获取LicenseClientKey
第一步:我们要实现一个与程序系统所在机器绑定的唯一机制。在.net环境下,获取mac地址是一个比较靠谱的办法,相对而言获取cpu id或硬盘id都不能保证获得唯一的ID。(当然用户要篡改mac,就没辙了)。然后通过获得的mac地址,进行简单算法换算,获得一个LicenseClientKey。
第二步:我们设计一个算法,根据LicenseClientKey,计算得到一个LicenseKey并将它发布给最终用户。
第三步:最终用户获得LicenseKey后,将LicenseKey安装到系统中。
最后,就是系统程序检测LicenseKey是否正确。通过前面第一步、第二步的方法获得LicenseClientKey,并计算得出LicenseKey,然后比较是否与系统安装的LicenseKey匹配。
代码的实现很简单,这里就只给出获取mac地址及算法换算,并计算LicenseClientKey的代码片段。
需要引用以下几个namespace
Imports System.Net
Imports System.Net.NetworkInformation
Imports System.Security.Cryptography
获取LicenseClientKey
Dim strClientKeyCode As String = "" Try For Each nic As NetworkInterface In NetworkInterface.GetAllNetworkInterfaces() If nic.OperationalStatus = OperationalStatus.Up Then If strClientKeyCode = "" Then strClientKeyCode = nic.GetPhysicalAddress().ToString() End If End If Next Catch ex As Exception strClientKeyCode = "" End Try If strClientKeyCode = "" Then Response.Write("Can't get LicenseClientKey") Else Dim encoder As New UTF8Encoding Dim hashedBytes As Byte() Dim hasher As New SHA256Managed Dim sBuilder As New StringBuilder hashedBytes = hasher.ComputeHash(encoder.GetBytes("YourKey" + strClientKeyCode)) For i As Integer = 0 To hashedBytes.Length - 1 sBuilder.Append(hashedBytes(i).ToString("x2")) Next i Response.Write(sBuilder.ToString) End If
相关文章推荐
- 用C#实现一个简易的软件光栅化渲染器
- 数据结构课程设计---用Dijkstra算法实现一个简易的最佳方案选择
- 一点一点地实现每个功能,最后才能汇聚成一个庞大的软件
- Netty+Zookeeper实现一套简易的Dubbo方案
- 企业内部实现软件测试自动化的方案探讨
- DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制
- “医疗信息化行业之中的联发科”- 我们在医疗行业中的定位及目标 想做一个面对中小企业的专业上游软件供应商 台湾联发科技颠覆掉的是一个封闭的手机产业系统 解决方案,即AgileHIS.NET数字化医院基础方案
- 华为机试题:实现一个简易的银行叫号系统
- 注解+反射+JDBC,实现一个简易的泛型DAO接口
- 用Linux编写程序,实现一个简易的进度条
- 一个简易网络嗅探器的实现
- 一个简单的文件服务器实现方案
- 一个简单的文件服务器实现方案
- 实现一个无刷新的基于ajax的简易聊天室
- 实现一个无刷新的基于ajax的简易聊天室
- 用c++实现一个简易的vector
- 设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程
- 自己实现一个简易web服务器
- Qt学习之路(32): 一个简易画板的实现(Graphics View)
- 实现一个简单的Form授权 How to: Implement Simple Forms Authentication