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 » 2015-11-30, 19:35

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: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster » 2015-12-01, 11:36

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 » 2015-12-01, 13:30

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: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster » 2015-12-01, 14:44

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: 1441
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: Losowanie silnego hasła.

Post autor: Pajaczek » 2015-12-01, 19:38

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: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster » 2015-12-01, 20:39

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 » 2015-12-01, 20:50

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: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster » 2015-12-01, 21:06

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: 1265
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: Losowanie silnego hasła.

Post autor: webster » 2015-12-01, 21:07

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 » 2015-12-02, 10:58

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: 3318
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 4.x x86_64
Kontakt:

Re: Losowanie silnego hasła.

Post autor: mina86 » 2016-04-01, 19:47

> 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 called “mina86” in response to the previous one. :: Tiny Applications

ODPOWIEDZ