1

我在 Visual Basic 2010 中制作了一个程序,我需要一种方法来保护它,以便当有人购买该程序时,他们不能简单地将 setup 文件夹发送给其他人并且他们可以使用它。

从我读过的内容来看,这样做的一个好方法是拥有一个在线数据库,该程序会检查序列号以查看它是否已经注册,但是由于我仍然是制作程序的新手,所以我有不知道该怎么做。

任何帮助将不胜感激,感谢您的时间。

4

2 回答 2

2

您可以只使用用户的电子邮件地址并对其进行哈希处理(带有一些盐的 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
于 2013-08-08T18:29:59.707 回答
1

如果你要走这条路,你需要一种方法来识别:

  1. 你的用户
  2. 运行您的应用程序的机器

用户识别应该非常简单。通常人们知道自己的名字并且能够将其输入到文本框中。

对于第二个问题,您可以使用 WMI 来获取计算机的 UUID(请参阅MSDN),这对于每台计算机都是唯一的。

(要在 .NET 中访问 WMI 服务,您需要添加对System.Management的项目引用)。

设置完成后,您需要设置数据库以允许它存储用户帐户和计算机 UUID 之间的关联。

从那里开始,它只是标准的编程逻辑。在新安装中,自动将 UUID 添加到数据库中。在现有安装中,检查 UUID 是否仍在数据库中。卸载时,从数据库中删除 UUID。

根据您的许可条款,您可能希望将用户帐户限制为n唯一安装 (UUID)。这不会阻止我让我的母亲在不付费的情况下使用我的登录详细信息,但它会阻止大量帐户共享。

于 2013-08-08T16:06:12.753 回答