Losowanie silnego hasła.
Moderatorzy: Moderatorzy, Administratorzy
Losowanie silnego hasła.
Witam wszystkich,
dopiero zaczynam swoją przygodę z programowaniem. Potrzebuję pomocy przy pewnym zadaniu.
Mam napisać skrypt proponujący silne hasło posługując się zasobem angielskich wyrazów które mam w pliku:
1) Wykorzystaj plik /usr/share/dict/words lub inny spis polskich słów
2) Wykorzystaj program tr do zamiany liter w nietypowe znaki
3) Wykorzystaj zmienną $RANDOM oraz polecenia head i tail do wybrania słowa z pliku
Plik words ma taką strukturę:
aaa
bbb
ccc
ddd
...
Nie potrafię sobie poradzisz z losowaniem wyrazu do zmiany znaków za pomocą polecenia tr
Proszę o pomoc
dopiero zaczynam swoją przygodę z programowaniem. Potrzebuję pomocy przy pewnym zadaniu.
Mam napisać skrypt proponujący silne hasło posługując się zasobem angielskich wyrazów które mam w pliku:
1) Wykorzystaj plik /usr/share/dict/words lub inny spis polskich słów
2) Wykorzystaj program tr do zamiany liter w nietypowe znaki
3) Wykorzystaj zmienną $RANDOM oraz polecenia head i tail do wybrania słowa z pliku
Plik words ma taką strukturę:
aaa
bbb
ccc
ddd
...
Nie potrafię sobie poradzisz z losowaniem wyrazu do zmiany znaków za pomocą polecenia tr
Proszę o pomoc
Re: Losowanie silnego hasła.
czyli całego zadania nie Potrafisz? Konkret, czego nie Wiesz - nikt gotowca robić nie będzie (ale aż kusi)
Re: Losowanie silnego hasła.
chciałbym to mniej więcej tak:
grep ....... words #wyrazy z co najmniej ośmioma znakami
teraz losowanie i mój jedyny pomysł to: przypisane do zmiennej liczby losowej z zakresu 1-20000 (tyle ma plik words mniej więcej) za pomocą polecenia %RANDOM, następnie użycie polecenia cut z tą zmienną do wycięcia wiersza tekstu (za każdym razem po uruchomieniu skryptu da mi inny wyraz)
poleceniem tr pozamieniać znaki np. tr [a-z] !@#$%^&*()_+... itp | echo words #stworzy mi pozornie trudne hasło
Wiem, że pewnie wolałbyś zobaczyć to w innej formie, ale dopiero zaczynam i tak to wygląda
grep ....... words #wyrazy z co najmniej ośmioma znakami
teraz losowanie i mój jedyny pomysł to: przypisane do zmiennej liczby losowej z zakresu 1-20000 (tyle ma plik words mniej więcej) za pomocą polecenia %RANDOM, następnie użycie polecenia cut z tą zmienną do wycięcia wiersza tekstu (za każdym razem po uruchomieniu skryptu da mi inny wyraz)
poleceniem tr pozamieniać znaki np. tr [a-z] !@#$%^&*()_+... itp | echo words #stworzy mi pozornie trudne hasło
Wiem, że pewnie wolałbyś zobaczyć to w innej formie, ale dopiero zaczynam i tak to wygląda
Re: Losowanie silnego hasła.
Sprawdź ile linii ma plik words
ILE_NUMB=$(grep -v "^$" words |wc -l)
Wylosuj numer linii z tego przedziału
NR_RANDOM=$(shuf -i 1-${ILE_NUMB} -n 1)
Szukasz linii z wylosowanego numeru
TMP_PASSWORD=$(sed -n ${NR_RANDOM}p words)
z tr nie wiem jaki Masz do końca pomysł, sedem to multipattern by jeszcze miał sens, ale tr?
Działaj
ILE_NUMB=$(grep -v "^$" words |wc -l)
Wylosuj numer linii z tego przedziału
NR_RANDOM=$(shuf -i 1-${ILE_NUMB} -n 1)
Szukasz linii z wylosowanego numeru
TMP_PASSWORD=$(sed -n ${NR_RANDOM}p words)
z tr nie wiem jaki Masz do końca pomysł, sedem to multipattern by jeszcze miał sens, ale tr?
Działaj
Re: Losowanie silnego hasła.
NR_RANDOM=`expr $RANDOM % $ILE_NUMB`webster pisze:Wylosuj numer linii z tego przedziału
NR_RANDOM=$(shuf -i 1-${ILE_NUMB} -n 1)
Szukanie linii też nie spełnia wymogów zadania, ale nie będę podpowiadał wszystkiego
Btw. Ciekawe nazewnictwo zmiennych.
Re: Losowanie silnego hasła.
a faktycznie zmienna $RANDOM no ok
AA i head i tail - Sorki, w pracy to robiłem między taskami i nie doczytałem moja wina, przepraszam za wprowadzanie w błąd
AA i head i tail - Sorki, w pracy to robiłem między taskami i nie doczytałem moja wina, przepraszam za wprowadzanie w błąd
Takie na chipcika A co, nie fajne ?Pajaczek pisze:webster pisze: Btw. Ciekawe nazewnictwo zmiennych.
Re: Losowanie silnego hasła.
Dziękuję Ci. Wiedziałem, że tu jest problem, ale sam bym tego nie dokończył.Pajaczek pisze: NR_RANDOM=`expr $RANDOM % $ILE_NUMB`
Finalnie u mnie skrypt wygląda tak:
#!/bin/bash
ILE_NUMB=$(grep -v "^$" /usr/share/dict/words |wc -l)
NR_RANDOM=`expr $RANDOM % $ILE_NUMB`
TMP_PASSWORD=$(sed -n ${NR_RANDOM}p /usr/share/dict/words)
echo $TMP_PASSWORD | tr [a-z] @86D3FG#1/K\mn0pQR?TuVwXyZ
Jeśli chodzi o polecenie tr, podstawiłem 26 znaków tak jak alfabet ma i działa - pokazuję różne kombinacje.
Rozumiem. że można to jeszcze jakoś inaczej zrobić? Chętnie zobaczę
THX Webster również !
Re: Losowanie silnego hasła.
chodzi o cyt "[..] head i tail do wybrania słowa z pliku"
Re: Losowanie silnego hasła.
Nie chodzi o to, że to problem, tylko w zadaniu oczekuje się od Ciebie użycia zmiennej $RANDOM Czyli tak jak zaproponował PajaczekDan2ra pisze:Dziękuję Ci. Wiedziałem, że tu jest problem, ale sam bym tego nie dokończył.Pajaczek pisze: NR_RANDOM=`expr $RANDOM % $ILE_NUMB`
Re: Losowanie silnego hasła.
Ok, tylko że wywalało mi całą zawartość pliku words na ekran, ale może ja coś źle zrobiłem. Pozdrawiamwebster pisze: Nie chodzi o to, że to problem, tylko w zadaniu oczekuje się od Ciebie użycia zmiennej $RANDOM Czyli tak jak zaproponował Pajaczek
Re: Losowanie silnego hasła.
> NR_RANDOM=$(shuf -i 1-${ILE_NUMB} -n 1)
Jak już używasz shuf to lepiej po prostu wybrać sobie losową linię z pliku (shuf -n1 words). W ten sposób nie trzeba nawet odczytywać długości pliku.
> ILE_NUMB=$(grep -v "^$" /usr/share/dict/words |wc -l)
Lub lepiej „grep -vc '^$' /usr/share/dict/words”.
> TMP_PASSWORD=$(sed -n ${NR_RANDOM}p /usr/share/dict/words)
Zauważ, że przy liczeniu liczby słów sprawdzasz puste linie, ale już tutaj czytasz wszystko jak leci.
> TMP_PASSWORD=$(sed -n ${NR_RANDOM}p /usr/share/dict/words)
> echo $TMP_PASSWORD | tr [a-z] @86D3FG#1/K\mn0pQR?TuVwXyZ
Albo lepiej olej zmienną tymczasową:
sed -n … | tr …
PS. Zmienne, które nie są eksportowane lepiej nazywać małymi literami.
Jak już używasz shuf to lepiej po prostu wybrać sobie losową linię z pliku (shuf -n1 words). W ten sposób nie trzeba nawet odczytywać długości pliku.
> ILE_NUMB=$(grep -v "^$" /usr/share/dict/words |wc -l)
Lub lepiej „grep -vc '^$' /usr/share/dict/words”.
> TMP_PASSWORD=$(sed -n ${NR_RANDOM}p /usr/share/dict/words)
Zauważ, że przy liczeniu liczby słów sprawdzasz puste linie, ale już tutaj czytasz wszystko jak leci.
> TMP_PASSWORD=$(sed -n ${NR_RANDOM}p /usr/share/dict/words)
> echo $TMP_PASSWORD | tr [a-z] @86D3FG#1/K\mn0pQR?TuVwXyZ
Albo lepiej olej zmienną tymczasową:
sed -n … | tr …
PS. Zmienne, które nie są eksportowane lepiej nazywać małymi literami.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.