Password Generator





9
Date Submitted Sat. Sep. 23rd, 2006 5:53 AM
Revision 1 of 1
Beginner vbdotnetboy
Tags "Random Generation" | .Net | VB.NET
Comments 1 comments
Description:
Call one of the overloaded functions and a you will have a randomly generated password.

Generate() - Will generate a password 13 or (more/less) characters in length ranging from A-Z a-z 0-9 and other characters such as @ # %... etc.

Generate(ByVal AsciiMin As Integer, ByVal AsciiMax As Integer)
Generate(ByVal AsciiMin As Char, ByVal AsciiMax As Char) - Allows you to set your ASCII range if you wish not to include number for example.

Generate(ByVal ExcludeValues As String()) - Works like Generate() buts characters passed in the array will not be used to generate the password.

Generate(ByVal AsciiMin As Integer, ByVal AsciiMax As Integer, ByVal ExcludeValues As String())
Generate(ByVal AsciiMin As Char, ByVal AsciiMax As Char, ByVal ExcludeValues As String()) - Works like Generate(ByVal AsciiMin As Integer, ByVal AsciiMax As Integer) & Generate(ByVal AsciiMin As Char, ByVal AsciiMax As Char), but allows you to also exclude characters that you do not wish the generator to use.



UPDATE
03/06/2006: Included use of Phill64's TrueRandom2 class for generating random numbers. Also overloaded the constructor so that a length can be set for the password, if the length is not set the default is set to 13.

Option Explicit On
Option Strict On

Imports System
Imports System.Text

Public Class PasswordGenerator
    Private PWD_LENGTH As Integer

#Region " Random Number Generation "
    'The following class and code in this region was designed
    'by Phill64 on http://www.vbforums.com.  All credit for
    'random number generation goes to him.
    Protected Class TrueRandom2
        Public Function GetDouble() As Double
            Dim r As New Security.Cryptography.RNGCryptoServiceProvider

            Dim bt(15) As Byte
            r.GetNonZeroBytes(bt)
            Dim d As Double = bt(0)
            For i As Integer = 1 To 15
                d *= bt(i)
            Next
            d /= (10 ^ (Math.Floor(d).ToString.Length))
            d -= Math.Floor(d)
            Return d
        End Function

        Public Function GetNext(ByVal lower As Integer, ByVal upper As Integer) As Integer
            'returns a random itneger between specified bounds
            'ratio a random decimal number to the required bounds

            'Changed CInt to Convert.ToInt32 Derek
            Return Convert.ToInt32((lower + (GetDouble() * (upper - lower))))
        End Function

        Public Function GetNext() As Integer
            'returns a random integer

            'Changed CInt to Convert.ToInt32 Derek
            Return Convert.ToInt32((GetDouble() * Integer.MaxValue))
        End Function

        Public Function GetLong() As Long
            'Changed CLng to Convert.ToInt64 Derek
            Return Convert.ToInt64((GetDouble() * Long.MaxValue))
        End Function
    End Class
#End Region

    Public Sub New()
        PWD_LENGTH = 13
    End Sub

    Public Sub New(ByVal PasswordLength As Integer)
        PWD_LENGTH = PasswordLength
    End Sub

    Public Function Generate() As String
        Dim pwd As String = String.Empty
        Dim rng As New TrueRandom2

        For i As Integer = 1 To PWD_LENGTH
            Dim GoodValue As Boolean = False

            Do While Not GoodValue
                'ASCII value range 32 to 126.
                Dim value As Integer = rng.GetNext(32, 126)

                pwd += Convert.ToChar(value)
                GoodValue = True
            Loop
        Next

        rng = Nothing
        Return pwd
    End Function

    Public Function Generate(ByVal AsciiMin As Integer, ByVal AsciiMax As Integer) As String
        Dim pwd As String = String.Empty
        Dim rng As New TrueRandom2

        For i As Integer = 1 To PWD_LENGTH
            Dim GoodValue As Boolean = False

            Do While Not GoodValue
                'ASCII value range AsciiMin to AsciiMax, to get the correct
                'range we need to take AsciiMax - AsciiMin = (Ascii Range)
                Dim value As Integer = rng.GetNext(AsciiMin, AsciiMax)

                pwd += Convert.ToChar(value)
                GoodValue = True
            Loop
        Next

        rng = Nothing
        Return pwd
    End Function

    Public Function Generate(ByVal AsciiMin As Char, ByVal AsciiMax As Char) As String
        Dim pwd As String = String.Empty
        Dim rng As New TrueRandom2
        Dim iAsciiMin As Integer = Convert.ToInt32(AsciiMin)
        Dim iAsciiMax As Integer = Convert.ToInt32(AsciiMax)

        For i As Integer = 1 To PWD_LENGTH
            Dim GoodValue As Boolean = False

            Do While Not GoodValue
                'ASCII value range AsciiMin to AsciiMax, to get the correct
                'range we need to take AsciiMax - AsciiMin = (Ascii Range)
                Dim value As Integer = rng.GetNext(iAsciiMin, iAsciiMax)

                pwd += Convert.ToChar(value)
                GoodValue = True
            Loop
        Next

        rng = Nothing
        Return pwd
    End Function

    Public Function Generate(ByVal ExcludeValues As String()) As String
        Dim pwd As String = String.Empty
        Dim rng As New TrueRandom2
        Dim ASCII_VAL(ExcludeValues.Length - 1) As Integer

        'Convert the excluded values to the the ASCII
        'equivalent of the character represention and
        'add it to the ASCII_VAL array.
        For i As Integer = 0 To ExcludeValues.Length - 1
            ASCII_VAL(i) = Convert.ToInt32(ExcludeValues(i).Chars(0))
        Next

        Array.Sort(ASCII_VAL)
        For i As Integer = 1 To PWD_LENGTH
            Dim GoodValue As Boolean = False

            Do While Not GoodValue
                'ASCII value range 32 to 126.
                Dim value As Integer = rng.GetNext(32, 126)

                'Determine if the value that was generated is
                'not an excluded value.
                If Array.BinarySearch(ASCII_VAL, value) < 0 Then
                    pwd += Convert.ToChar(value)
                    GoodValue = True
                End If
            Loop
        Next

        rng = Nothing
        Return pwd
    End Function

    Public Function Generate(ByVal AsciiMin As Integer, ByVal AsciiMax As Integer, ByVal ExcludeValues As String()) As String
        Dim pwd As String = String.Empty
        Dim rng As New TrueRandom2
        Dim ASCII_VAL(ExcludeValues.Length - 1) As Integer

        'Convert the excluded values to the the ASCII
        'equivalent of the character represention and
        'add it to the ASCII_VAL array.
        For i As Integer = 0 To ExcludeValues.Length - 1
            ASCII_VAL(i) = Convert.ToInt32(ExcludeValues(i).Chars(0))
        Next

        Array.Sort(ASCII_VAL)
        For i As Integer = 1 To PWD_LENGTH
            Dim GoodValue As Boolean = False

            Do While Not GoodValue
                'ASCII value range AsciiMin to AsciiMax, to get the correct
                'range we need to take AsciiMax - AsciiMin = (Ascii Range)
                Dim value As Integer = rng.GetNext(AsciiMin, AsciiMax)

                'Determine if the value that was generated is
                'not an excluded value.
                If Array.BinarySearch(ASCII_VAL, value) < 0 Then
                    pwd += Convert.ToChar(value)
                    GoodValue = True
                End If
            Loop
        Next

        rng = Nothing
        Return pwd
    End Function

    Public Function Generate(ByVal AsciiMin As Char, ByVal AsciiMax As Char, ByVal ExcludeValues As String()) As String
        Dim pwd As String = String.Empty
        Dim rng As New TrueRandom2
        Dim iAsciiMin As Integer = Convert.ToInt32(AsciiMin)
        Dim iAsciiMax As Integer = Convert.ToInt32(AsciiMax)
        Dim ASCII_VAL(ExcludeValues.Length - 1) As Integer

        'Convert the excluded values to the the ASCII
        'equivalent of the character represention and
        'add it to the ASCII_VAL array.
        For i As Integer = 0 To ExcludeValues.Length - 1
            ASCII_VAL(i) = Convert.ToInt32(ExcludeValues(i).Chars(0))
        Next

        Array.Sort(ASCII_VAL)
        For i As Integer = 1 To PWD_LENGTH
            Dim GoodValue As Boolean = False

            Do While Not GoodValue
                'ASCII value range AsciiMin to AsciiMax, to get the correct
                'range we need to take AsciiMax - AsciiMin = (Ascii Range)
                Dim value As Integer = rng.GetNext(iAsciiMin, iAsciiMax)

                'Determine if the value that was generated is
                'not an excluded value.
                If Array.BinarySearch(ASCII_VAL, value) < 0 Then
                    pwd += Convert.ToChar(value)
                    GoodValue = True
                End If
            Loop
        Next

        rng = Nothing
        Return pwd
    End Function
End Class
 

Derek Klingman

'*************************************************
'* Derek Klingman
'*************************************************
CSSI - Company I work fo

Comments

Comments Wow
Thu. Jul. 5th, 2007 8:41 AM    Beginner babakzawari

Voting