Что нового

Генератор пароля

trizorka

Новичок
Сообщения
53
Репутация
4
Доброго времени суток.
Сделал генератор пароля, но он работает не совсем правильно: неправильно выдает установочную длину символов, при нажатии генерировать второй раз - выдает одни единицы. Подскажите в чем дело?

Код:
#include <GUIConstantsEx.au3>
	$line = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"

	$Win = GUICreate("", 8.85*60-1, 4*30-22, 350, 180)
	GUICtrlCreateLabel("Длина пароля", 5, 30, 1.8*50)					;надпись длина пароля
	$dlina_parolya = GUICtrlCreateInput ("4",  93, 27, 50)				        ;длина пароля
	$button = GUICtrlCreateButton("Генерировать", 15*30-6, 30-5, 1.7*50) 	;генерировать
	$simvoli = GUICtrlCreateInput ($line, 3, 2*30-3, 500)       
	GUISetState(@SW_SHOW, $win)

	While True
	Global  $msg = GUIGetMsg()
	If $msg =-3 Then Exit 
	If $msg = $button Then 
	a1($win)
	EndIf
	WEnd

Func RandPassGen()
	Local $sResult = ""
	$lineA = Guictrlread($simvoli)
	$dlinaA = GUICtrlRead($dlina_parolya)
	$line1 = StringStripWS ($lineA, 8)  		;Удаляем пробелы
    $aSplited = StringSplit($line1, "")  		;Разделяем по-буквенно
        for $i = 1 to $dlinaA
            $iRand = Random(0,UBound($aSplited) - 1)
            $sResult &= $aSplited[$iRand]     	;Собираем
         Next
		 Return $sResult
EndFunc
		
Func a1($hParent = 0)
    Local $hSettings, $iGOEM_Opt
    $iGOEM_Opt = Opt("GUIOnEventMode", 0)
    $hSettings_GUI = GUICreate("Пароль генерирован", 695, 40, -1, -1, -1, -1, $hParent)
	$simvoli = GUICtrlCreateInput(RandPassGen(), 8, 10, 13*50+23)    ;выдача пароля
    GUISetState(@SW_DISABLE, $hParent)
    GUISetState(@SW_SHOW, $hSettings_GUI)
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    Opt("GUIOnEventMode", $iGOEM_Opt)
    GUISetState(@SW_ENABLE, $hParent)
    GUIDelete($hSettings_GUI)
EndFunc
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
Код:
$simvoli = GUICtrlCreateInput(RandPassGen(), 8, 10, 13*50+23)    ;выдача пароля

"$simvoli = " удали.
 
Автор
T

trizorka

Новичок
Сообщения
53
Репутация
4
Точно! Что-то я ступил. А с количеством символов в пароле, что делать?
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Пароли 11111 генерирует
 
Автор
T

trizorka

Новичок
Сообщения
53
Репутация
4
Зачем мне запоминающиеся пароли. В моем скрипте проблема: при $dlina_parolya=50 первый раз генерируется длина символов 50, а второй может быть 51 или 52, сам не могу найти ошибку в скрипте.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
И первый раз может быть 50+.
Всё зависит от того сколько раз у тебя попадётся нулевой элемент, а он то занимает не одну позицию, поскольку содержит длинну строки, а это не один символ.
А он может попасться, потому что ты берешь Random от 0 (да ещё и дробный Random).
Код:
$aSplited = StringSplit($line1, "")         ;Разделяем по-буквенно
        for $i = 1 to $dlinaA
            $iRand = Random(0,UBound($aSplited) - 1)
            $sResult &= $aSplited[$iRand]       ;Собираем
         Next


Я бы взял
Код:
$iRand = Random(1, UBound($aSplited) - 1, 1)


Или надо брать
Код:
$aSplited = StringSplit($line1, "", 2)
 

cibergod

Новичок
Сообщения
4
Репутация
0
А я вот так реализовал о_О


Код:
$sborka = generate_pass(10,'1234567890qwertyuiopasdfghjklzxcvbnm')

msgbox(0,'',$sborka)

Func generate_pass($dlin,$skpas)
$dlin_skpas = StringLen($skpas)

$rand_r = ''

for $a = 1 to $dlin
$rand = Random(1,$dlin_skpas,1)
$rand_i = StringTrimLeft(StringLeft($skpas,$rand),$rand-1)
$rand_r = $rand_r&$rand_i
next
return $rand_r
EndFunc
 

pad0nak66

Новичок
Сообщения
23
Репутация
2
А вот и мой вариант...

Код:
Dim $pass, $flag ; объявляем переменные
Do
  $pass = _PassGen(8) ; генерируем пароль указанной длины
  $flag = InputBox ('Генератор паролей', 'Хочешь другой? Жми "Cancel"!', $pass, '', 1, 1) ; выводим его
  If $flag Then ClipPut($pass) ; перед выходом, копируем в буфер обмена
Until $flag ; выходим из цикла

Func _PassGen($len = 6)
  If $len < 1 Then $len = 6 ; если длина пароля меньше 1, то ставим 6
  Local $symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890' ; из каких символов будет состоять
  Local $pass = '' ; подготовили строку для пароля
  For $n = 1 to $len ; сколько символов указали, столько и будем повторять цикл
    $pass &= StringMid($symbols, Random(1, StringLen($symbols), 1), 1) ; собираем пароль
  Next
  Return $pass
EndFunc
 
Верх