另一种软件加密方式

采用UKey进行软件加密和授权,是目前最为可靠和安全的方式。
如果不想用UKey,也可以用下面介绍的方法,即获取计算机的硬件配置信息,然后据此生成机器码和注册码,输入正确的注册码才能启动系统。

Foxtable提供了一个全局变量ComputerId,该变量返回12个字符,前4位表示硬盘信息,中间4位表示主板信息,最后4位表示CPU信息。
多数情况下, 不同的电脑会有不同的ComputerId,而且即使格式化硬盘重新安装系统,ComputerId的返回值也不会改变。


这种方式可以省去采购UKey的费用,但是和使用UKey加密相比,存在以下不足:

1、安全性差,对于有稍微有点破解常识的人来说,破解这样的加密系统可以说是手到擒来。
2、虽然理论上不同的电脑有不同的ComputerId,但是实际上ComputerId相同的电脑是经常存在的,而且格式化或重新安装系统后,ComputerId还是 会有一定的概率发生变化的。

由于UKey的费用并不高,而安全性和可靠性却强得多,所以官方推荐大家采用UKey加密,只有并不重要的系统才可以考虑下面的加密方式。

在学习下面的示例之前,请大家先回顾一下:保存设置信息

示例

本示例可以参考CaseStudy目录下的文件“注册系统设计演示.table”。

假定你提供了一个项目给客户试用,希望前30次正常启动,30次后出现注册窗口,60次后如果没有注册,则拒绝进入。

设计步骤:

1、设计一个注册码输入窗口,窗口类型为模式,窗口名称为“注册”,窗口中的控件如下图:

2、将窗口的AfterLoad事件设为:

e.Form.Controls("TextBox1").Value = ComputerId
e.Form.Controls(
"TextBox2").Value = GetConfigValue("Register" & ComputerId, "")

因为可能有不同的电脑使用项目,所以用于保存注册码的设置名称必须包括机器码,以避免注册码被覆盖。

3、将窗口中“确定”按钮的代码设为:

SaveConfigValue("Register" & ComputerId, e.Form.Controls("TextBox2").Value)
e.Form.Close()

4、最后将项目的AfterOpenProject事件设为:

Dim n As Integer = GetConfigValue("Count",1)
Dim
Code As String = GetConfigValue("Register" & ComputerId,"")
Dim
Ok As Boolean
If
Code > "" AndAlso DecryptText(Code,"abc","abc") = ComputerId Then '如果注册码正确
    OK =
True
Else
    If
n > 30 Then
        Forms(
"注册").Open()
        Code = GetConfigValue(
"Register" & ComputerId,"")
        If
Code > "" AndAlso DecryptText(Code,"abc","abc") = ComputerId Then '如果注册码正确
            OK =
True
        End
If
    End
If
    If
n > 60 AndAlso Ok = False Then
        Messagebox.Show(
"您正在使用的产品已经超出试用次数!")
        Syscmd.Project.
Exit()
    End
If
End
If
n = n +
1
SaveConfigValue(
"Count",n)

至此我们为自己的项目文件加上了试用和注册功能,用户提供机器码之后,可以在命令窗口执行下面的代码计算得出注册码:

Output.Show(EncryptText("用户提供的机器码","abc","abc"))

提示:

上面的代码,使用次数是保存在设置信息中的,而设置信息是存储在项目文件自身中的,所以覆盖项目文件,意味着使用次数会归零,用户可以继续使用。
所以实际应用的时候,应该同时在注册表中保存使用次数,启动的时候同时从设置信息和注册表读取使用次数,并取最大值。
关于注册表的读写,参考:
Registry


本页地址:http://www.foxtable.com/webhelp/topics/1545.htm