Как зарегистрировать серийные ключи в настольной программе 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
Если вы идете по этому пути, вам нужен способ определить:
- ваши пользователи
- машины, которые запускают ваше приложение
Идентификация пользователя должна быть довольно простой. Обычно люди знают свои собственные имена и могут ввести их в текстовое поле.
Для второй проблемы вы могли бы использовать WMI для получения UUID компьютера (см. MSDN), который уникален для каждого компьютера.
(Для доступа к службам WMI в.NET необходимо добавить ссылку на проект в System.Management).
После того, как вы это настроите, вам нужно будет настроить свою базу данных таким образом, чтобы она позволяла хранить связи между учетными записями ваших пользователей и UUID компьютеров.
С этого момента это просто стандартная логика программирования. При новой установке автоматически добавьте UUID в базу данных. В существующей установке проверьте, находится ли UUID в базе данных. При удалении удалите UUID из базы данных.
В зависимости от условий лицензирования вы, возможно, захотите ограничить учетную запись пользователя n
уникальные установки (UUID). Это не помешает мне позволить моей маме использовать мои данные для входа в систему без оплаты, но предотвратит массовый обмен аккаунтами.