Imports System.Security.Cryptography Imports System.Text Imports System.IO Imports System.Data.SqlClient Public Class MyFunction Public Shared Property lines As String() = IO.File.ReadAllLines("cfg.txt") Public Shared Function MD5StringHash(ByVal strString As String) As String Dim MD5 As New MD5CryptoServiceProvider Dim Data As Byte() Dim Result As Byte() Dim Res As String = "" Dim Tmp As String = "" Data = Encoding.ASCII.GetBytes(strString) Result = MD5.ComputeHash(Data) For i As Integer = 0 To Result.Length - 1 Tmp = Hex(Result(i)) If Len(Tmp) = 1 Then Tmp = "0" & Tmp Res += Tmp Next Return Res End Function 'The function used to encrypt the text Public Shared Function Encrypt(ByVal strText As String) As String Dim strEncrKey As String = "v59!=cCD" Dim byKey() As Byte = {} Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF} Try byKey = System.Text.Encoding.UTF8.GetBytes(Left(strEncrKey, 8)) Dim des As New DESCryptoServiceProvider() Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(strText) Dim ms As New MemoryStream() Dim cs As New CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write) cs.Write(inputByteArray, 0, inputByteArray.Length) cs.FlushFinalBlock() Return Convert.ToBase64String(ms.ToArray()) Catch ex As Exception Return ex.Message End Try End Function 'The function used to decrypt the text Public Shared Function Decrypt(ByVal strText As String) As String Dim sDecrKey As String = "txd.v?tx" Dim byKey() As Byte = {} Dim IV() As Byte = {&H12, &H34, &H56, &H78, &H90, &HAB, &HCD, &HEF} Dim inputByteArray(strText.Length) As Byte Try byKey = System.Text.Encoding.UTF8.GetBytes(Left(sDecrKey, 8)) Dim des As New DESCryptoServiceProvider() inputByteArray = Convert.FromBase64String(strText) Dim ms As New MemoryStream() Dim cs As New CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write) cs.Write(inputByteArray, 0, inputByteArray.Length) cs.FlushFinalBlock() Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8 Return encoding.GetString(ms.ToArray()) Catch ex As Exception Return ex.Message End Try End Function Public Shared Function ConnectToSQL(ByVal sUsername As String, ByVal sUserPass As String) As String Dim con As New SqlConnection Dim returnString As String = Nothing Try If Not sUsername <> "" Or Not sUserPass <> "" Then Return "Account0" Throw New Exception(DateTime.Now.ToString & vbTab & "Arguments not filled -> TokenFunction") End If con.ConnectionString = "Server=" & lines(8).Split("=")(1) & ";Database=" & lines(9).Split("=")(1) & ";Integrated Security=SSPI;" Dim cmd As New SqlCommand("SELECT COUNT(*) FROM tAccounts WHERE sUsername = @sUsername;", con) cmd.Parameters.AddWithValue("@sUsername", sUsername) con.Open() If cmd.ExecuteScalar = 0 Then returnString = "Account0" Else Dim sUserPassSalt As String = Nothing Dim nAuthID As String = Nothing Dim cmd2 As New SqlCommand("SELECT sUserPassSalt, nAuthID FROM tAccounts WHERE sUsername = @sUsername;", con) cmd2.Parameters.AddWithValue("@sUsername", sUsername) Dim reader As SqlDataReader = cmd2.ExecuteReader While reader.Read sUserPassSalt = reader.GetString(0) nAuthID = reader.GetInt32(1) End While reader.Close() Dim cmd3 As New SqlCommand("SELECT COUNT(*) FROM tAuth WHERE nAuthID = @nAuthID AND nLoginable = 1;", con) cmd3.Parameters.AddWithValue("@nAuthID", nAuthID) If cmd3.ExecuteScalar = 1 Then 'sUserPass = MD5StringHash(MD5StringHash(sUserPass).ToLower & MD5StringHash(sUserPassSalt).ToLower).ToLower Dim cmd4 As New SqlCommand("SELECT COUNT(*) FROM tAccounts WHERE sUsername = @sUsername AND sUserPass = @sUserPass;", con) cmd4.Parameters.AddWithValue("@sUsername", sUsername) cmd4.Parameters.AddWithValue("@sUserPass", sUserPass) If cmd4.ExecuteScalar = 1 Then Dim Token As String = MyFunction.GenerateRandomString(30) Dim cmd5 As New SqlCommand("SELECT COUNT(*) FROM tTokens WHERE nEMID = (SELECT nEMID FROM tAccounts WHERE sUsername = @sUsername);", con) cmd5.Parameters.AddWithValue("@sUsername", sUsername) If cmd5.ExecuteScalar >= 1 Then Dim cmd6 As New SqlCommand("DELETE FROM tTokens WHERE nEMID = (SELECT nEMID FROM tAccounts WHERE sUsername = @sUsername);", con) cmd6.Parameters.AddWithValue("@sUsername", sUsername) cmd6.ExecuteNonQuery() Dim cmd7 As New SqlCommand("INSERT INTO tTokens (nEMID, sToken) VALUES ((SELECT nEMID FROM tAccounts WHERE sUsername = @sUsername), @sToken);", con) cmd7.Parameters.AddWithValue("@sUsername", sUsername) cmd7.Parameters.AddWithValue("@sToken", Token) cmd7.ExecuteNonQuery() Else Dim cmd7 As New SqlCommand("INSERT INTO tTokens (nEMID, sToken) VALUES ((SELECT nEMID FROM tAccounts WHERE sUsername = @sUsername), @sToken);", con) cmd7.Parameters.AddWithValue("@sUsername", sUsername) cmd7.Parameters.AddWithValue("@sToken", Token) cmd7.ExecuteNonQuery() End If returnString = "AccountPass1" & vbTab & MyFunction.EncryptToken(Token) Else returnString = "AccountPass0" End If Else Dim cmd4 As New SqlCommand("SELECT sMessage FROM tAuth WHERE nAuthID = @nAuthID;", con) cmd4.Parameters.AddWithValue("@nAuthID", nAuthID) Dim reader2 As SqlDataReader = cmd4.ExecuteReader While reader2.Read returnString = "Maintenance1" & vbTab & reader2.GetString(0) End While reader2.Close() End If End If Catch ex As Exception My.Computer.FileSystem.WriteAllText("SQLException.txt", DateTime.Now() & vbTab & ex.Message & vbNewLine, True) Finally con.Close() End Try Return returnString End Function Public Shared Function TestSQLConnection() As Boolean Dim con As New SqlConnection Dim r As Boolean = True Try con.ConnectionString = "Server=" & lines(8).Split("=")(1) & ";Database=" & lines(9).Split("=")(1) & ";Integrated Security=SSPI;" con.Open() Catch ex As Exception r = False Console.ForegroundColor = ConsoleColor.Red Console.WriteLine("SQL Connection not stable" & vbNewLine & ex.Message) My.Computer.FileSystem.WriteAllText("Debug.txt", DateTime.Now() & vbTab & "SQL Connection not stable" & ex.Message & vbNewLine, True) Finally con.Close() End Try Return r End Function Public Shared Function GenerateRandomString(ByRef iLength As Integer) As String Dim rdm As New Random() Dim allowChrs() As Char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ0123456789".ToCharArray() Dim sResult As String = "" For i As Integer = 0 To iLength - 1 sResult += allowChrs(rdm.Next(0, allowChrs.Length)) Next Return sResult End Function Public Shared Function EncryptToken(S As String) Dim rijnKey As Byte() = System.Text.Encoding.UTF8.GetBytes(Left("C-;){+W6wRPw/[4kmVU?@6Hg88E!++Hz", 32)) Dim rijnIV As Byte() = {&H31, &H55, &H94, &H69, &H59, &H66, &H87, &H48, &H52, &H36, &H96, &H52, &H96, &H98, &H75, &H42} 'Creates the default implementation, which is RijndaelManaged. Dim rijn As SymmetricAlgorithm = SymmetricAlgorithm.Create() Dim encrypted() As Byte Using msEncrypt As New MemoryStream() Dim csEncrypt As New CryptoStream(msEncrypt, rijn.CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode.Write) Using swEncrypt As New StreamWriter(csEncrypt) 'Write all data to the stream. swEncrypt.Write(S) End Using encrypted = msEncrypt.ToArray() End Using ' You cannot convert the byte to a string or you will get strange characters so base64 encode the string ' Replace any + that will lead to the error Return Convert.ToBase64String(encrypted).Replace("+", "BIN00101011BIN") End Function End Class