238 lines
6.8 KiB
VB.net
238 lines
6.8 KiB
VB.net
Imports System.Text
|
|
Imports System.Security.Cryptography
|
|
Imports System.Collections.ObjectModel
|
|
|
|
Public Class ClassLicenseManager
|
|
|
|
Private _password As String
|
|
Private _key As String
|
|
Public Shared _licenses As ClassLicenses
|
|
|
|
Public licenseString As String
|
|
Public licenseStringArray(,) As String
|
|
|
|
|
|
' ++++++++++++++++++++++++++++++++++++++++++++++ Methoden ++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
''' <summary>
|
|
''' Konstruktor für den Lizenz-Manager
|
|
''' </summary>
|
|
''' <param name="password">Passwort zum Entschlüsseln des Lizenzkeys</param>
|
|
''' <param name="key">verschlüsselter Lizenzkey</param>
|
|
''' <remarks></remarks>
|
|
Sub New(ByVal password As String, ByVal key As String)
|
|
Me._password = password
|
|
Me._key = key
|
|
|
|
Me.licenseString = Me.DecodeLicenseKey(Me._key)
|
|
Me.licenseStringArray = Me.SplitLicenseString(Me.licenseString)
|
|
|
|
Me.LoadLicenses()
|
|
End Sub
|
|
''' <summary>
|
|
''' Konstruktor für den Lizenz-Manager ohne License load
|
|
''' </summary>
|
|
''' <param name="password">Passwort zum Entschlüsseln des Lizenzkeys</param>
|
|
''' <remarks></remarks>
|
|
Sub New(ByVal password As String)
|
|
Me._password = password
|
|
End Sub
|
|
''' <summary>
|
|
''' Lädt alle Lizenzen aus dem Lizenz-Array
|
|
''' </summary>
|
|
''' <remarks></remarks>
|
|
Public Sub LoadLicenses()
|
|
ClassLicenseManager._licenses = New ClassLicenses(Me.licenseStringArray)
|
|
End Sub
|
|
|
|
|
|
''' <summary>
|
|
''' Codiert eine Zeichenkette
|
|
''' </summary>
|
|
''' <param name="str">zu verschlüsselnde Zeichenkette</param>
|
|
''' <param name="password">das zur Verschlüsselung verwendete Passwort</param>
|
|
''' <returns>liefert eine verschlüsselte Zeichenkette</returns>
|
|
''' <remarks></remarks>
|
|
Public Function EncodeLicenseKey(ByVal str As String, ByVal password As String)
|
|
Dim rd As New RijndaelManaged
|
|
|
|
Dim md5 As New MD5CryptoServiceProvider
|
|
Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(password))
|
|
|
|
md5.Clear()
|
|
rd.Key = key
|
|
rd.GenerateIV()
|
|
|
|
Dim iv() As Byte = rd.IV
|
|
Dim ms As New IO.MemoryStream
|
|
|
|
ms.Write(iv, 0, iv.Length)
|
|
|
|
Dim cs As New CryptoStream(ms, rd.CreateEncryptor, CryptoStreamMode.Write)
|
|
Dim data() As Byte = System.Text.Encoding.UTF8.GetBytes(Str)
|
|
|
|
cs.Write(data, 0, data.Length)
|
|
cs.FlushFinalBlock()
|
|
|
|
Dim encdata() As Byte = ms.ToArray()
|
|
Dim result As String = Convert.ToBase64String(encdata)
|
|
cs.Close()
|
|
rd.Clear()
|
|
|
|
Return result
|
|
End Function
|
|
|
|
|
|
''' <summary>
|
|
''' Decodiert den verschlüsselten Lizenzkey
|
|
''' </summary>
|
|
''' <param name="licenseCodeStr">verschlüsselter Lizenzkey</param>
|
|
''' <returns></returns>
|
|
''' <remarks></remarks>
|
|
Public Function DecodeLicenseKey(ByVal licenseCodeStr As String)
|
|
Try
|
|
Dim rd As New RijndaelManaged
|
|
Dim rijndaelIvLength As Integer = 16
|
|
Dim md5 As New MD5CryptoServiceProvider
|
|
Dim key() As Byte = md5.ComputeHash(Encoding.UTF8.GetBytes(Me._password))
|
|
|
|
md5.Clear()
|
|
|
|
Dim encdata() As Byte
|
|
Dim ms
|
|
Dim iv(15) As Byte
|
|
Dim cs As CryptoStream
|
|
Dim data() As Byte
|
|
|
|
Try
|
|
encdata = Convert.FromBase64String(licenseCodeStr)
|
|
ms = New IO.MemoryStream(encdata)
|
|
|
|
ms.Read(iv, 0, rijndaelIvLength)
|
|
rd.IV = iv
|
|
rd.Key = key
|
|
|
|
cs = New CryptoStream(ms, rd.CreateDecryptor, CryptoStreamMode.Read)
|
|
|
|
ReDim data(ms.Length - rijndaelIvLength)
|
|
Catch ex As Exception
|
|
Return Nothing
|
|
End Try
|
|
|
|
Dim i As Integer = 0
|
|
|
|
|
|
Try
|
|
|
|
i = cs.Read(data, 0, data.Length)
|
|
Dim result As String = System.Text.Encoding.UTF8.GetString(data, 0, i)
|
|
|
|
cs.Close()
|
|
rd.Clear()
|
|
Return result
|
|
|
|
Catch ex As Exception
|
|
|
|
'MsgBox("Falsches Passwort")
|
|
Return Nothing
|
|
|
|
End Try
|
|
Catch ex As Exception
|
|
End Try
|
|
'MsgBox("Falsches Passwort")
|
|
Return Nothing
|
|
End Function
|
|
|
|
|
|
''' <summary>
|
|
''' Zerlegt den entschlüsselten Lizenzkey
|
|
''' </summary>
|
|
''' <param name="licenseStr">entschlüsselter Lizenzkey</param>
|
|
''' <returns></returns>
|
|
''' <remarks></remarks>
|
|
Public Function SplitLicenseString(ByVal licenseStr As String) As String(,)
|
|
|
|
Try
|
|
If licenseStr IsNot Nothing Then
|
|
Dim licenseTemp() As String = licenseStr.Split(";")
|
|
|
|
Dim licenses(licenseTemp.Length, 3) As String
|
|
|
|
Dim i As Integer = 0
|
|
|
|
If licenseTemp IsNot Nothing Then
|
|
For Each lizenz As String In licenseTemp
|
|
|
|
Dim temp() = lizenz.Split(":")
|
|
|
|
licenses(i, 0) = temp(0)
|
|
licenses(i, 1) = temp(1)
|
|
If temp.Length > 2 Then
|
|
licenses(i, 2) = temp(2)
|
|
licenses(i, 3) = temp(3)
|
|
Dim expires As Date
|
|
Date.TryParse(licenses(i, 1), expires)
|
|
End If
|
|
|
|
|
|
i += 1
|
|
Next
|
|
|
|
Return licenses
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
MsgBox("Fehler in SplitLicenseString: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
|
End Try
|
|
|
|
Return Nothing
|
|
|
|
End Function
|
|
|
|
|
|
|
|
' ++++++++++++++++++++++++++++++++++++++++++++++ Properties ++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
''' <summary>
|
|
''' Liefert das Passwort zum Entschlüsseln des Lizenzschlüssels
|
|
''' </summary>
|
|
''' <value></value>
|
|
''' <returns></returns>
|
|
''' <remarks></remarks>
|
|
Public ReadOnly Property Password() As String
|
|
Get
|
|
Return Me._password
|
|
End Get
|
|
End Property
|
|
|
|
|
|
''' <summary>
|
|
''' Liefert eine Sammlung von Lizenzobjekten
|
|
''' </summary>
|
|
''' <value></value>
|
|
''' <returns></returns>
|
|
''' <remarks></remarks>
|
|
Public ReadOnly Property Licenses() As ClassLicenses
|
|
Get
|
|
Return ClassLicenseManager._licenses
|
|
End Get
|
|
End Property
|
|
|
|
|
|
''' <summary>
|
|
''' Liefert oder setzt den Lizenzschlüssel
|
|
''' </summary>
|
|
''' <value></value>
|
|
''' <returns></returns>
|
|
''' <remarks></remarks>
|
|
Public Property Key() As String
|
|
Get
|
|
Return Me._key
|
|
End Get
|
|
Set(ByVal value As String)
|
|
Me._key = value
|
|
End Set
|
|
End Property
|
|
|
|
End Class
|