Implementierung einer besseren Radom und rechenintensiveren Hash-Aart
This commit is contained in:
@@ -1,8 +1,12 @@
|
|||||||
Imports System.Security.Cryptography
|
Imports System.Security.Cryptography
|
||||||
Imports Microsoft.VisualBasic
|
Imports Microsoft.VisualBasic
|
||||||
|
Imports Konscious.Security.Cryptography
|
||||||
Public Class VERAG_VARIABLES
|
Public Class VERAG_VARIABLES
|
||||||
Public Shared errornumb As Integer = 0
|
Public Shared errornumb As Integer = 0
|
||||||
|
Shared Function getiterationnumber() As Integer
|
||||||
|
Return RandomInteger(Math.Pow(2, 2), Math.Pow(2, 8))
|
||||||
|
End Function
|
||||||
|
|
||||||
Shared Sub initerrorcount()
|
Shared Sub initerrorcount()
|
||||||
errornumb = 0
|
errornumb = 0
|
||||||
End Sub
|
End Sub
|
||||||
@@ -15,20 +19,38 @@ Public Class VERAG_VARIABLES
|
|||||||
Shared Function getErrorcodeindez(Errorcode As String) As String
|
Shared Function getErrorcodeindez(Errorcode As String) As String
|
||||||
Return VERAG_PROG_ALLGEMEIN.cCryptography3.Decrypt(Errorcode)
|
Return VERAG_PROG_ALLGEMEIN.cCryptography3.Decrypt(Errorcode)
|
||||||
End Function
|
End Function
|
||||||
Public Shared Function GenerateSalt(ByVal nSalt As Integer) As String
|
Public Shared Function GenerateSalt(ByVal nSalt As Integer) As Byte()
|
||||||
Dim saltBytes = New Byte(nSalt) {}
|
Dim saltBytes = New Byte(nSalt) {}
|
||||||
|
|
||||||
Using provider = New RNGCryptoServiceProvider()
|
Using provider = New RNGCryptoServiceProvider()
|
||||||
provider.GetNonZeroBytes(saltBytes)
|
provider.GetNonZeroBytes(saltBytes)
|
||||||
End Using
|
End Using
|
||||||
|
Return saltBytes
|
||||||
Return Convert.ToBase64String(saltBytes)
|
'Convert.ToBase64String(saltBytes)
|
||||||
|
End Function
|
||||||
|
Public Shared Async Function HashPassword(ByVal password As String, ByVal salt As Byte(), ByVal nIterations As Integer, ByVal nHash As Integer) As Threading.Tasks.Task(Of Byte())
|
||||||
|
Dim Argon As Argon2id = New Argon2id(Encoding.UTF8.GetBytes(password))
|
||||||
|
Argon.Salt = salt
|
||||||
|
Argon.DegreeOfParallelism = 6
|
||||||
|
Argon.Iterations = nIterations
|
||||||
|
Argon.MemorySize = 4096
|
||||||
|
Return Await Argon.GetBytesAsync(nHash)
|
||||||
|
'Return Convert.ToBase64String(Argon.GetBytes(nHash))
|
||||||
|
Return Argon.GetBytes(nHash)
|
||||||
|
'Dim saltBytes = Convert.FromBase64String(salt)
|
||||||
|
'Using rfc2898DeriveBytes = New Rfc2898DeriveBytes(password, saltBytes, nIterations)
|
||||||
|
'End Using
|
||||||
End Function
|
End Function
|
||||||
Public Shared Function HashPassword(ByVal password As String, ByVal salt As String, ByVal nIterations As Integer, ByVal nHash As Integer) As String
|
|
||||||
Dim saltBytes = Convert.FromBase64String(salt)
|
|
||||||
|
|
||||||
Using rfc2898DeriveBytes = New Rfc2898DeriveBytes(password, saltBytes, nIterations)
|
Public Shared Async Function Verifyhash(ByVal passw As String, ByVal salt As Byte(), ByVal hash As Byte(), ByVal nIterations As Integer, ByVal nHash As Integer) As Threading.Tasks.Task(Of Boolean)
|
||||||
Return Convert.ToBase64String(rfc2898DeriveBytes.GetBytes(nHash))
|
Dim newHash As Byte() = Await HashPassword(passw, salt, nIterations, nHash)
|
||||||
End Using
|
Return hash.SequenceEqual(newHash)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Shared Function RandomInteger(ByVal min As Integer, ByVal _
|
||||||
|
max As Integer) As Integer
|
||||||
|
Dim rand As New RNGCryptoServiceProvider()
|
||||||
|
Dim one_byte() As Byte = {0}
|
||||||
|
rand.GetBytes(one_byte)
|
||||||
|
Return min + (max - min) * (one_byte(0) / 255)
|
||||||
End Function
|
End Function
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -26,11 +26,11 @@
|
|||||||
<system.web>
|
<system.web>
|
||||||
<webServices>
|
<webServices>
|
||||||
<protocols>
|
<protocols>
|
||||||
<add name="HttpGet"/>
|
<add name="HttpGet" />
|
||||||
<add name="HttpPost"/>
|
<add name="HttpPost" />
|
||||||
</protocols>
|
</protocols>
|
||||||
<conformanceWarnings>
|
<conformanceWarnings>
|
||||||
<remove name='BasicProfile1_1'/>
|
<remove name="BasicProfile1_1" />
|
||||||
</conformanceWarnings>
|
</conformanceWarnings>
|
||||||
</webServices>
|
</webServices>
|
||||||
<authentication mode="Forms">
|
<authentication mode="Forms">
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Change_PW.aspx.vb" Debug="true" Inherits="login_Change_PW" %>
|
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Change_PW.aspx.vb" Debug="true" Inherits="login_Change_PW" Async="true" %>
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
|
|
||||||
Imports System.Data.SqlClient
|
Imports System.Data.SqlClient
|
||||||
Imports System.Security.Cryptography
|
Imports System.Security.Cryptography
|
||||||
|
Imports System.Threading.Tasks
|
||||||
|
|
||||||
Partial Class login_Change_PW
|
Partial Class login_Change_PW
|
||||||
Inherits System.Web.UI.Page
|
Inherits System.Web.UI.Page
|
||||||
|
Dim intzahl As Integer = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 10))
|
||||||
|
Dim intzahliterats As Integer = VERAG_VARIABLES.getiterationnumber
|
||||||
|
Dim salt As Byte() = VERAG_VARIABLES.GenerateSalt(intzahl)
|
||||||
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
Dim url = Request.ServerVariables("URL")
|
Dim url = Request.ServerVariables("URL")
|
||||||
Session.Add("urltochangepw", url)
|
Session.Add("urltochangepw", url)
|
||||||
@@ -124,7 +127,7 @@ Partial Class login_Change_PW
|
|||||||
MsgBox("")
|
MsgBox("")
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Protected Sub btn_submitpw_Click(sender As Object, e As EventArgs)
|
Protected Async Sub btn_submitpw_Click(sender As Object, e As EventArgs)
|
||||||
Dim tempstr As String = ""
|
Dim tempstr As String = ""
|
||||||
Dim UsernameDB As String = String.Empty
|
Dim UsernameDB As String = String.Empty
|
||||||
Dim pwDB As String = String.Empty
|
Dim pwDB As String = String.Empty
|
||||||
@@ -235,10 +238,10 @@ Partial Class login_Change_PW
|
|||||||
ConnectionString = "Server=DEVELOPER.verag.ost.dmn\DEVSQL;Database=VERAG_HOMEPAGE;Uid=AppUser;Pwd=yp/THDd?xM+pZ$;"
|
ConnectionString = "Server=DEVELOPER.verag.ost.dmn\DEVSQL;Database=VERAG_HOMEPAGE;Uid=AppUser;Pwd=yp/THDd?xM+pZ$;"
|
||||||
'ConnectionString = "Server=db593295684.db.1and1.com;Database=db593295684;Uid=dbo593295684;Pwd=atilla#2;"
|
'ConnectionString = "Server=db593295684.db.1and1.com;Database=db593295684;Uid=dbo593295684;Pwd=atilla#2;"
|
||||||
End If
|
End If
|
||||||
Dim isPasswhash As String = gensaltPassw(usrname, tempstr, Email, Session.IsNewSession)
|
Dim isPasswhash As Byte() = Await gensaltPasswAsync(usrname, tempstr, salt, intzahliterats, intzahl, Email, Session.IsNewSession)
|
||||||
Dim isPasswDBhash As String = gensaltPassw(UsernameDB, pwDB, EmailDB, Session.IsNewSession)
|
Dim isPasswDBhash As Byte() = Await gensaltPasswAsync(UsernameDB, pwDB, salt, intzahliterats, intzahl, EmailDB, Session.IsNewSession)
|
||||||
If regexval_txt_Pw.IsValid = True Then
|
If regexval_txt_Pw.IsValid = True Then
|
||||||
If String.Equals(isPasswhash, isPasswDBhash) = False Then
|
If Await VERAG_VARIABLES.Verifyhash(tempstr, salt, isPasswhash, intzahliterats, intzahl) = True Then
|
||||||
Using con As New SqlConnection(ConnectionString)
|
Using con As New SqlConnection(ConnectionString)
|
||||||
Using cmd As New SqlCommand("UPDATE [VERAG_HOMEPAGE].[dbo].[Users] SET [Password]=@Password WHERE [Username]=@Username AND [UserId]=@UserId")
|
Using cmd As New SqlCommand("UPDATE [VERAG_HOMEPAGE].[dbo].[Users] SET [Password]=@Password WHERE [Username]=@Username AND [UserId]=@UserId")
|
||||||
' cmd.CommandType = CommandType.StoredProcedure
|
' cmd.CommandType = CommandType.StoredProcedure
|
||||||
@@ -351,7 +354,7 @@ Partial Class login_Change_PW
|
|||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Protected Sub btn_submitpw_M_Click(sender As Object, e As EventArgs)
|
Protected Async Sub btn_submitpw_M_Click(sender As Object, e As EventArgs)
|
||||||
Dim tempstr As String = ""
|
Dim tempstr As String = ""
|
||||||
Dim pwDB As String = String.Empty
|
Dim pwDB As String = String.Empty
|
||||||
Dim EmailDB As String = String.Empty
|
Dim EmailDB As String = String.Empty
|
||||||
@@ -406,28 +409,28 @@ Partial Class login_Change_PW
|
|||||||
If dr.HasRows Then
|
If dr.HasRows Then
|
||||||
dr.Read()
|
dr.Read()
|
||||||
tempstr = txt_Pw_M.Text
|
tempstr = txt_Pw_M.Text
|
||||||
EmailDB = dr("Email").ToString
|
EmailDB = dr("Email").ToString
|
||||||
pwDB = dr("Password").ToString
|
pwDB = dr("Password").ToString
|
||||||
usrnmDB = dr("Username").ToString
|
usrnmDB = dr("Username").ToString
|
||||||
TheUsrIdDB = dr("UserId").ToString
|
TheUsrIdDB = dr("UserId").ToString
|
||||||
customerIDDB = dr("KundenNr").ToString
|
customerIDDB = dr("KundenNr").ToString
|
||||||
If String.Equals(usrname, usrnmDB, StringComparison.CurrentCulture) = True Then
|
If String.Equals(usrname, usrnmDB, StringComparison.CurrentCulture) = True Then
|
||||||
isusernameright = True
|
isusernameright = True
|
||||||
End If
|
End If
|
||||||
If String.Equals(Email, EmailDB, StringComparison.CurrentCulture) = True Then
|
If String.Equals(Email, EmailDB, StringComparison.CurrentCulture) = True Then
|
||||||
isemailright = True
|
isemailright = True
|
||||||
End If
|
End If
|
||||||
If String.Equals(txt_Pw_M.Text, pwDB, StringComparison.CurrentCulture) = False Then
|
If String.Equals(txt_Pw_M.Text, pwDB, StringComparison.CurrentCulture) = False Then
|
||||||
ispwrEqual = False
|
ispwrEqual = False
|
||||||
End If
|
End If
|
||||||
If String.Equals(UsrID, TheUsrIdDB, StringComparison.CurrentCulture) = True Then
|
If String.Equals(UsrID, TheUsrIdDB, StringComparison.CurrentCulture) = True Then
|
||||||
isUSrIDright = True
|
isUSrIDright = True
|
||||||
End If
|
End If
|
||||||
If String.Equals(THEUsrID, customerIDDB, StringComparison.CurrentCulture) = True Then
|
If String.Equals(THEUsrID, customerIDDB, StringComparison.CurrentCulture) = True Then
|
||||||
isctmrIDright = True
|
isctmrIDright = True
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If String.Compare(usrname, dr("Username")) = True Then
|
If String.Compare(usrname, dr("Username")) = True Then
|
||||||
isusernameright = True
|
isusernameright = True
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
@@ -454,10 +457,10 @@ Partial Class login_Change_PW
|
|||||||
End If
|
End If
|
||||||
|
|
||||||
Using con As New SqlConnection(ConnectionString)
|
Using con As New SqlConnection(ConnectionString)
|
||||||
Dim isPasswhash As String = gensaltPassw(usrname, tempstr, Email, Session.IsNewSession)
|
Dim isPasswhash As Byte() = Await gensaltPasswAsync(usrname, tempstr, salt, intzahliterats, intzahl, Email, Session.IsNewSession)
|
||||||
Dim isPasswDBhash As String = gensaltPassw(usrnmDB, pwDB, EmailDB, Session.IsNewSession)
|
Dim isPasswDBhash As Byte() = Await gensaltPasswAsync(usrnmDB, pwDB, salt, intzahliterats, intzahl, EmailDB, Session.IsNewSession)
|
||||||
If regexval_txt_Pw.IsValid = True Then
|
If regexval_txt_Pw.IsValid = True Then
|
||||||
If String.Equals(isPasswhash, isPasswDBhash, StringComparison.CurrentCulture) = False Then
|
If Await VERAG_VARIABLES.Verifyhash(tempstr, salt, isPasswhash, intzahliterats, intzahl) = True AndAlso Await VERAG_VARIABLES.Verifyhash(pwDB, salt, isPasswDBhash, intzahliterats, intzahl) = True Then
|
||||||
Using cmd As New SqlCommand("UPDATE [VERAG_HOMEPAGE].[dbo].[Users] SET Password=@Password WHERE Username=@Username AND UserId=@UserId")
|
Using cmd As New SqlCommand("UPDATE [VERAG_HOMEPAGE].[dbo].[Users] SET Password=@Password WHERE Username=@Username AND UserId=@UserId")
|
||||||
' cmd.CommandType = CommandType.StoredProcedure
|
' cmd.CommandType = CommandType.StoredProcedure
|
||||||
cmd.Parameters.AddWithValue("@Username", usrname)
|
cmd.Parameters.AddWithValue("@Username", usrname)
|
||||||
@@ -522,79 +525,29 @@ Partial Class login_Change_PW
|
|||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
Function gensaltPassw(username As String, password As String, email As String, isnewSession As Boolean) As String
|
|
||||||
Dim intzahl = RandomInteger(Math.Pow(2, 8), Math.Pow(2, 12))
|
Async Function gensaltPasswAsync(username As String, password As String, salt As Byte(), intzahliterats As Integer, intzahl As Integer, email As String, isnewSession As Boolean) As Task(Of Byte())
|
||||||
If isnewSession = False Then
|
If isnewSession = False Then
|
||||||
Dim token As String
|
Dim token As Byte()
|
||||||
If String.IsNullOrEmpty(username) = False AndAlso String.IsNullOrEmpty(email) = False Then
|
'Dim tok As Byte = Convert.ToBase64String(time.Concat(Key).ToArray())
|
||||||
If String.IsNullOrEmpty(password) = False Then
|
Dim tok As String = password
|
||||||
Try
|
token = Await VERAG_VARIABLES.HashPassword(password, salt, intzahliterats, intzahl)
|
||||||
|
Return token
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl)
|
|
||||||
Dim tok As String = password
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 1491, intzahl))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
Catch Ex As Exception
|
|
||||||
|
|
||||||
'Dim Msg, Style, Title As String
|
|
||||||
'Msg = "Token Generation failed" & vbCrLf & "A new E-mail has been sent to the intern e-mail given."
|
|
||||||
'Style = vbRetry + vbExclamation + vbDefaultButton1
|
|
||||||
'Title = "Error05: Token-Generierung"
|
|
||||||
'MsgBox(Msg, Style, Title)
|
|
||||||
'If MsgBox(Msg, Style, Title).Retry Then
|
|
||||||
'genToken(username, password, email)
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl)
|
|
||||||
Dim tok As String = password
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 901, intzahl))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
End Try
|
|
||||||
Else
|
|
||||||
Return String.Empty
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
Return String.Empty
|
|
||||||
Else
|
|
||||||
Return "Error in Session ID. It has changed. Please check admin!"
|
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Function gennewsaltToken(username As String, password As String, email As String, CustomerID As String, isnewSession As Boolean, theUserID As String) As String
|
Async Function gennewsaltToken(username As String, password As String, email As String, salt As Byte(), CustomerID As String, intzahlits As Integer, intzahl As Integer, isnewSession As Boolean, theUserID As String) As Task(Of String)
|
||||||
If isnewSession = False Then
|
If isnewSession = False Then
|
||||||
Dim time() As Byte = BitConverter.GetBytes(DateTime.UtcNow.ToBinary())
|
Dim time() As Byte = BitConverter.GetBytes(DateTime.UtcNow.ToBinary())
|
||||||
Dim Key() As Byte = Guid.NewGuid().ToByteArray()
|
Dim Key() As Byte = Guid.NewGuid().ToByteArray()
|
||||||
Dim token As String
|
Dim token As Byte()
|
||||||
|
|
||||||
Dim intzahl = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 14))
|
|
||||||
Dim intzahl2 = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 14))
|
|
||||||
Dim Rand As Random = New Random
|
|
||||||
If String.IsNullOrEmpty(theUserID) = False Then
|
If String.IsNullOrEmpty(theUserID) = False Then
|
||||||
Try
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl)
|
|
||||||
Dim tok As String = Convert.ToBase64String(time.Concat(Key).ToArray())
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 10191, intzahl))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
Catch Ex As Exception
|
|
||||||
'Dim Msg, Style, Title As String
|
|
||||||
'Msg = "Token Generation failed" & vbCrLf & "A new E-mail has been sent to the intern e-mail given."
|
|
||||||
'Style = vbRetry + vbExclamation + vbDefaultButton1
|
|
||||||
'Title = "Error05: Token-Generierung"
|
|
||||||
'MsgBox(Msg, Style, Title)
|
|
||||||
'If MsgBox(Msg, Style, Title).Retry Then
|
|
||||||
'genToken(username, password, email)
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl2)
|
|
||||||
Dim tok As String = Convert.ToBase64String(time.Concat(Key).ToArray())
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 10191, intzahl2))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
|
|
||||||
End Try
|
Dim tok As String = Convert.ToBase64String(time.Concat(Key).ToArray())
|
||||||
|
token = Await VERAG_VARIABLES.HashPassword(tok, salt, intzahlits, intzahl)
|
||||||
|
|
||||||
|
Return VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(Convert.ToBase64String(token))
|
||||||
Else
|
Else
|
||||||
Return String.Empty
|
Return String.Empty
|
||||||
End If
|
End If
|
||||||
@@ -603,72 +556,33 @@ Partial Class login_Change_PW
|
|||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Function gensaltToken(STrings As String) As String
|
Async Function gensaltTokenAsync(STrings As String) As Task(Of String)
|
||||||
If String.IsNullOrEmpty(STrings) = False Then
|
If String.IsNullOrEmpty(STrings) = False Then
|
||||||
Dim time() As Byte = BitConverter.GetBytes(DateTime.UtcNow.ToBinary())
|
Dim token As Byte()
|
||||||
Dim Key() As Byte = Guid.NewGuid().ToByteArray()
|
|
||||||
Dim token As String
|
|
||||||
|
|
||||||
Dim intzahl = RandomInteger(Math.Pow(2, 5), Math.Pow(2, 7))
|
Dim salt As Byte() = VERAG_VARIABLES.GenerateSalt(intzahl)
|
||||||
Dim Rand As Random = New Random
|
Dim tok As String = STrings
|
||||||
|
token = Await VERAG_VARIABLES.HashPassword(tok, salt, intzahliterats, intzahl)
|
||||||
|
|
||||||
Try
|
Return Convert.ToBase64String(token)
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl)
|
|
||||||
Dim tok As String = VERAG_PROG_ALLGEMEIN.cCryptography3.Decrypt(STrings)
|
Return VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(Convert.ToBase64String(token))
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 10191, intzahl))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
Catch Ex As Exception
|
|
||||||
Dim intzahl2 = RandomInteger(Math.Pow(2, 5), Math.Pow(2, 7))
|
|
||||||
'Dim Msg, Style, Title As String
|
|
||||||
'Msg = "Token Generation failed" & vbCrLf & "A new E-mail has been sent to the intern e-mail given."
|
|
||||||
'Style = vbRetry + vbExclamation + vbDefaultButton1
|
|
||||||
'Title = "Error05: Token-Generierung"
|
|
||||||
'MsgBox(Msg, Style, Title)
|
|
||||||
'If MsgBox(Msg, Style, Title).Retry Then
|
|
||||||
'genToken(username, password, email)
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl2)
|
|
||||||
Dim tok As String = VERAG_PROG_ALLGEMEIN.cCryptography3.Decrypt(STrings)
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 10191, intzahl2))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
|
|
||||||
End Try
|
|
||||||
Else
|
Else
|
||||||
Dim token As String
|
Dim token As Byte()
|
||||||
|
Dim intzahliterats = RandomInteger(Math.Pow(2, 10), Math.Pow(2, 12))
|
||||||
|
Dim intzahl = RandomInteger(Math.Pow(2, 5), Math.Pow(2, 7))
|
||||||
|
|
||||||
Dim intzahl = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 14))
|
Dim salt As Byte() = VERAG_VARIABLES.GenerateSalt(intzahl)
|
||||||
Dim Rand As Random = New Random
|
|
||||||
|
|
||||||
Try
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl)
|
|
||||||
Dim tok As String = STrings
|
Dim tok As String = STrings
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 10191, intzahl))
|
token = Await VERAG_VARIABLES.HashPassword(tok, salt, intzahliterats, intzahl)
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
Catch Ex As Exception
|
|
||||||
Dim intzahl2 = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 14))
|
|
||||||
'Dim Msg, Style, Title As String
|
|
||||||
'Msg = "Token Generation failed" & vbCrLf & "A new E-mail has been sent to the intern e-mail given."
|
|
||||||
'Style = vbRetry + vbExclamation + vbDefaultButton1
|
|
||||||
'Title = "Error05: Token-Generierung"
|
|
||||||
'MsgBox(Msg, Style, Title)
|
|
||||||
'If MsgBox(Msg, Style, Title).Retry Then
|
|
||||||
'genToken(username, password, email)
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl2)
|
|
||||||
Dim tok As String = STrings
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 10191, intzahl2))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
|
|
||||||
End Try
|
Return Convert.ToBase64String(token)
|
||||||
|
|
||||||
|
Return VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(Convert.ToBase64String(token))
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
Public Function RandomInteger(ByVal min As Integer, ByVal _
|
Shared Function RandomInteger(ByVal min As Integer, ByVal _
|
||||||
max As Integer) As Integer
|
max As Integer) As Integer
|
||||||
Dim rand As New RNGCryptoServiceProvider()
|
Dim rand As New RNGCryptoServiceProvider()
|
||||||
Dim one_byte() As Byte = {0}
|
Dim one_byte() As Byte = {0}
|
||||||
|
|||||||
@@ -605,8 +605,8 @@ Partial Class ForgotPW
|
|||||||
|
|
||||||
Async Function Findtokenhashsalt(username As String, password As String, email As String, customerID As String, isusernameright As Boolean, isuserIDright As Boolean, isuserEmailright As Boolean, isnewsess As Boolean, UserID As String) As Task(Of String)
|
Async Function Findtokenhashsalt(username As String, password As String, email As String, customerID As String, isusernameright As Boolean, isuserIDright As Boolean, isuserEmailright As Boolean, isnewsess As Boolean, UserID As String) As Task(Of String)
|
||||||
Dim t As Task(Of String)
|
Dim t As Task(Of String)
|
||||||
t = Task.Run(Function() As String
|
t = Task.Run(Async Function() As Task(Of String)
|
||||||
Return gensaltToken(username, password, email, customerID, isusernameright, isuserIDright, isuserEmailright, isnewsess, UserID)
|
Return Await gensaltToken(username, password, email, customerID, isusernameright, isuserIDright, isuserEmailright, isnewsess, UserID)
|
||||||
End Function)
|
End Function)
|
||||||
Return Await t
|
Return Await t
|
||||||
End Function
|
End Function
|
||||||
@@ -755,39 +755,24 @@ Partial Class ForgotPW
|
|||||||
Return min + (max - min) * (one_byte(0) / 255)
|
Return min + (max - min) * (one_byte(0) / 255)
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Function gensaltToken(username As String, password As String, email As String, CustomerID As String, isusrnmright As Boolean, iscstmIDright As Boolean, isemailright As Boolean, isnewSession As Boolean, theUserID As String) As String
|
Async Function gensaltToken(username As String, password As String, email As String, CustomerID As String, isusrnmright As Boolean, iscstmIDright As Boolean, isemailright As Boolean, isnewSession As Boolean, theUserID As String) As Task(Of String)
|
||||||
If isnewSession = False Then
|
If isnewSession = False Then
|
||||||
Dim time() As Byte = BitConverter.GetBytes(DateTime.UtcNow.ToBinary())
|
Dim time() As Byte = BitConverter.GetBytes(DateTime.UtcNow.ToBinary())
|
||||||
Dim Key() As Byte = Guid.NewGuid().ToByteArray()
|
Dim Key() As Byte = Guid.NewGuid().ToByteArray()
|
||||||
Dim token As String
|
Dim token As Byte()
|
||||||
|
|
||||||
Dim intzahl = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 14))
|
Dim intzahl = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 14))
|
||||||
Dim intzahl2 = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 14))
|
Dim intzahl2 = RandomInteger(Math.Pow(2, 7), Math.Pow(2, 10))
|
||||||
|
Dim intzahliterats = RandomInteger(Math.Pow(2, 5), Math.Pow(2, 10))
|
||||||
Dim Rand As Random = New Random
|
Dim Rand As Random = New Random
|
||||||
If isusrnmright = True And iscstmIDright = True And isemailright = True AndAlso String.IsNullOrEmpty(theUserID) = False Then
|
If isusrnmright = True And iscstmIDright = True And isemailright = True AndAlso String.IsNullOrEmpty(theUserID) = False Then
|
||||||
Try
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl)
|
|
||||||
Dim tok As String = Convert.ToBase64String(time.Concat(Key).ToArray())
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 10191, intzahl))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
Catch Ex As Exception
|
|
||||||
'Dim Msg, Style, Title As String
|
|
||||||
'Msg = "Token Generation failed" & vbCrLf & "A new E-mail has been sent to the intern e-mail given."
|
|
||||||
'Style = vbRetry + vbExclamation + vbDefaultButton1
|
|
||||||
'Title = "Error05: Token-Generierung"
|
|
||||||
'MsgBox(Msg, Style, Title)
|
|
||||||
'If MsgBox(Msg, Style, Title).Retry Then
|
|
||||||
'genToken(username, password, email)
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(intzahl2)
|
|
||||||
Dim tok As String = Convert.ToBase64String(time.Concat(Key).ToArray())
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(tok, salt, 10191, intzahl2))
|
|
||||||
salt = String.Empty
|
|
||||||
tok = String.Empty
|
|
||||||
Return token
|
|
||||||
|
|
||||||
End Try
|
Dim salt As Byte() = VERAG_VARIABLES.GenerateSalt(intzahl)
|
||||||
|
'Dim tok As Byte = Convert.ToBase64String(time.Concat(Key).ToArray())
|
||||||
|
Dim tok As String = Convert.ToBase64String(time.Concat(Key).ToArray())
|
||||||
|
token = Await VERAG_VARIABLES.HashPassword(tok, salt, intzahliterats, intzahl)
|
||||||
|
|
||||||
|
Return Convert.ToBase64String(token)
|
||||||
Else
|
Else
|
||||||
Return String.Empty
|
Return String.Empty
|
||||||
End If
|
End If
|
||||||
@@ -835,7 +820,6 @@ Partial Class ForgotPW
|
|||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
|
||||||
Function RandomString(r As Random, max As Integer) As String
|
Function RandomString(r As Random, max As Integer) As String
|
||||||
Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!§$%&/?="
|
Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!§$%&/?="
|
||||||
Dim sb As New StringBuilder
|
Dim sb As New StringBuilder
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<%@ Page Language="VB" Debug="true" AutoEventWireup="false" CodeFile="login_FLEX.aspx.vb" Inherits="login_FLEX" EnableSessionState="True" %>
|
<%@ Page Language="VB" Debug="true" AutoEventWireup="false" CodeFile="login_FLEX.aspx.vb" Inherits="login_FLEX" EnableSessionState="True" Async="true" %>
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
Imports System.Data.SqlClient
|
Imports System.Data.SqlClient
|
||||||
Imports System.Data
|
Imports System.Data
|
||||||
Imports System.Security.Cryptography
|
Imports System.Security.Cryptography
|
||||||
|
|
||||||
Partial Class login_FLEX
|
Partial Class login_FLEX
|
||||||
Inherits System.Web.UI.Page
|
Inherits System.Web.UI.Page
|
||||||
|
Private Customer_ID As String = String.Empty
|
||||||
Dim Customer_ID As String = String.Empty
|
Private UserNaMe As String = String.Empty
|
||||||
Dim UserNaMe As String = String.Empty
|
Private passw As String = String.Empty
|
||||||
Dim passw As String = String.Empty
|
Private USERID As String = String.Empty
|
||||||
Dim USERID As String = String.Empty
|
Private salt As Byte()
|
||||||
|
Private intzahl As Integer
|
||||||
|
Private intzahliterats As Integer
|
||||||
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
|
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
|
||||||
VERAG_VARIABLES.initerrorcount()
|
VERAG_VARIABLES.initerrorcount()
|
||||||
If Page.IsPostBack = True Then
|
If Page.IsPostBack = True Then
|
||||||
@@ -16,8 +17,11 @@ Partial Class login_FLEX
|
|||||||
Else
|
Else
|
||||||
Page.MaintainScrollPositionOnPostBack = False
|
Page.MaintainScrollPositionOnPostBack = False
|
||||||
End If
|
End If
|
||||||
|
intzahl = VERAG_VARIABLES.RandomInteger(Math.Pow(2, 7), Math.Pow(2, 10))
|
||||||
|
intzahliterats = VERAG_VARIABLES.getiterationnumber
|
||||||
|
salt = VERAG_VARIABLES.GenerateSalt(intzahl)
|
||||||
End Sub
|
End Sub
|
||||||
Protected Sub ValidateUser(sender As Object, e As EventArgs)
|
Protected Async Sub ValidateUser(sender As Object, e As EventArgs)
|
||||||
|
|
||||||
' cDBFunctions.GetNewOpenConnection()
|
' cDBFunctions.GetNewOpenConnection()
|
||||||
Dim ConnectionString = ""
|
Dim ConnectionString = ""
|
||||||
@@ -183,16 +187,6 @@ Partial Class login_FLEX
|
|||||||
dr.Close()
|
dr.Close()
|
||||||
con.Close()
|
con.Close()
|
||||||
End Using
|
End Using
|
||||||
Using cmd2 As New SqlCommand("UPDATE [VERAG_HOMEPAGE].[dbo].[Users] SET [LastLoginDate]=@Date WHERE [Username]=@Username AND [KundenNr]=@KundenNr AND Password=@Password")
|
|
||||||
cmd2.Parameters.AddWithValue("Date", Date.Now.ToString)
|
|
||||||
cmd2.Parameters.AddWithValue("Username", UserNaMe)
|
|
||||||
cmd2.Parameters.AddWithValue("KundenNr", Customer_ID)
|
|
||||||
cmd2.Parameters.AddWithValue("Password", passw)
|
|
||||||
cmd2.Connection = con
|
|
||||||
con.Open()
|
|
||||||
cmd2.ExecuteNonQuery()
|
|
||||||
con.Close()
|
|
||||||
End Using
|
|
||||||
End Using
|
End Using
|
||||||
|
|
||||||
If String.IsNullOrEmpty(tb2_M.Text) = False AndAlso String.IsNullOrEmpty(tb2.Text) = True Then
|
If String.IsNullOrEmpty(tb2_M.Text) = False AndAlso String.IsNullOrEmpty(tb2.Text) = True Then
|
||||||
@@ -204,7 +198,10 @@ Partial Class login_FLEX
|
|||||||
'Dim str = gensaltToken(UserNaMe, passw, Customer_ID, Session.IsNewSession)
|
'Dim str = gensaltToken(UserNaMe, passw, Customer_ID, Session.IsNewSession)
|
||||||
'MsgBox(str)
|
'MsgBox(str)
|
||||||
'End If
|
'End If
|
||||||
FormsAuthentication.RedirectFromLoginPage(UserNaMe, True)
|
Dim hashpw As Byte() = Await VERAG_VARIABLES.HashPassword(passw, salt, intzahliterats, intzahl)
|
||||||
|
If Await VERAG_VARIABLES.Verifyhash(passw, salt, hashpw, intzahliterats, intzahl) = True Then
|
||||||
|
FormsAuthentication.RedirectFromLoginPage(UserNaMe, True)
|
||||||
|
End If
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
@@ -220,58 +217,38 @@ Partial Class login_FLEX
|
|||||||
Session.Add("CustomerID", Customer_ID)
|
Session.Add("CustomerID", Customer_ID)
|
||||||
Session.Add("PW", passw)
|
Session.Add("PW", passw)
|
||||||
End Sub
|
End Sub
|
||||||
Function gensaltToken(username As String, password As String, CustomerID As String, isnewSession As Boolean) As String
|
Async Function gensaltToken(username As String, password As String, CustomerID As String, salt As Byte(), intzahliterats As Integer, intzahl As Integer, isnewSession As Boolean) As Threading.Tasks.Task(Of String)
|
||||||
If isnewSession = False Then
|
If isnewSession = False Then
|
||||||
Dim time() As Byte = BitConverter.GetBytes(DateTime.UtcNow.ToBinary())
|
Dim time() As Byte = BitConverter.GetBytes(DateTime.UtcNow.ToBinary())
|
||||||
Dim Key() As Byte = Guid.NewGuid().ToByteArray()
|
Dim Key() As Byte = Guid.NewGuid().ToByteArray()
|
||||||
Dim token As String
|
Dim token As Byte()
|
||||||
Dim MyMin As Integer = 155, MyMax As Integer = 875, My1stRandomNumber As Integer, My2ndRandomNumber As Integer
|
|
||||||
' Create a random number generator
|
|
||||||
Dim Generator As System.Random = New System.Random()
|
|
||||||
' Get a random number >= MyMin and <= MyMax
|
|
||||||
My1stRandomNumber = Generator.Next(MyMin, MyMax + 1) ' Note: Next function returns numbers _less than_ max, so pass in max + 1 to include max as a possible value
|
|
||||||
|
|
||||||
' Get another random number (don't create a new generator, use the same one)
|
token = Await VERAG_VARIABLES.HashPassword(Convert.ToBase64String(time.Concat(Key).ToArray()), salt, intzahliterats, intzahl)
|
||||||
My2ndRandomNumber = Generator.Next(MyMin, MyMax + 1)
|
Return VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(Convert.ToBase64String(token))
|
||||||
If String.IsNullOrEmpty(username) = False And String.IsNullOrEmpty(passw) = False And String.IsNullOrEmpty(CustomerID) = False Then
|
|
||||||
Try
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(My1stRandomNumber)
|
|
||||||
Dim passw As String = password
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(passw, salt, 101, My1stRandomNumber))
|
|
||||||
Session.Add("Tokensalt", VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(token))
|
|
||||||
Session.Add("salt", VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(salt))
|
|
||||||
Return token
|
|
||||||
Catch Ex As Exception
|
|
||||||
'Dim Msg, Style, Title As String
|
|
||||||
'Msg = "Token Generation failed" & vbCrLf & "A new E-mail has been sent to the intern e-mail given."
|
|
||||||
'Style = vbRetry + vbExclamation + vbDefaultButton1
|
|
||||||
'Title = "Error05: Token-Generierung"
|
|
||||||
'MsgBox(Msg, Style, Title)
|
|
||||||
'If MsgBox(Msg, Style, Title).Retry Then
|
|
||||||
'genToken(username, password, email)
|
|
||||||
Dim salt As String = VERAG_VARIABLES.GenerateSalt(My1stRandomNumber)
|
|
||||||
Dim passw As String = password
|
|
||||||
token = VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(VERAG_VARIABLES.HashPassword(passw, salt, 101, My2ndRandomNumber))
|
|
||||||
|
|
||||||
|
'Dim Msg, Style, Title As String
|
||||||
|
'Msg = "Token Generation failed" & vbCrLf & "A new E-mail has been sent to the intern e-mail given."
|
||||||
|
'Style = vbRetry + vbExclamation + vbDefaultButton1
|
||||||
|
'Title = "Error05: Token-Generierung"
|
||||||
|
'MsgBox(Msg, Style, Title)
|
||||||
|
'If MsgBox(Msg, Style, Title).Retry Then
|
||||||
|
'genToken(username, password, email)
|
||||||
|
token = Await VERAG_VARIABLES.HashPassword(Convert.ToBase64String(time.Concat(Key).ToArray()), salt, intzahliterats, intzahl)
|
||||||
|
Return VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(Convert.ToBase64String(token))
|
||||||
|
|
||||||
'Else
|
'Else
|
||||||
'MsgBox("Token-Generation has not been successful." & vbCrLf & "Please try again in five seconds!")
|
'MsgBox("Token-Generation has not been successful." & vbCrLf & "Please try again in five seconds!")
|
||||||
Dim jetzt As DateTime = DateTime.UtcNow
|
Dim jetzt As DateTime = DateTime.UtcNow
|
||||||
Dim wenn As DateTime = DateTime.UtcNow.AddSeconds(-5)
|
Dim wenn As DateTime = DateTime.UtcNow.AddSeconds(-5)
|
||||||
|
|
||||||
|
If jetzt < wenn Then
|
||||||
|
Return "NotYet"
|
||||||
|
Else
|
||||||
|
token = Await VERAG_VARIABLES.HashPassword(Convert.ToBase64String(time.Concat(Key).ToArray()), salt, intzahliterats, intzahl)
|
||||||
|
Return VERAG_PROG_ALLGEMEIN.cCryptography3.Encrypt(Convert.ToBase64String(token))
|
||||||
|
'End If
|
||||||
|
End If
|
||||||
|
|
||||||
If jetzt < wenn Then
|
|
||||||
Return "NotYet"
|
|
||||||
Else
|
|
||||||
token = gensaltToken(username, password, CustomerID, Session.IsNewSession)
|
|
||||||
Return token
|
|
||||||
'End If
|
|
||||||
End If
|
|
||||||
End Try
|
|
||||||
Else
|
|
||||||
Return String.Empty
|
|
||||||
End If
|
|
||||||
Else
|
|
||||||
Return "Error in Session ID. It has changed. Please check admin!"
|
|
||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
End Class
|
End Class
|
||||||
@@ -10,6 +10,8 @@
|
|||||||
<package id="K4os.Compression.LZ4" version="1.2.6" targetFramework="net47" />
|
<package id="K4os.Compression.LZ4" version="1.2.6" targetFramework="net47" />
|
||||||
<package id="K4os.Compression.LZ4.Streams" version="1.2.6" targetFramework="net47" />
|
<package id="K4os.Compression.LZ4.Streams" version="1.2.6" targetFramework="net47" />
|
||||||
<package id="K4os.Hash.xxHash" version="1.0.6" targetFramework="net47" />
|
<package id="K4os.Hash.xxHash" version="1.0.6" targetFramework="net47" />
|
||||||
|
<package id="Konscious.Security.Cryptography.Argon2" version="1.2.1" targetFramework="net47" />
|
||||||
|
<package id="Konscious.Security.Cryptography.Blake2" version="1.0.9" targetFramework="net47" />
|
||||||
<package id="Microsoft.CodeAnalysis.Analyzers" version="3.0.0" targetFramework="net47" developmentDependency="true" />
|
<package id="Microsoft.CodeAnalysis.Analyzers" version="3.0.0" targetFramework="net47" developmentDependency="true" />
|
||||||
<package id="Microsoft.CodeAnalysis.Common" version="3.9.0" targetFramework="net47" />
|
<package id="Microsoft.CodeAnalysis.Common" version="3.9.0" targetFramework="net47" />
|
||||||
<package id="Microsoft.CodeAnalysis.CSharp" version="3.9.0" targetFramework="net47" />
|
<package id="Microsoft.CodeAnalysis.CSharp" version="3.9.0" targetFramework="net47" />
|
||||||
|
|||||||
Reference in New Issue
Block a user