我在 Visual Basic 2010 中制作了一个程序,我需要一种方法来保护它,以便当有人购买该程序时,他们不能简单地将 setup 文件夹发送给其他人并且他们可以使用它。
从我读过的内容来看,这样做的一个好方法是拥有一个在线数据库,该程序会检查序列号以查看它是否已经注册,但是由于我仍然是制作程序的新手,所以我有不知道该怎么做。
任何帮助将不胜感激,感谢您的时间。
我在 Visual Basic 2010 中制作了一个程序,我需要一种方法来保护它,以便当有人购买该程序时,他们不能简单地将 setup 文件夹发送给其他人并且他们可以使用它。
从我读过的内容来看,这样做的一个好方法是拥有一个在线数据库,该程序会检查序列号以查看它是否已经注册,但是由于我仍然是制作程序的新手,所以我有不知道该怎么做。
任何帮助将不胜感激,感谢您的时间。
您可以只使用用户的电子邮件地址并对其进行哈希处理(带有一些盐的 SHA1)。一旦它被使用,在数据库中存储一个值,这样你就知道它已经被注册了。这样您就不必担心生成注册密钥或存储它们。
如果用户需要重新安装,您需要一种机制,史蒂文斯建议使用机器 UUID 就是一个很好的例子,这样他们可以在同一台机器上重新安装多次,但如果他们安装在另一台机器上(或新安装的 Windows)您需要以其他方式验证这一点。
取自http://www.codeproject.com/Articles/38951/How-To-Hash-Data-Using-MD5-and-SHA1
下面的示例没有添加盐,这很重要,因为它会阻止人们对其他用户的电子邮件进行 sha1 哈希处理并将其用作密钥。例如,获取用户的电子邮件地址并在前后添加一些秘密文本:
Dim userEmail as string = "my@email.com"
userEmail += "s0m3s3cr3tt3xt"
UserEmail = "s0mem0r3s3cr3tt3xt" & userEmail
dim mySHA1Hash = GetSHA1HashData(userEmail)
生成 SHA1 哈希
Private Function GetSHA1HashData(data As String) As String
Dim sha1__1 As SHA1 = SHA1.Create()
'convert the input text to array of bytes
Dim hashData As Byte() = sha1__1.ComputeHash(Encoding.[Default].GetBytes(data))
'create new instance of StringBuilder to save hashed data
Dim returnValue As New StringBuilder()
'loop for each byte and add it to StringBuilder
For i As Integer = 0 To hashData.Length - 1
returnValue.Append(hashData(i).ToString())
Next
' return hexadecimal string
Return returnValue.ToString()
End Function
验证哈希
Private Function ValidateSHA1HashData(inputData As String, storedHashData As String) As Boolean
'hash input text and save it string variable
Dim getHashInputData As String = GetSHA1HashData(inputData)
If String.Compare(getHashInputData, storedHashData) = 0 Then
Return True
Else
Return False
End If
End Function
如果你要走这条路,你需要一种方法来识别:
用户识别应该非常简单。通常人们知道自己的名字并且能够将其输入到文本框中。
对于第二个问题,您可以使用 WMI 来获取计算机的 UUID(请参阅MSDN),这对于每台计算机都是唯一的。
(要在 .NET 中访问 WMI 服务,您需要添加对System.Management的项目引用)。
设置完成后,您需要设置数据库以允许它存储用户帐户和计算机 UUID 之间的关联。
从那里开始,它只是标准的编程逻辑。在新安装中,自动将 UUID 添加到数据库中。在现有安装中,检查 UUID 是否仍在数据库中。卸载时,从数据库中删除 UUID。
根据您的许可条款,您可能希望将用户帐户限制为n
唯一安装 (UUID)。这不会阻止我让我的母亲在不付费的情况下使用我的登录详细信息,但它会阻止大量帐户共享。