Имя пользователя:
Пароль:
 | Правила  

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

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

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


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

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


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

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

 

Ветеран


Contributor


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

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


Fors1k_m, так каждый может! Вы мне Мурку сбацайте! Дайте формулу, а не программу.

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


Отправлено: 23:48, 12-05-2020 | #11



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

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


Аватара для Fors1k

Старожил


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

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


Изображения
Тип файла: bmp latex.bmp
(67.7 Kb, 17 просмотров)

Цитата megaloman:
Дайте формулу »

Отправлено: 23:54, 12-05-2020 | #12


Ветеран


Contributor


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

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


Fors1k_m, давайте упростим задачу: есть символы 0 1 2 3 4 5 6 7 8 9 a b c d e f
То есть имеем 16 цифр стандартной шестнадцатиричной системы.
Всевозможные комбинации этих цифр можно получить элементарным счетом:
000000 000001 000002 ... 00000f 000010 ... ffffff
Возьмите любой калькулятор, который переводит числа из шестнадцатиричной системы в десятичную, и переведите в десятичную число:
ffffff=16 777 215
То есть вот это количество уникальных чисел от 000000 до ffffff
То есть символов (16) гораздо меньше рассматриваемых в предложенной задаче (36), а чисел намного больше, чем насчитали Вы 1 947 792 для бОльшего числа символов. То есть, Ваше число вычислено некорректно.
Похоже, и я ошибаюсь на 1 (не учитываю в подсчете 000000)

Кстати, вот калькулятор, можете там напрямую перевести число ZZZZZZ тридцатишестиричной системы в десятичную.

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


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


Отправлено: 00:51, 13-05-2020 | #13


Аватара для Fors1k

Старожил


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

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


Кстати, так как мы говорим о паролях, то ab и ba это разные наборы данных, а значит количество возможных уникальных комбинаций здесь будет не 1 947 792, а 1 402 410 240.
Вычисление
Код: Выделить весь код
Param(
    $m = 6, # Размер комбинации
    $n = 36 # Количество используемых элементов
)cls

function Get-Possibility($m,$n)
{
    $i,$j=1,1;1..$n|%{$i*=$_;}
    1..($n-$m)|%{$j*=$_};$i/$j
}

"Вариантов размещений: "+(Get-Possibility $m $n)


Итог:
Замер для(1/1000) 1 402 411 комбинаций показал:
Время: 12сек.
Размер файла:10,7MB
Для полного объема вариантов ориентировочно будет:
Время: 3ч.20мин
Размер файла:10,45GB

Последний раз редактировалось Fors1k, 14-10-2021 в 21:59.

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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата megaloman:
С комбинаторикой у меня отношения напряженные, но, ИМХО, у Вас вкралась ошибка. »
Возможно, делал по памяти, "на скорую руку"... но ошибка, скорее всего, при исправлении, приведет к большим значениям
Цитата megaloman:
Дайте формулу, а не программу. »
Например, вот

Цитата Fors1k_m:
Кстати, так как мы говорим о паролях, то ab и ba это разные наборы данных, а значит количество возможных уникальных комбинаций »
Точно! Вот и ошибка моя нашлась, нам нужны размещения, а не сочетания...

Код: Выделить весь код
function get-factorial([int]$num = 1) {
	switch ($num -le 1) {
		$true { $num }
		$false {$num*(get-factorial(--$num))}
	}
}

# количество размещений
$n = '0123456789abcdefghijklmnopqrstuvwxyz'
$m = 6

$A = (get-factorial $n.length)/(get-factorial ($n.length - $m))
$A
1402410240

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


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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Fors1k_m:
Замер для(1/1000) »
Где-то в замерах ошибка, ибо:
скорость - 1000 комбинаций в секунду (такая скорость точно реальна?)
1402410240/1000/60/60/24 = 16,2316 дней

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


Отправлено: 08:47, 13-05-2020 | #16


Аватара для Fors1k

Старожил


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

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


Цитата YuS_2:
скорость - 1000 комбинаций в секунду »
Почему 1000 в секунду?) Перебор 1 402 411 Комбинаций занял 12сек.
Скорость=1 402 411 Комбинаций / 12 сек= 116 867 комбинаций в секунду. Но у меня ещё комп очень старый(Intel LGA775), думаю у других побыстрее будет.
Так как 1 402 411 - это одна тысячная от общего количества, то для всех вариантов время=12*1000/60/60=3 часа 20 минут.

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


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


Аватара для Fors1k

Старожил


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

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


Кстати, так как набор символов неисчерпаем, то количество возможных уникальных комбинаций для данной задачи будет не 1 402 410 240, а 2 176 782 336.
Вычисление:
Код: Выделить весь код
Param(
    $m=6, # Размер комбинации
    $n=36 # Количество используемых элементов
)cls

function Get-FullPossibility($m, $n)
{
    $i=$j=$k=$z=1;($n-$m+1)..$n|%{$i*=$_};1..$m|
    ForEach{$j*=$_};1..$n|%{$k*=$_;};1..($n-$m)|
    ForEach-Object{$z*=$_};$p=[Math]::Pow($n,$m)

    Write-Output @{
        "Вариантов сочетаний " = ($i/$j)
        "Вариантов размещений" = ($k/$z)
        "Вариантов размещений с повторами" = $p
    }|FT -AutoSize
}

Get-FullPossibility $m $n
Код: Выделить весь код
Name                             Value     
----                             -----     
Вариантов сочетаний              1947792   
Вариантов размещений             1402410240
Вариантов размещений с повторами 2176782336
Итог:
Замер для(1/1000) 2 176 783 комбинаций показал:
Время: 18сек.
Размер файла:16,6MB
Для полного объема вариантов ориентировочно будет:
Время: 5ч.
Размер файла:16,2GB

Последний раз редактировалось Fors1k, 14-10-2021 в 22:11.

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

Отправлено: 10:17, 13-05-2020 | #18


Ветеран


Contributor


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

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


YuS_2, Fors1k_m,
Следите за руками, никакого мошенничества!
Доводим задачу до маразма: набор символов 0123456789, надо посчитать, сколько чисел содержится в диапазоне от 000000 до 999999.
Считаем: раз два три четыре пять .... МИЛЬЁН! (если приплюсовать 000000)
Вот результаты скрипта YuS_2, (цитирую с минимальными изменениями для приведенного случая):
Код: Выделить весь код
function get-factorial([int]$num = 1) {
	switch ($num -le 1) {
		$true { $num }
		$false {$num*(get-factorial(--$num))}
	}
}

# количество размещений
$n = '0123456789'
$m = 6

$A = (get-factorial $n.length)/(get-factorial ($n.length - $m))
$A
=151200
Если на клетке слона прочтешь надпись: буйвол, — не верь глазам своим.
Кстати, если длина строки =2 (00 - 99) Ваш скрипт декларирует 90. - что-то в консерватории надо менять.
Мой суперноут 2007 года выпуска по скрипту
Код: Выделить весь код
@Echo Off
rem	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"
	Set "Simb=0 1 2 3 4 5 6 7 8 9"
	Set "FileOut=Z:\Box_Out\FileOut.txt
	
	>"%FileOut%" Echo %time%	
	>>"%FileOut%" (For %%i In (%Simb%) Do For %%j In (%Simb%) Do For %%k In (%Simb%) Do For %%l In (%Simb%) Do For %%m In (%Simb%) Do For %%n In (%Simb%) Do Echo %%i%%j%%k%%l%%m%%n)
	>>"%FileOut%" Echo %time%	
Exit /B
выдал результат:
Код: Выделить весь код
9:58:10,67	
000000
000001
000002

......

999997
999998
999999
9:58:46,80
То есть, 1 000 000/36=28 000 строк/сек и мои отпотолочные предположения о 100 000 строк/сек не такие уж невероятные, а то и весьма скромные
Fors1k_m, Ура, конСЕКСус!
Цитата Fors1k_m:
2 176 782 336 »

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


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


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


Ветеран


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

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


Цитата YuS_2:
1947792 - число комбинаций... »
megaloman прав, вы посчитали размещение без повторений - количество вариантов перемешать символы в строке
впрочем, я опоздал со своим комментарием

Отправлено: 11:00, 13-05-2020 | #20



Компьютерный форум 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




 
Переход