ToolCollection/ToolCollection/ClassLicenseManager.vb
Jonathan Jenne 688f53a74a jj 31.05
2017-05-31 12:17:35 +02:00

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