Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Вопрос по скрипту для генерации паролей.

Ответить
Настройки темы
CMD/BAT - Вопрос по скрипту для генерации паролей.

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: SoulGood
Дата: 12-05-2020
Доброго времени всем.
Подскажите пожалуйста, как будет выглядеть код батника, если необходимо сгенерировать все возможные пароли без повторов, содержащие данный набор символов и букв:
0123456789abcdefghijklmnopqrstuvwxyz
Длина пароля - 6 букв и цифр.
С сохранением всех сгенерированных паролей в файл.
Перепробовал не один батник. Но то, генерация рандомная по кол-ву цифр, то скрипт генерирует по одному паролю.

Отправлено: 15:34, 12-05-2020

 

Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Естественно, что они могут повторяться.
..это важно вообще? »
Конечно важно, так как:
1. Я уже говорил о фундаментальном смысле уникальности паролей.
2. Такую задачу четко поставил автор:
Цитата SoulGood:
необходимо сгенерировать пароли без повторов »
Цитата Foreigner:
Возьми из массива только уникальные елементы. »
Это не решит задачу:
Цитата SoulGood:
необходимо сгенерировать все возможные пароли»



Цитата Foreigner:
Pади интереса:
Код: Выделить весь код
0..12960 | % { (get-random $([char[]]'0123456789abcdefghijklmnopqrstuvwxyz') -count 6) -join '' } | group | ? count -gt 1
Не выдал повторов с шести попыток. »
Если монетка 9 раз упала орлом вверх орлом, это не значит, что на десятый бросок не будет решки.

Pади интереса:
Код: Выделить весь код
$rep=0;$k=0
while($rep -lt 1){$k++
    $pass=1..12960|foreach { (get-random $([char[]]'0123456789abcdefghijklmnopqrstuvwxyz') -count 6) -join '' }
    $rep=($pass.Count-($pass|sort -U).count)
}
"Первый повтор встречается на $k попытке"
Код: Выделить весь код
Первый повтор встречается на 11 попытке

Последний раз редактировалось Fors1k, 13-05-2020 в 14:49.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:24, 13-05-2020 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата Iska:
... а вот тут вопрос — как именно трактовать авторское: Цитата SoulGood:без повторов »
и все возможные комбинации. Имхо, ушли от темы: обсуждаем число комбинаций и рандомную генерацию. Я до сих пор понимал полный набор символов от 000000 до zzzzzz, однако тут звучит идея, что в строке не должно быть повторяющихся символов. Есть ли эффективный алгоритм получения такого набора?
Вот решение "в лоб" для 6 символов в строке
Код: Выделить весь код
@Echo Off
	Set "Simb=0 1 2 3 4 5 6 7 8 9 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"
rem	Set "Simb=0 1 2 3 4 5 6 7 8 9"
	Set "FileOut=Z:\Box_Out\FileOut.txt
	
	>"%FileOut%" (
		Call Echo %%time%%	
		For %%i In (%Simb%) Do (
			For %%j In (%Simb%) Do (
				If Not %%j==%%i For %%k In (%Simb%) Do (
					If Not %%k==%%i If Not %%k==%%j For %%l In (%Simb%) Do (
						If Not %%l==%%i If Not %%l==%%j If Not %%l==%%k For %%m In (%Simb%) Do (
							If Not %%m==%%i If Not %%m==%%j If Not %%m==%%k If Not %%m==%%l For %%n In (%Simb%) Do (
								If Not %%n==%%i If Not %%n==%%j If Not %%n==%%k If Not %%n==%%l If Not %%n==%%m Echo %%i%%j%%k%%l%%m%%n
							)
						)	

					)
				)
			)
		)
		Call Echo %%time%%	
	)
Exit /B
Для отладки брал набор из 10 символов. Результат:
Код: Выделить весь код
20:05:18,03	
012345
012346
012347
012348
012349
012354

.....

987645
987650
987651
987652
987653
987654
20:05:34,92
151200 строк
Для 36 символов не берусь оценить время
Вообще-то задача достаточно бессмысленая, разве что как лаба. Практически надо генерировать пароль рандомным образом для каждого конкретного случая, и вероятность того, что пароли совпадут, достаточно низкая

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 13-05-2020 в 20:38.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:28, 13-05-2020 | #32


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
генерировать пароль рандомным образом для каждого конкретного случая, и вероятность того, что пароли совпадут, достаточно низкая »
правильно
Код: Выделить весь код
@echo off
set "nA=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
set "l=6"&:[длина пароля]
set "n=10"&:[количество вариантов]
set "f=keys.log"
 
setlocal enabledelayedexpansion
 for /l %%n in (1 1 %n%) do (
  for /l %%n in (1 1 %l%) do call :#
  >>"%f%" echo:
 )
endlocal
pause& exit
 
:# 
 set /a r=%random%%%36
 set "s=!nA:~%r%,1!"
 >>"%f%" <nul set /p=%s%
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:45, 13-05-2020 | #33


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Есть ли эффективный алгоритм получения такого набора? »
Код: Выделить весь код
param(
    $pathOut = 'C:\temp\test.txt',
    $symbols = '0123456789'
)cls

$file=New-Object IO.StreamWriter ([IO.File]::Open($pathOut,'Create'))
[string[]]$sym=$symbols.ToCharArray()
(Measure-Command{
foreach($a in $sym){
foreach($b in (diff $sym ($a)).InputObject){
foreach($c in (diff $sym ($a,$b)).InputObject){
foreach($d in (diff $sym ($a,$b,$c)).InputObject){
foreach($e in (diff $sym ($a,$b,$c,$d)).InputObject){
foreach($f in (diff $sym ($a,$b,$c,$d,$e)).InputObject){

    $file.Writeline("$a$b$c$d$e$f");$i++
      
}}}}}}$file.Close()
}).TotalSeconds
"Комбинаций: $i"
По скорости получается 8,03 сек.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:17, 14-05-2020 | #34


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Fors1k_m:
По скорости получается 8,03 сек »
если только цифры, то можно так https://rosettacode.org/wiki/Combinations#PowerShell
для [Powershell.CSharp]::Combinations(6,10)
TotalMilliseconds : 72,4355

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:26, 14-05-2020 | #35


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата Fors1k_m:
По скорости получается 8,03 сек. »
Все познаётся в корректном сравнении на одной и той же машине.
На моём суперкомпе Ваш код делается 13', мой - 17', слегка его соптимизировал - 9'
Демонстрирую:
Код: Выделить весь код
@Echo Off
	Set "S=0 1 2 3 4 5 6 7 8 9 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"
	Set "S=0 1 2 3 4 5 6 7 8 9"
	Set "FileOut=Z:\Box_Out\FileOutNew.txt"

	SetLocal EnableExtensions EnableDelayedExpansion
	
	>"%FileOut%" (
		Call Echo %%time%%	
		For %%i In (%S%) Do (
			Set "S1=!S:%%i=!" &For %%j In (!S1!) Do (
				Set "S2=!S1:%%j=!" &For %%k In (!S2!) Do (
					Set "S3=!S2:%%k=!" &For %%l In (!S3!) Do (
						Set "S4=!S3:%%l=!" &For %%m In (!S4!) Do (
							Set "S5=!S4:%%m=!" &For %%n In (!S5!) Do Echo %%i%%j%%k%%l%%m%%n
						)	

					)
				)
			)
		)
		Call Echo %%time%%
	)
Exit /B
Ссылку от YuS_2 не рассматривал - по условию в общем случае символы могут быть не обязательно цифры

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-05-2020 в 18:10.


Отправлено: 17:53, 14-05-2020 | #36


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Прямой перебор по индексу:
Код: Выделить весь код
$y = 6          # длина комбинации
$x = 0..9      # количество элементов

[array] $code = "for (`$c0 = 0; `$c0 -le $($y - 1); `$c0++) {"

for ($i = 1; $i -le ($y - 1); $i++)
{
    $code += "for (`$c$i = 0; `$c$i -le $($x.count-1); `$c$i++) {"
}

$res =
for ($i = 0; $i -le ($y - 1); $i++)
{
    "`$(`$c$i)"
}

$code += '"' + ($res -join '') + '"'
$code += "}" * $y
$code = $code -join "`n"

iex $($code) | sc test.txt

# 600000 записей
Обычная запись, через set-content выдаёт:
Код: Выделить весь код
 0 139 > measure-command { .\2 }


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 10
Milliseconds      : 853
Ticks             : 108537147
TotalDays         : 0,000125621697916667
TotalHours        : 0,00301492075
TotalMinutes      : 0,180895245
TotalSeconds      : 10,8537147
TotalMilliseconds : 10853,7147
Наверное со стримрайтером будет быстрее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:37, 15-05-2020 | #37


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
# 600000 записей »
Количество комбинаций не может быть 600 000 для "по 6 из 10". (код для проверки)
Ошибка в первом for:
Цитата Foreigner:
[array] $code = "for (`$c0 = 0; `$c0 -le $($y - 1); `$c0++) {" »
$($y - 1) нужно заменить на $($x.count-1).

Кстати, что бы не писать все время -1, можно исользовать -lt:
Код: Выделить весь код
for ($c0 = 0; $c0 -lt $x.count; $c0++)
Теперь получится верное количество. На моем олд пк результат 43 сек.

Последний раз редактировалось Fors1k, 15-05-2020 в 03:57.


Отправлено: 03:44, 15-05-2020 | #38


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Fors1k_m,
Вы код поправьте.
Выдает ворох ошибок:
Код: Выделить весь код
C:\Users\user\Desktop\3.ps1:16 знак:22                                    
+     $file.Writeline("$a$b$c$d$e$f");$i++                                
+                      ~                                                  
Отсутствует '')'' в списке параметров функции.                            
C:\Users\user\Desktop\3.ps1:16 знак:24                                    
+     $file.Writeline("$a$b$c$d$e$f");$i++                                
+                        ~~~~~~~~~~~~~~~~~                                
Непредвиденная лексема "$b$c$d$e$f");$i++                                 
                                                                          
}}}}}}$file.Close()                                                       
}).TotalSeconds                                                           
"Комбинаций:" в выражении или операторе.                                  
C:\Users\user\Desktop\3.ps1:16 знак:26                                    
+     $file.Writeline("$a$b$c$d$e$f");$i++                                
+                          ~~~~~~~~~~~~~~~                                
Непредвиденная лексема "$c$d$e$f");$i++                                   
                                                                          
}}}}}}$file.Close()                                                       
}).TotalSeconds                                                           
"Комбинаций:" в выражении или операторе.                                  
C:\Users\user\Desktop\3.ps1:16 знак:28                                    
+     $file.Writeline("$a$b$c$d$e$f");$i++                                
+                            ~~~~~~~~~~~~~                                
Непредвиденная лексема "$d$e$f");$i++                                     
                                                                          
}}}}}}$file.Close()                                                       
}).TotalSeconds                                                           
"Комбинаций:" в выражении или операторе.                                  
C:\Users\user\Desktop\3.ps1:16 знак:30                                    
+     $file.Writeline("$a$b$c$d$e$f");$i++                                
+                              ~~~~~~~~~~~                                
Непредвиденная лексема "$e$f");$i++                                       
                                                                          
}}}}}}$file.Close()                                                       
}).TotalSeconds                                                           
"Комбинаций:" в выражении или операторе.                                  
C:\Users\user\Desktop\3.ps1:16 знак:32                                    
+     $file.Writeline("$a$b$c$d$e$f");$i++                                
+                                ~~~~~~~~~                                
Непредвиденная лексема "$f");$i++                                         
                                                                          
}}}}}}$file.Close()                                                       
}).TotalSeconds                                                           
"Комбинаций:" в выражении или операторе.                                  
C:\Users\user\Desktop\3.ps1:16 знак:34                                    
+     $file.Writeline("$a$b$c$d$e$f");$i++                                
+                                  ~~~~~~~                                
Непредвиденная лексема "");$i++                                           
                                                                          
}}}}}}$file.Close()                                                       
}).TotalSeconds                                                           
"" в выражении или операторе.                                             
C:\Users\user\Desktop\3.ps1:20 знак:2                                     
+ "Комбинаций: $i"                                                        
+  ~~~~~~~~~~~                                                            
Непредвиденная лексема "Комбинаций:" в выражении или операторе.           
C:\Users\user\Desktop\3.ps1:20 знак:16                                    
+ "Комбинаций: $i"                                                        
+                ~                                                        
В строке отсутствует завершающий символ: ".                               
    + CategoryInfo          : ParserError: (:) [], ParseException         
    + FullyQualifiedErrorId : MissingEndParenthesisInFunctionParameterList
                                                                          
 0 144 >

Отправлено: 09:03, 15-05-2020 | #39


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
Вы код поправьте.
Выдает ворох ошибок: »
Скопировал код прямо из поста. Запуск кода

У megaloman тоже работает:
Цитата megaloman:
Ваш код делается 13' ...»
Возможно, у вас что-то потерялось при копировании кода, попробуйте еще раз.

Последний раз редактировалось Fors1k, 15-05-2020 в 11:25.


Отправлено: 09:54, 15-05-2020 | #40



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Вопрос по скрипту для генерации паролей.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - Вопрос по безопасности сохранённых паролей в IE 10. Crysiser Microsoft Windows 8 и 8.1 5 30-06-2016 14:21
2010 - макрос для генерации значений по условиям Elizavetta Microsoft Office (Word, Excel, Outlook и т.д.) 12 03-12-2015 12:21
Вопросы по скрипту Lightbox maasja Вебмастеру 14 04-02-2011 12:39
fpdf класс для генерации pdf с помощью php zvezda_t Вебмастеру 0 29-09-2010 09:06
Вопрос - Программы для генерации и хранения паролей SashaKl Защита компьютерных систем 13 08-10-2009 15:44




 
Переход