Генерация сложного пароля с помощью Powershell


До чего только не доводит безделье! Вот пришлось написать самую популярную функцию :-)

В Active Directory мы все за редким исключение используем сложные пароли. Для этого в политике безопасности задаем минимальную длину пароля и требование сложности. Требование сложности заключается в том, чтобы в пароле обязательно присутсвовали символы как минимум трех категорий из четырех следующих: цифры, большие латинские, малые латинские, знаки пунктуации.

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

Вот и родилась достаточно простая функция генерации сложного пароля заданной длины.
Идея простая. Сначала генерируем пароль нужной длины. Проверять то, что пароль получился заданной сложности не будет. Поступим проще. Берем из каждой категории символов по одному случайному символу и заменяем этими символами четыре случайно выбранные позиции в сгенерированном пароле. Все! :-)

 

function global:Get-RandomPassword
{
<#
.SYNOPSIS
Get random complex password.

.DESCRIPTION
This function generate random complex password.

.PARAMETER PasswordLength
Set needed length of password.

.EXAMPLE
PS C:\> Get-RandomPassword 8
.EXAMPLE
PS C:\> 5..7| Get-RandomPassword
#>

[CmdletBinding()]
param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
[ValidateRange(4,15)]
[Int]
$PasswordLength
)
Begin{}
Process{

$numberchars=0..9 | % {$_.ToString()}
$lochars = [char]'a' .. [char]'z' | % {[char]$_}
$hichars = [char]'A' .. [char]'Z' | % {[char]$_}
$punctchars = [char[]](33..47)

$PasswordArray = Get-Random -InputObject @($hichars + $lochars + $numberchars + $punctchars) -Count $PasswordLength

$char1 = Get-Random -InputObject $hichars
$char2 = Get-Random -InputObject $lochars
$char3 = Get-Random -InputObject $numberchars
$char4 = Get-Random -InputObject $punctchars

$RndIndexArray = Get-Random (0..($PasswordLength-1)) -Count 4

$PasswordArray[$RndIndexArray[0]] = $char1
$PasswordArray[$RndIndexArray[1]] = $char2
$PasswordArray[$RndIndexArray[2]] = $char3
$PasswordArray[$RndIndexArray[3]] = $char4

return [system.string]::Join('', $PasswordArray)

}
End{}
}

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s