在VB桌面程序中,如何注册序列密钥以使其不能多次使用?

时间:2013-08-08 15:22:24

标签: database vb.net serial-number

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

从我所看到的,看起来这样做的一个好方法是有一个在线数据库,程序检查序列密钥是否已经注册,但是我还是新手来制作程序,我不知道该怎么做。

非常感谢任何帮助,感谢您的时间。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

  1. 您的用户
  2. 运行应用程序的计算机
  3. 用户识别应该非常简单。通常人们都知道自己的名字,并能够将其输入文本框。

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

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

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

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

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

相关问题