VB.NETでランダムパスワードジェネレータを作成しようとしています
これまでのところこれを持っていますが、それは私がやろうとしていることの最初のセクションを返すだけです
チェックボックスとしてのパスワードのタイプには、次の順序で3つの入力があります。
Numeric
Alphabetic
Symbols
数値をチェックした場合は数値のパスワードを返しますが、数値とアルファベットをチェックした場合は数値のパスワードのみを返しますが、数値をオフにしてアルファベットのみをチェックした場合はアルファベットのパスワードを返します
アルファベットのパスワードにも3つのオプションがあります。
Uppercase
Lowercase
Mixed Case
アルファベットで使用すると、実際に正しいパスワードが返されます
これが私がこれまでに持っているコードです:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
C_Numeric.Checked = True
R_Upper.Checked = True
End Sub
Private Sub B_Generate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Generate.Click
Dim c_a As Boolean = False
Dim c_b As Boolean = False
Dim c_c As Boolean = False
Dim a As Integer
If C_Numeric.Checked = True Then
c_a = True
ElseIf C_Alphabetic.Checked = True Then
c_b = True
ElseIf C_Symbols.Checked = True Then
c_c = True
End If
If R_Lower.Checked = True Then
a = 1
ElseIf R_Upper.Checked = True Then
a = 2
ElseIf R_Mixed.Checked = True Then
a = 3
End If
If C_Numeric.Checked = True Or C_Alphabetic.Checked = True Or C_Symbols.Checked = True Then
TextBox1.Text = GenPass(NumericUpDown1.Value, c_a, c_b, c_c, a)
End If
End Sub
Function GenPass(ByVal Length As Integer, ByVal Num As Boolean, ByVal Alp As Boolean, ByVal Ascii As Boolean, ByVal Complexity As Integer)
Dim rand As New Random
Dim Pass As String = ""
Do Until Pass.Length = Length
Dim a As Integer
a = rand.Next(1, 3 + 1)
If a = 1 And Num = True Then
Pass += ChrW(rand.Next(Asc("0"), Asc("9") + 1))
End If
If a = 2 And Alp = True Then
If Complexity = 1 Then
Pass += ChrW(rand.Next(Asc("a"), Asc("z") + 1))
ElseIf Complexity = 2 Then
Pass += ChrW(rand.Next(Asc("A"), Asc("Z") + 1))
ElseIf Complexity = 3 Then
Dim b As Integer
b = rand.Next(1, 2 + 1)
If b = 1 Then
Pass += ChrW(rand.Next(Asc("A"), Asc("Z") + 1))
ElseIf b = 2 Then
Pass += ChrW(rand.Next(Asc("a"), Asc("z") + 1))
End If
End If
End If
If a = 3 And Ascii = True Then
Dim b As Integer
b = rand.Next(1, 4 + 1)
If b = 1 Then
Pass += ChrW(rand.Next(Asc("!"), Asc("/") + 1))
ElseIf b = 2 Then
Pass += ChrW(rand.Next(Asc(":"), Asc("@") + 1))
ElseIf b = 3 Then
Pass += ChrW(rand.Next(Asc("["), Asc("`") + 1))
ElseIf b = 4 Then
Pass += ChrW(rand.Next(Asc("{"), Asc("~") + 1))
End If
End If
Loop
Return (Pass)
End Function
例(すべての回答で長さが16であると仮定):
混合ケースで数値とアルファベットを選択すると、次のようになります。
eVOv3fyTmW7mvH24 CZOXVzeo1EzLu7Al V313p9VLW0Bz7Zfi
しかし、代わりに次を返します。
8343299372194893 7303963979299152 3918539496952829
なぜそれが実際に望ましい結果を返さないのか、私には手がかりがありません
どんな助けでもいただければ幸いです
アダム