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

辛辛苦苦开发出来的软件,都希望能够有所保护,除去用软件狗外,授权码是一个比较有效而又比较容易实现的保护机制。以下提供一个简易的实现方案。

第一步:我们要实现一个与程序系统所在机器绑定的唯一机制。在.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

posted on 2011-04-02 20:37  startfrom.it  阅读(3673)  评论(3编辑  收藏  举报

导航