软件加密与授权示例
假定你的软件按使用时间或启动次数销售,需要插上UKey才能使用,而且超过指定的日期或启动次数后,将不能再启动软件。
1、首先要分配存储器空间,这里假定:0-49存储客户名称,50-59存储截止日期,60-64存储允许启动次数,65-69存储实际已经启动 过的次数。
2、然后你单独建立一个项目,在这个项目中设计一个UKey授权窗口,用于输入授权用户、截止日期和允许启动次数:
3、授权按钮的代码设置为:
Dim
kh As
String = e.Form.Controls("TextBox1").Text
Dim
rq As
String = Format(e.Form.Controls("DateTimePicker1").Value,"yyyy-MM-dd")
Dim
cs As
String = e.Form.Controls("NumericComboBox1").Value
Dim
qd As
String = " "
'5个半角空格,用于初始化保存实际启动次数的存储器空间.
Dim
pw1 As
String =
"46DFA0D7"
Dim
pw2 As
String =
"C292C1DB"
kh =
kh.PadRight(50,"
").SubString(0,50)
'客户名称最多50个字符,不够50用空格补
cs =
cs.PadRight(5,"
").Substring(0,5)
'启动次数最多允许5位数,不够的用空格补
If
UKey.Start()
Then
If UKey.WriteStr(0,kh,pw1,pw2)
AndAlso UKey.WriteStr(50,rq,pw1,pw2)
AndAlso UKey.WriteStr(60,cs,pw1,pw2)
AndAlso UKey.WriteStr(65,qd,pw1,pw2)
Messagebox.Show("授权成功!","提示",
MessageBoxButtons.OK,MessageBoxIcon.Information)
Else
Messagebox.Show("写入授权信息失败!","提示",
MessageBoxButtons.OK,MessageBoxIcon.Information)
End
If
Else
Messagebox.Show("请插上UKey!","提示",
MessageBoxButtons.OK,MessageBoxIcon.Information)
End
If
你也许会奇怪,为什么客户名称和次数,都要固定长度,不够的补空格?
你想一下,如果你之前已经对某个UKey进行过授权,授权客户是“北京市公安局”,现在想重新授权,将客户改为“联想电脑”,如果不采用固定长度且补空格的方式,那么重新授权后,客户名称将是"联想电脑安局"。
5、现在回到原来的项目中,将项目事件BeforeOpenProject事件代码设置为:
If
UKey.Start()
Then
If
UKey.Encrypt2("abc")
<>
"483DBF9FDD0574C0"
Then
MessageBox.Show("请插上XX公司提供的UKey!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel
= True
Else
Dim
khs
As
String
=
UKey.ReadStr(0,50)
'从存储器读取0到49这50个字节的内容,也就是授权客户名称
Dim
rqs
As
String
=
UKey.ReadStr(50,10)
'从存储器读取50到59这10个字节的内容,也就是截止日期
Dim
css
As
String
=
UKey.ReadStr(60,5)
'从存储器读取60到64这5个字节的内容,也就是允许启动次数
Dim
yqs
As
String
=
UKey.ReadStr(65,5)
'从存储器读取65到69这5个字节的内容,也就是已经启动次数
Dim
rq
As
Date
Dim
cs
As
Integer
Dim
qs
As
Integer
'从存储器读取出来值的是字符,所以还需要转换一下,因为截止日期是Date型,次数是Integer型
Date.TryParse(rqs,rq)
Integer.TryParse(css,cs)
Integer.TryParse(yqs,qs)
qs
=
qs
+
1
'已经启动次数加1
UKey.WriteStr(65,qs,"46DFA0D7","C292C1DB")
'将已经启动次数写入存储器
If qs
> cs
'如果已经启动次数大于允许启动次数
MessageBox.Show("你的UKey已经超过允许启动次数!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel
= True
ElseIf
Date.Today
> rq
'如果今天的日期大于截止日期
MessageBox.Show("你的UKey已经过期!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel
= True
End If
If
e.Cancel
= False Then
MessageBox.Show("尊敬的用户"
&
khs.Trim()
&
",欢迎使用本软件!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
End If
End If
Else
MessageBox.Show("启动UKey失败!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
e.Cancel
= True
End If
上面的代码采用用户加密函数Encrypt2判断用户已经插上你公司提供的UKey,并判断此UKey是否还在授权范围之内,所有条件符合才允许打开你的项目。
7、最后增加一个计划,执行间隔为10000毫秒,也就是10秒,计划代码为:
If
UKey.Encrypt1("abc")
<> "E5FC1B19625C5C4A"
Then
MessageBox.Show("请插上XX公司提供的UKey!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
DataTables.Save()
Syscmd.Project.Exit
End
If
上面的代码,每10秒钟执行一次,采用固化加密函数Encrypt1判断你提供的UKey是否依然插在计算机上,如果没有,则保存项目后退出。