在当今的数字时代,软件的试用和购买已经成为一种常见的商业模式。本文将介绍一种在网站上提供WinForms应用程序试用和购买的流程。这种流程不仅简单快捷,而且通过生成和验证解锁密钥,确保了软件的安全和用户的权益。
用户访问网站,下载软件的安装包,开始30天的免费试用。在试用期间,软件默认处于试用模式,除非用户购买并输入解锁密钥。用户在试用期结束后决定是否购买软件。如果决定购买,用户可以在网站上购买解锁密钥,并提供他们软件副本的序列号。用户购买后,会通过电子邮件收到解锁密钥,该密钥将解锁以下内容:
电子邮件中的密钥必须满足以上所有条件,才能真正解锁软件。用户现在拥有解锁的软件和密钥,该密钥无法解锁其他产品。他们可以在多台机器上自由重新安装软件,但密钥只能解锁他们下载的副本。
这是一种非常常见的软件购买方式,都非常熟悉。这里介绍的方法的安全性取决于能够保持公司密钥的安全。可以参考微软的其他文章,了解如何在部署的应用程序中混淆密钥。99.99%的人没有时间破解解锁密钥。在剩下的0.01%中,有多少人会将破解的密钥免费提供给成千上万的人?此外,由于这种方法对以下项目进行了哈希处理,任何黑客仍然需要知道这些信息才能为其他人的副本创建密钥。此外,软件公司可以通过简单地更改哈希中的一个项目,轻松地使市场上的所有密钥失效。最有可能的是产品功能。以下项目被哈希到解锁密钥中:
通过扩展类,可以哈希更多信息,如机器MAC地址,如果想限制解锁到特定的计算机。
从演示程序中可以看出,代码非常简单且自解释,一旦打开解决方案文件。以下代码部署到网站上,用于生成密钥。
Private Sub btnSell_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSell.Click
Try
' 创建密钥生成/销售对象
Dim locKeyHandler As OMBKeySell.KeySeller = New OMBKeySell.KeySeller(_MyCompanyKey, _MyCompanyIV)
' 生成密钥,只能解锁特定的客户名称,
' 对于特定的下载序列号,对于特定的产品,
' 对于特定公司名称(密钥是所有这些的哈希)
txtSellKey.Text = locKeyHandler.SellKey(txtSellCompanyName.Text, _
txtSellSerial.Text, txtSellCustomerName.Text, _
CType(btnSell.Tag, Key.ProductOrProductFeatureSet))
' 在实际使用中,密钥将在这一点上通过电子邮件发送
' 而不是简单地放置在剪贴板
My.Computer.Clipboard.SetText(txtSellKey.Text, TextDataFormat.Text)
' 感谢客户并告知他们刚刚购买的内容
lblSellStatus.Text = "感谢购买软件," & _
"解锁密钥已放置在计算机" & _
"剪贴板中,粘贴到下面以激活软件副本。" & vbCrLf & vbCrLf & _
"(在实际使用中,密钥将通过电子邮件发送)"
lblSellFeature.Text = "刚刚购买了解锁此" & _
"功能或产品的密钥:" & _
CType(btnSell.Tag, _
Key.ProductOrProductFeatureSet).ToString
' 清除演示表单的购买侧
lblBuyStatus.Text = ""
lblBuyFeature.Text = ""
txtBuyCustomerName.Text = ""
txtBuyKey.Text = ""
Catch ex As Exception
lblSellStatus.Text = ex.Message
lblSellFeature.Text = ""
txtSellKey.Text = ""
txtSellCustomerName.Text = ""
End Try
End Sub
以下代码部署到产品中,用于验证密钥并提供程序购买的产品或产品功能。
Private Sub btnBuy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuy.Click
Try
' 创建密钥消费/购买对象
Dim locKeyHandler As OMBKeyBuy.KeyBuyer = New OMBKeyBuy.KeyBuyer(_MyCompanyKey, _MyCompanyIV)
' 验证密钥,如果有效,则返回它解锁的功能集,
' 如果无效,则抛出各种错误
Dim locFeatureBeingBought As Key.ProductOrProductFeatureSet = _
locKeyHandler.BuyKey(txtBuyCompanyName.Text, _
txtBuySerial.Text, txtBuyCustomerName.Text, txtBuyKey.Text)
' 在这一点上,部署软件应该将功能集代码放置在注册表中,
' 程序然后检查注册表以确定它应该如何/是否应该运行(不要将
' 密钥字符串本身放置在注册表中
' 因为那应该只存在于客户的手中)
registrykey = locFeatureBeingBought
' 再次感谢客户并告诉他们
' 他们的密钥刚刚解锁了什么功能或产品
lblBuyStatus.Text = "感谢购买软件," & _
"特定软件副本现在已解锁"
lblBuyFeature.Text = "解锁了此功能或产品:" & _
locFeatureBeingBought.ToString
' 清除演示表单的销售侧
lblSellStatus.Text = ""
lblSellFeature.Text = ""
txtSellCustomerName.Text = ""
txtSellKey.Text = ""
Catch ex As Exception
lblBuyStatus.Text = ex.Message
lblBuyFeature.Text = ""
txtBuyKey.Text = ""
txtBuyCustomerName.Text = ""
End Try
End Sub
要使用演示程序...在顶部输入名字来制作密钥。这模拟了在网站上的购买。然后,要模拟解锁软件,输入名字并粘贴密钥。解锁的功能将被返回。