您的位置:首页 > 其它

软件授权的一个简易实现方案

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: