Как зарегистрировать серийные ключи в настольной программе VB, чтобы их нельзя было использовать более одного раза?

Я создал программу на Visual Basic 2010, и мне нужен способ защитить ее, чтобы, когда кто-то приобрел программу, он не мог просто отправить папку установки кому-то другому и мог ее использовать.

Из того, что я прочитал, похоже, что хороший способ сделать это состоит в том, чтобы иметь онлайн-базу данных, в которой программа проверяет серийный ключ, чтобы убедиться, что он уже зарегистрирован, однако, поскольку я все еще новичок в создании программ, у меня есть понятия не имею, как это сделать.

Любая помощь будет принята с благодарностью, спасибо за ваше время.

2 ответа

Вы можете просто использовать адрес электронной почты пользователя и хэшировать его (SHA1 с небольшим количеством соли). После его использования сохраните значение в базе данных, чтобы вы знали, что оно уже зарегистрировано. Таким образом, вам не нужно беспокоиться о создании регистрационных ключей или их хранении.

Вам понадобится механизм, если пользователю когда-либо понадобится переустановить, хотя предложение Стивенса об использовании UUID машины является хорошим примером, так как они могут переустанавливать столько раз на одной машине, но если они устанавливаются на другой машине. (или новая установка Windows), вам нужно проверить это другим способом.

Взято с http://www.codeproject.com/Articles/38951/How-To-Hash-Data-Using-MD5-and-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. ваши пользователи
  2. машины, которые запускают ваше приложение

Идентификация пользователя должна быть довольно простой. Обычно люди знают свои собственные имена и могут ввести их в текстовое поле.

Для второй проблемы вы могли бы использовать WMI для получения UUID компьютера (см. MSDN), который уникален для каждого компьютера.

(Для доступа к службам WMI в.NET необходимо добавить ссылку на проект в System.Management).

После того, как вы это настроите, вам нужно будет настроить свою базу данных таким образом, чтобы она позволяла хранить связи между учетными записями ваших пользователей и UUID компьютеров.

С этого момента это просто стандартная логика программирования. При новой установке автоматически добавьте UUID в базу данных. В существующей установке проверьте, находится ли UUID в базе данных. При удалении удалите UUID из базы данных.

В зависимости от условий лицензирования вы, возможно, захотите ограничить учетную запись пользователя n уникальные установки (UUID). Это не помешает мне позволить моей маме использовать мои данные для входа в систему без оплаты, но предотвратит массовый обмен аккаунтами.

Другие вопросы по тегам