Веб программирование

Generate login

 
 

Всем привет, в этом уроке, я хочу показать, как сделать генератор паролей с добавлением в Listbox без повторений.
Итак, добавим на форму: button1, button2, listbox1, textbox1, textbox2, label1, label2, label3
Вот код:

Public Class Form1

Dim usablechar() As String
Dim charlist = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,1,2,3,4,5,6,7,8,9,0"
Dim random As New Random()
Dim Password As String
Dim a As Integer

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

   If TextBox1.Text <= 0 Then
           MsgBox("Длина должна быть > 0", MsgBoxStyle.Information, "PassWord")
           ListBox1.Items.Clear()
End If

If TextBox1.Text <= 34 Then
        a = 0
        Password = ""
        usablechar = Split(charlist, ",")           ' Разбиваем charlist на 1-мерный массив
        For i = 1 To CInt(TextBox1.Text)        ' Задаем длину
              a = random.Next(0, 62)
              Password = Password + usablechar(a)
        Next i
        TextBox2.Text = Password
        If Not ListBox1.Items.Contains(Password) Then           ' Если listbox <> Password, то
             ListBox1.Items.Add(Password)                             ' добавить
         Else
               Exit Sub                                                             'Выход из процедуры
         End if
Label4.Text = "Number: " & ListBox1.Items.Count ' Кол-во items
Else
MsgBox("Максимальная длина 34", MsgBoxStyle.Information, "PassWord")
End If
End Sub



Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
ListBox1.Items.Clear()
Label4.Text = "Number: 0"
TextBox1.Text = ""
TextBox2.Text = ""
End Sub
End Class



Есть вопросы? Спроси на нашем форуме!!
Stertor370 [22.06.2014 21:00]

http://vbbook.ru/delphi/1398486408/
Малодес, на байсик переписал. Орёл;)

revolution10 [20.07.2014 15:54]

У меня тоже есть генератор ключей, только пока цифровой(наверно скоро сделаю и буквенный). У меня он работает весь на рандомайзе(Randomize). Вот часть кода(наверно скоро напишу статью по этому делу):
Код на кнопку:
Private Sub Command2_Click()
Randomize
c0 = Fix(Rnd * 10) ' Делаем рандомное генерирование первой цифры нашего ключа. Ниже тоже самое, только последующих цифр
c1 = Fix(Rnd * 10)
c2 = Fix(Rnd * 10)
c3 = Fix(Rnd * 10)
c4 = Fix(Rnd * 10)
c5 = Fix(Rnd * 10)
c6 = Fix(Rnd * 10)
c7 = Fix(Rnd * 10)
c8 = Fix(Rnd * 10)
c9 = Fix(Rnd * 10)
c10 = Fix(Rnd * 10)
key0 = c0 & c1 & c2 & c3 & c4 & c5 & c6 & c7 & c8 & c9 & c10 ' "склеиваем" наши цифры в одно число
ComboBox.AddItem key0 ' Добавляем в комбо-бокс наше число(ключ)
' Ниже тоже самое, но со вторым и третьим ключом.
Randomize
c0 = Fix(Rnd * 10)
c1 = Fix(Rnd * 10)
c2 = Fix(Rnd * 10)
c3 = Fix(Rnd * 10)
c4 = Fix(Rnd * 10)
c5 = Fix(Rnd * 10)
c6 = Fix(Rnd * 10)
c7 = Fix(Rnd * 10)
c8 = Fix(Rnd * 10)
c9 = Fix(Rnd * 10)
c10 = Fix(Rnd * 10)
key1 = c0 & c1 & c2 & c3 & c4 & c5 & c6 & c7 & c8 & c9 & c10
ComboBox.AddItem key1

Randomize
c0 = Fix(Rnd * 10)
c1 = Fix(Rnd * 10)
c2 = Fix(Rnd * 10)
c3 = Fix(Rnd * 10)
c4 = Fix(Rnd * 10)
c5 = Fix(Rnd * 10)
c6 = Fix(Rnd * 10)
c7 = Fix(Rnd * 10)
c8 = Fix(Rnd * 10)
c9 = Fix(Rnd * 10)
c10 = Fix(Rnd * 10)
key2 = c0 & c1 & c2 & c3 & c4 & c5 & c6 & c7 & c8 & c9 & c10
ComboBox.AddItem key2
End Sub


Как видите я сделал отдельное рандомное генерирование каждой цифры, а потом "склеивание" в одно большое число и добавление всех трех ключей в комбо-бокс. Как я уже писал, напишу по этому делу статью, но позже (пока нет под рукой компа)

revolution10 [20.07.2014 15:56]

Извиняюсь, забыл написать, что желательно объявить переменные:
Dim c0 As Byte, c1 As Byte, c2 As Byte, c3 As Byte, c4 As Byte, c5 As Byte, c6 As Byte, c7 As Byte, c8 As Byte, c9 As Byte, c10 As Byte
Dim key0 As Variant, key1 As Variant, key2 As Variant

Zayas31RUS10 [04.12.2014 16:32]

еще один вариант) на VB6

Dim i, j, t As Byte
Dim SKey As String

Randomize
For j = 0 To 7 ' j - количество ключей
For i = 0 To 15 ' i - длина ключа
t = Int(Rnd * 255) ' Берем случайный код ASCII
Select Case t
Case 48 To 57: SKey = SKey & Chr(t) ' Если это цифры
Case 65 To 90: SKey = SKey & Chr(t) ' или буквы от A до Z
Case 97 To 122: SKey = SKey & Chr(t) ' или от a до z
'Case 192 To 255: SKey = SKey & Chr(t) ' или весь русский алфавит :D
' припишем символ к ключу
Case Else: i = i - 1 ' либо повтор
End Select
Next i
txtKeys.Text = txtKeys.Text & SKey & vbCrLf
SKey = ""
Next j

Stertor370 [04.12.2014 20:13]

Zayas31RUS, это еврейский вариант.

Zayas31RUS10 [04.12.2014 21:29]

Stertor, нуу я буду рад, если укажите на мои ошибки.
А что если мне нужна строка из 200 цифр?
Всеж лучше чем объявлять Сn байт, как сделал чувак выше, и писать функцию рандома для каждого символа.

Stertor370 [05.12.2014 15:35]

Ок. Обычно я не люблю выпендриваться, но когда меня об этом просят, трудно устоять...)
Свои выбоны я начну с того, что Rnd и любые аналогичные ей функции никоим образом недопустимо использовать для криптовки данных, ибо значения генерируемые ими на деле являются псевдослучайными. Серьёзные пароли с их помощью генерить нельзя. Но если честно, в моих быдлопрогах для спаминга, когда нужно нарегать много учёток на каком-нибудь сайте, чтобы потом слать с них спам, я юзаю аналогичный подход - врать не буду.

Вы
бон №2.
Не стоит в бейсике явно указывать типы переменных там, где это особо не нужно - рантайм сам разберется.

Вы*бон №3.
Твоя функция кое где сует непечатаемые символы - разберешься сам, как поправить?

Zayas31RUS10 [05.12.2014 21:26]

Stertor,
1 - согласен, но до чего-то серьезного мне еще далеко)
2 - да вот .NET понимает, а в моем VB6 без объявления i и j выдает "Variable not defined"
3 - vbCrLf? строка с символами 13, 10. Да, это я знаю.

Stertor370 [05.12.2014 23:08]

Скромность... Скромные люди редкие гости на vbbook. Очень редкие. Дай бог, чтобы твоя скромность пошла тебе на пользу.

@2 - да вот .NET понимает, а в моем VB6 без объявления i и j выдает "Variable not defined"@

Это потому, что у тебя включен режим защиты от непродекларированных переменных - Option Explicit
Объявляй переменные без уточнения их типа, вот так:

dim var1,var2



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.