Losowanie silnego hasła.

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

Dan2ra
Użytkownik
Posty: 4
Rejestracja: 2015-11-30, 19:27

Losowanie silnego hasła.

Post autor: Dan2ra »

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 :)
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster »

czyli całego zadania nie Potrafisz? Konkret, czego nie Wiesz - nikt gotowca robić nie będzie :) (ale aż kusi) :)
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Dan2ra
Użytkownik
Posty: 4
Rejestracja: 2015-11-30, 19:27

Re: Losowanie silnego hasła.

Post autor: Dan2ra »

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 :)
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster »

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
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Losowanie silnego hasła.

Post autor: Pajaczek »

webster pisze:Wylosuj numer linii z tego przedziału
NR_RANDOM=$(shuf -i 1-${ILE_NUMB} -n 1)
NR_RANDOM=`expr $RANDOM % $ILE_NUMB`

Szukanie linii też nie spełnia wymogów zadania, ale nie będę podpowiadał wszystkiego ;)

Btw. Ciekawe nazewnictwo zmiennych.
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster »

a faktycznie zmienna $RANDOM :) no ok

AA :D 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 :)
Pajaczek pisze:
webster pisze: Btw. Ciekawe nazewnictwo zmiennych.
Takie na chipcika :D A co, nie fajne ? :D
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Dan2ra
Użytkownik
Posty: 4
Rejestracja: 2015-11-30, 19:27

Re: Losowanie silnego hasła.

Post autor: Dan2ra »

Pajaczek pisze: NR_RANDOM=`expr $RANDOM % $ILE_NUMB`
Dziękuję Ci. Wiedziałem, że tu jest problem, ale sam bym tego nie dokończył.
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ę :razz:

THX Webster również ! :-)
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster »

chodzi o cyt "[..] head i tail do wybrania słowa z pliku"
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster »

Dan2ra pisze:
Pajaczek pisze: NR_RANDOM=`expr $RANDOM % $ILE_NUMB`
Dziękuję Ci. Wiedziałem, że tu jest problem, ale sam bym tego nie dokończył.
Nie chodzi o to, że to problem, tylko w zadaniu oczekuje się od Ciebie użycia zmiennej $RANDOM :) Czyli tak jak zaproponował Pajaczek :)
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Dan2ra
Użytkownik
Posty: 4
Rejestracja: 2015-11-30, 19:27

Re: Losowanie silnego hasła.

Post autor: Dan2ra »

webster pisze: Nie chodzi o to, że to problem, tylko w zadaniu oczekuje się od Ciebie użycia zmiennej $RANDOM :) Czyli tak jak zaproponował Pajaczek :)
Ok, tylko że wywalało mi całą zawartość pliku words na ekran, ale może ja coś źle zrobiłem. Pozdrawiam :-)
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Losowanie silnego hasła.

Post autor: mina86 »

> 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.
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.
ODPOWIEDZ