Kolejny generator haseł

Zapewne nie raz, każdy z nas musiał wymyślać stertę domyślnych haseł, np. dla nowo zakładanych kont użytkowników. Ręczne tworzenie domyślnych haseł niesie za sobą wiele niebezpieczeństw. Chociażby takie, iż mimowolnie zdradzamy pewne własne nawyki wykorzystywane w tej procedurze, co przy dużej ilości haseł może ujawnić schematy jakie wykorzystujemy do ich budowy. Pomijam już fakt, że jest to proceder dość czasochłonny, gdy chcemy stworzyć naprawdę dużą ilość skomplikowanych i niepowtarzających się haseł.

Rozwiązaniem tego problemu jest posłużenie się jednym z wielu generatorów haseł dostępnych w sieci. Jednakże czasem mogą one być problematyczne, gdy zamierzamy zaimplementować takową funkcjonalność wewnątrz skryptów PowerShell’owych. Dlatego zaprezentuję jak sobie poradzić z tym problemem przy użyciu właśnie PowerShell’a. Nie będzie to jakiś wielki kombajn, a jedynie prosta metoda generowania haseł o wyznaczonych parametrach.

Na wstępie musimy oczywiście zdefiniować listy ze znakami jakie będą wykorzystywane podczas tworzenia haseł. Dla uproszczenia najlepiej celowo rozbić poszczególne rodzaje znaków na osobne tablice, tak by mieć pewność, iż dany rodzaj znaku na pewno zostanie wykorzystany odpowiednią ilość razy.

$CharsD = 48..57 | ForEach-Object {[Char]$_}
$CharsL = 97..122 | ForEach-Object {[Char]$_}
$CharsU = 65..90 | ForEach-Object {[Char]$_}
$CharsS = [Char[]]"()`~!@#$%^&*-+=|\{}[]:;',.?/" 

Dla wyjaśnienia, w pierwszej tablicy znajdują się liczby od 0 do 9. Następnie małe litery, duże litery oraz oczywiście znaki specjalne. Znaki specjalne najlepiej definiować ręcznie, gdyż niektóre systemy posiadają różne obostrzenia co do obsługi poszczególnych znaków.

Następnie definiujemy tablicę w ramach, której ustalamy ilość pobieranych znaków z poszczególnej grupy, np. 2 cyfry, 6 małych liter, jedna duża oraz jeden znak specjalny.

[Int[]]$CharsLengthArray = (2,6,1,1) 

Gdy podstawowe parametry posiadamy już zdefiniowane wystarczy przejść do generowania hasła. Definiujemy pustą zmienną, tak by upewnić się, iż wcześniej nie zawierała już jakichś danych.

$Password = '' 

W kolejnym kroku przechodzimy do procesu losowania znaków:

if($CharsLengthArray[0] -gt 0) { $Password += ($CharsD | Get-Random -Count $CharsLengthArray[0]) -join '' }
if($CharsLengthArray[1] -gt 0) { $Password += ($CharsL | Get-Random -Count $CharsLengthArray[1]) -join '' }
if($CharsLengthArray[2] -gt 0) { $Password += ($CharsU | Get-Random -Count $CharsLengthArray[2]) -join '' }
if($CharsLengthArray[3] -gt 0) { $Password += ($CharsS | Get-Random -Count $CharsLengthArray[3]) -join '' }

Dla każdej z grup (o ile mają być z niej losowane), pobieramy zdefiniowaną ilość znaków i dopisujemy do zmiennej z hasłem. Proces ten doprowadzi do wygenerowania losowego hasła, jednakże będzie ono posiadać jeden mały problem – będzie bardzo schematyczne, tzn. poszczególne grupy znaków zawsze będą ustawione w tej samej kolejności. W tym celu rozbijamy hasło na poszczególne znaki i w sposób losowy je sortujemy.

$Password = ($Password.ToCharArray()| Sort-Object {Get-Random}) -join ''

Tak wygenerowane hasło będzie spełniało wszystkie wcześniej zdefiniowane parametry, a jednocześnie prawdopodobieństwo ich zduplikowania się jest naprawdę niewielkie.

Ostatecznie dla leniwych polecam gotowy moduł PowerShell’a mojego autorstwa dostępny w galerii TechNet. Pozwala on na dostarczanie całych pul losowo wygenerowanych haseł, a jednocześnie dość dobrze integruje się z innymi skryptami Windows PowerShell.

Źródła:
http://gallery.technet.microsoft.com/Passwords-Generator-Module-222dbff6

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s