Jak wygenerować losowy ciąg?


209

Chciałbym wygenerować losowy ciąg (np. Hasła, nazwy użytkowników itp.). Powinno być możliwe określenie wymaganej długości (np. 13 znaków).

Z jakich narzędzi mogę korzystać?

(Ze względów bezpieczeństwa i prywatności lepiej jest, aby ciągi były generowane w trybie offline, w przeciwieństwie do online na stronie internetowej.)


1
Istnieją już dobre odpowiedzi w AskUbuntu . (Używam apgosobiście.)
Sparhawk,

1
@Sparhawk Pytanie / odpowiedzi AskUbuntu dotyczą bardziej narzędzi do tworzenia list. Proszę rozważyć dodanie tutaj odpowiedzi pokazującej, jak użyć apgdo wygenerowania losowego ciągu.
landroni

1
Zachowaj ostrożność podczas używania generowania liczb losowych na komputerach. Niektóre z nich są znacznie mniej losowe, niż się wydaje, ale odróżnienie generowania liczb losowych od „dobrych” i „złych” jest dość trudne.
Sobrique,

@Sobrique Doskonała uwaga na temat generatorów liczb pseudolosowych (np /dev/urandom.). Byłoby miło mieć jakieś odpowiedzi przy użyciu prawdziwych generatorów liczb losowych, opartych np . Na random.org .
landroni

25
Odpowiedź żartu: Aby wygenerować naprawdę losowy ciąg znaków, umieść nowego użytkownika przed Emacsem (lub Vimem) i poproś go o wyjście. ;)
Wildcard,

Odpowiedzi:


186

Moim ulubionym sposobem na to jest użycie /dev/urandomrazem z, traby usunąć niechciane postacie. Na przykład, aby uzyskać tylko cyfry i litery:

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo ''

Alternatywnie, aby dołączyć więcej znaków z listy znaków specjalnych hasła OWASP :

</dev/urandom tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' | head -c 13  ; echo

Jeśli masz problemy z trnarzekaniem na dane wejściowe, spróbuj dodać wLC_ALL=C ten sposób:

LC_ALL=C tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13 ; echo

15
Lub zrób to: head /dev/urandom | tr -dc A-Za-z0-9 | head -c10- Ten sposób jest dokładniejszy. Otrzymujesz 10 znaków, które są wielkimi, małymi lub cyframi
Brandin

8
Pierwsze headpolecenie może być problematyczne. Wyprowadzi pierwsze 10 wierszy /dev/urandom, co oznacza, że ​​zatrzyma się, gdy zobaczy 10-ty nowy wiersz. Zatem długość danych wyjściowych wysyłanych do trpolecenia jest losowa. Możliwe, że na wyjściu będzie mniej niż 13 znaków tr. Nie obliczyłem prawdopodobieństwa takiego zdarzenia, obliczenia są nieco trudne.
kasperd

6
Lepiej zrób to tak:<dev/urandom tr -dc "$charset" | head -c "$length"
PSkocik,

3
+1 Oto szybka próba włączenia innych znaków ze strony znaków specjalnych hasła OWASP , zmiany znaczenia dla wiersza poleceń bash:tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
Rup

2
@Rup Nie jestem pewien, co nie działa z twoim tr ..poleceniem, ale po prostu cytuje wszystko (z wyjątkiem pojedynczego cudzysłowu) - tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'.
Kenny Evitt,

144

Aby wygenerować losowe hasło, możesz użyć pwgen:

pwgen generuje losowe, pozbawione znaczenia, ale wymawiane hasła. Hasła te zawierają albo małe litery, albo małe i wielkie litery, lub cyfry wrzucone. Wielkie litery i cyfry są umieszczone w sposób, który ułatwia zapamiętanie ich pozycji podczas zapamiętywania tylko słowa.

Wygeneruj 7 haseł o długości 13:

geek@liv-inspiron:~$ pwgen 13 7
Eu7Teadiphaec giepahl3Oyaiy iecoo9Aetaib4 phaiChae6Eivi athoo3igee8Co
Iphu4ufeDeelo aesoYi2lie9he 

Jak wspomniano w komentarzach, można uniknąć zmniejszenia entropii za pomocą -sargumentu (tj. Wygenerować bezpieczniejsze, całkowicie losowe, ale trudne do zapamiętania hasła):

geek@liv-inspiron:~$ pwgen -s 13 7
eAfycrPlM4cYv 4MRXmZmyIVNBp D8y71iqjG7Zq7 FQRHcserl4R8O yRCUtPtV3dsqV
0vJpp2h0OrgF1 QTp7MKtJyTrjz 

Aby wygenerować losowe nazwy użytkowników, możesz użyć gpw:

Ten pakiet generuje wymawiane hasła. Wykorzystuje statystyki kombinacji trzyliterowych (trygrafów) pobrane ze wszystkich słowników, które podajesz.

Wygeneruj 7 haseł (nazw użytkowników) o długości 13:

geek@liv-inspiron:~$ gpw 7 13
sreepoidahsas
risadiestinge
ntodynesssine
deodstestress
natinglumperm
riasigentspir
enderiferback

21
+1 za nieumyślenie koła. Jeśli nie chcesz zmniejszonej entropii ograniczenia „wymawialnego”, po prostu użyj pwgen -s.
Nate Eldredge,

123

Korzystam z opensslpolecenia, szwajcarskiego wojskowego noża do kryptografii.

openssl rand -base64 12

lub

openssl rand -hex 12

10
rand -hexograniczy wyjście do zaledwie 16 znaków, zamiast 90+ na mojej klawiaturze. base64 jest lepszy, ponieważ ma 64 znaki, ale nie jest losowy (np. istnieją przewidywalne wzorce wypełnienia i być może niektóre znaki pojawiają się częściej niż inne).
Martin Tournoij

@Carpetsmoker: Zauważ, że przykład openssl rand -base64 12daje 16 znaków wyjściowych (ponieważ 256 wartości jest odwzorowanych na 64). Przykład heksadecymalny daje 24 znaki. W przypadku heksa nie ma strat, ponieważ jest to proste odwzorowanie 1: 2, ale może być trochę w przypadku base64, ponieważ używane jest padding. Podstawa nie wpływa na losowość, to sposób, w jaki jeden jest mapowany na inny, który działa. (a całkowita liczba bitów jest znacznie ważniejsza).
Dennis Williamson

Pytanie brzmiało: „Jak wygenerować losowy ciąg o określonej długości” @DennisWilliamson, więc chociaż Twój komentarz jest poprawny jako taki , nie jest poprawny w kontekście tego pytania .
Martin Tournoij,

@Carpetsmoker: W takim przypadku nie ma tej odpowiedzi.
Dennis Williamson

4
Ta odpowiedź zasługuje na więcej pochwał. urandom, pwgen, gpw itp. mogą być dostępne w twoim systemie; także w różnych środowiskach zasada, która działa na jednym, może nie działać na innym. Byłoby dość dysfunkcjonalne ustawienie, gdyby nie mieć openssl. Jeszcze lepiej: openssl rand -base64 32 | tr -d / = + | cut -c -16 To da ci 32 znaki minus nie-alfanum i przycięte do 16 znaków długości. Ułatwia kontakt z administratorem. Użytkownicy mają tylko alfanum (które zazwyczaj doceniają). Długość jest wystarczająco długa, aby usunięcie specjalnych znaków nie wpłynęło zbytnio na entropię. Złoty.
zentechinc

18

Oto jak to robię. Generuje losowy ciąg 10 znaków. Możesz go zoptymalizować, zastępując „fold” innymi narzędziami do przetwarzania łańcucha.

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1

1
+1 Ta odpowiedź jest POSIXY poprawna, pomijając /dev/urandomoczywiście użycie
Harold Fischer

12

Aby wygenerować hasło z najwyższą możliwą entropią przy użyciu standardowych narzędzi Linux, które są wbudowane w każdą dystrybucję, której używam:

< /dev/urandom tr -cd "[:print:]" | head -c 32; echo

Powoduje to wyświetlenie wszystkich znaków drukowalnych ASCII - od 32 (spacja) do 126 (tylda, ~). Długość hasła może być sterowane z head„s -cflagi. Istnieją również inne możliwe zestawy znaków tr(aby nie uwzględniać spacji, wystarczy użyć znaków 33-126 [:graph:]).


1
W jaki sposób różni się to od istniejących odpowiedzi? W szczególności przychodzi na myśl Herbert .
Fox

3
@ Fox Jego rozwiązanie wykorzystuje zakodowaną listę znaków, co nie jest zalecaną praktyką programistyczną ze względu na czytelność kodu, zwartość i czystość. Niektóre specjalne znaki drukowane ASCII można interpretować przez bash, nie wspominając o najbardziej oczywistej wadzie jego jednej linijki - jeśli pożądana jest maksymalna entropia, czy można mieć pewność, że wszystkie dostępne znaki są na liście? I że nie ma duplikatów, które mogłyby zmienić zachowanie tr? Jego odpowiedź powinna zostać zastąpiona moją, ponieważ pytałeś :)
drws

2
Wiele, jeśli nie większość stron internetowych ma ograniczenia dotyczące znaków, które mogą znajdować się w haśle, więc kodowanie „[: print:]” nie jest dla mnie lepsze niż kodowanie listy znaków specjalnych hasła OWASP. Wydaje mi się, że prawie każdą odpowiedź tutaj można poprawić za pomocą zmiennej, ale jest to tak niewielka zmiana, że ​​sugerowałbym tylko edycję
Fox

1
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echojeśli nie chcesz ` characters in generated string. `ponieważ jest to znak ucieczki w wielu językach powoduje problemy
mzzzzb

< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echowykluczyć | \ / `i spacja
Ryan Krage

9

W zależności od pożądanego poziomu losowości, możesz po prostu użyć wbudowanej zmiennej bash (również zshi kshewentualnie innych) $RANDOM:

$ echo $RANDOM | tr '[0-9]' '[a-z]'
bfeci
$ echo $RANDOM | tr '[0-9]' '[a-z]'
cijjj

Metody czytania bezpośrednio z /dev/urandomsą znacznie prostsze, ale dla uzupełnienia możesz również użyć $RANDOM:

echo $(for((i=1;i<=13;i++)); do printf '%s' "${RANDOM:0:1}"; done) | tr '[0-9]' '[a-z]'

Ważne : to rozwiązanie będzie generować losowe ciągi przy użyciu pierwszych 10 liter alfabetu. To, czy to ci wystarczy, zależy od tego, czego potrzebujesz.


Jak kontrolować długość generowanego ciągu?
landroni,

@landroni Nie sądzę, że możesz zabraknąć pętli, dopóki nie uzyskasz odpowiedniej długości. $RANDOMwypisze liczbę od 0 do 32767.
terdon

Próbowałem uruchomić polecenie około 20 razy i nigdy nie mogę dostać niczego dłuższego niż 4-5 znaków ...
landroni

2
@landroni dzięki, dodałem sposób na określenie długości, ale nie jest to zbyt dobre. Po prostu użyłbym czegoś takiego rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13).
terdon

1
@SkippyleGrandGourou bardzo dobry punkt. Dodałem to do odpowiedzi, dzięki.
terdon

8

Zainspirowany przez Pablo Repetto otrzymałem to łatwe do zapamiętania rozwiązanie:

shuf -zer -n20  {A..Z} {a..z} {0..9}

-z pozwala uniknąć wyjścia wieloliniowego

-e echo wyniku

-r pozwól, aby dowolna postać pojawiła się wiele razy

-n20 losowy ciąg o długości 20 znaków

{A..Z} {a..z} {0..9} dozwolone klasy znaków

shuf jest częścią systemu Linux i jest szeroko dostępny lub przynajmniej przeniesiony.


5

@Brandin wyjaśnił w komentarzu do innej odpowiedzi, w jaki sposób uzyskać maksymalnie 100 bajtów z /dev/urandomużycia head -c 100. Innym sposobem na to jest dd:

tr -dc A-Za-z0-9 < /dev/urandom | dd bs=100 count=1 2>/dev/null

Na 2>/dev/nullkońcu ddpolecenia jest pomijanie wyjścia „... rekordy w / ... rekordy poza”.

Nie znam żadnych istotnych zalet / wad tych dwóch metod.

Miałem problem z obiema metodami trnarzekania na dane wejściowe. Myślałem, że to dlatego, że nie podoba otrzymaniu wejście binarne, a więc sugeruje pierwszy filtrowanie /dev/randomz iconv -c -t US. Jednak Gilles zaproponował inną diagnozę i rozwiązanie, które działa dla mnie:

LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | dd bs=100 count=1 2>/dev/null

Z jakiegoś powodu iconvrozwiązanie maksymalizuje jeden rdzeń procesora i nie daje wyniku (czekałem jakieś 10
sekund

W moim systemie Ubuntu 14.04 iconv jest dostarczane przez libc-bin2.19. Nie jestem pewien, czy to ta sama
ikona

trobsługuje dane binarne. Jednak na ustawienia takie A-Zmogą mieć wpływ ustawienia regionalne. SpróbujLC_ALL=C tr …
Gilles,

1
@Gilles Zgodnie ze specyfikacją POSIX nie obsługuje „wejścia binarnego”. trRobi to tylko GNU , ponieważ w ogóle nie obsługuje wielobajtowych (np. Kiedy ostatnio sprawdzałem, zmiana wielkości liter została zaimplementowana poprzez ustawienie szóstego bitu każdego bajtu). Inne systemy (np. BSD) obsługują wielobajtowe i to tam zawiedzie, ponieważ szansa, że ​​losowy strumień wejściowy jest również prawidłowym strumieniem wielobajtowym, jest bardzo mała w większości kodowań. GNU może dodać obsługę wielobajtową w dowolnym momencie, w którym to momencie się nie powiedzie. Oczywiście ustawienie LC_ALL=Cto naprawi.
Martin Tournoij

@Carpetsmoker POSIX nie wymaga trprzetwarzania danych binarnych (w ustawieniach regionalnych C). (No cóż, ok, wyraźnie mówi tylko, że mają być obsługiwane bajty zerowe, nie oznacza, że ​​obsługiwane są niepuste pliki nie kończące się znakiem nowego wiersza, ale w praktyce tak też jest zawsze.)
Gilles

4

APG jest domyślnie dołączany do niektórych dystrybucji Linuksa.

Aby wygenerować hasła od rozmiaru 5 do 10 w podzestawach Specjalne, Numeryczne, Wielkie i Niższe, polecenie to:

apg -MSNCL -m 5 -x 10

I wraca

@OpVeyhym9
3:Glul
3DroomIc?
hed&Os0
NefIj%Ob3
35Quok}

Jak powiedział w komentarzu @landroni.


1
Oto opcje generowania losowych 14-literowych haseł zawierających wiele znaków specjalnych:apg -a1 -m14
neuhaus,

3

Możesz użyć jednego z md5narzędzi, które mają właśnie ten cel. W przypadku utworzenia całkowicie losowego hasła możesz użyć md5pass. Jest to bardzo proste narzędzie w użyciu i bardzo pomocne, ponieważ można użyć „normalnego tekstu” wraz z „solą”, aby przeskoczyć konstrukcję tego samego hasła, które można odzyskać później, lub alternatywnie możesz chcieć uzyskać całkowicie losowe hasło przez cały czas. Ogólne zastosowanie to:

md5pass [password] [salt]

gdzie passwordjest wybranym słowem, które zostanie użyte do budowy losowego łańcucha, i saltjest używany skok w bajtach. Lubię to:

md5pass word

$1$.MUittVW$j.XDTF1QRnxqFdXRUiSLs0

Spowoduje to utworzenie hasła „losowej sekwencji” do użycia. Jeśli użyjesz „nie” salt, możesz później nie być w stanie odtworzyć tego samego ciągu.

Jeśli jednak użyjesz salttakiego:

md5pass word 512

$1$512$.0jcLPQ83jgszaPT8xzds0

następnie możesz utworzyć sekwencję, którą możesz odzyskać, jeśli użyjesz tego słowa w połączeniu z tą samą solą (lub skokiem), jeśli zostało pierwotnie zdefiniowane.


Kiedy saltużywa się a, brzmi to podobnie do podejścia PasswordMaker ...
landroni

-Tak Może brzmieć podobnie do hasła jednego producenta, ale różnica polega na tym, że nie jest to program komercyjny ani nic innego, ponieważ zestaw narzędzi md5, „md5pass, md5sum, md5sum.textutils” dotyczy i są dostępne w systemie bez żadnych kosztów !!!
Żart Sr. OK

Właściwie miałem na myśli PasswordMaker , który jest również oprogramowaniem typu open source i niekomercyjnym.
landroni


2

Te dwa polecenia generują odpowiednio losowe hasła i hasła.

shuf --random-source=/dev/urandom --repeat --head-count=20 file_with_characters | tr --delete '\n'

shuf --random-source=/dev/urandom --repeat --head-count=7 file_with_words | tr '\n' ' '

Generator haseł wymaga pliku_z_znakami, zawierającego wszystkie znaki, których hasło ma używać, jeden znak w wierszu i dokładnie jeden raz każdy. Plik nie może zawierać pustych linii, a linie muszą być zakończone znakiem nowej linii.

Generator hasła wymaga pliku file_with_words zawierającego wszystkie słowa, których chcesz użyć, jedno słowo w wierszu i dokładnie za każdym razem. Plik nie może zawierać pustych linii, a linie muszą być zakończone znakiem nowej linii.

Opcja --head-count określa długość hasła - w postaci znaków - lub hasła - w słowach.


1

Przekonałem się, że pipowanie / dev / urandom do tr na macOS nie działa. Oto inny sposób:

set="abcdefghijklmonpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
n=6
rand=""
for i in `seq 1 $n`; do
    char=${set:$RANDOM % ${#set}:1}
    rand+=$char
done
echo $rand

Sprawdź ostatni przykład mojej odpowiedzi. Nie używa tr. unix.stackexchange.com/a/494931/203075
Zibri

1

Używam:

base64 < /dev/urandom | tr -d 'O0Il1+\' | head -c 44

To daje mi 57 możliwych znaków. Ciąg może zostać wklejony (usunięty +i \) lub wydrukowany i ponownie wpisany, ponieważ trudne do odróżnienia znaki ( I1lO0) zostały usunięte.

  • 44 znaki dają mi: log 2 (57 44 )> 256,64 bitów entropii
  • 22 znaki dają mi: log 2 (57 22 )> 128,32 bitów entropii

Lubię to, ponieważ:

  • polecenie jest łatwe do wpisania i niezapomniane
  • używa standardowych narzędzi systemowych - bez dodatkowych plików binarnych
  • nie „marnuje” losowości (zużywa 89% losowych bitów, które otrzymuje w porównaniu z ~ 24% dla rozwiązań bezpośrednio przesyłających do tr)
  • 22 i 44 znaki łączą się całkiem ładnie (nieco powyżej parzystej) wspólnej mocy dwóch punktów przerwania
  • wydruk można łatwo wybrać i wkleić lub wydrukować i ponownie wpisać przy minimalnym poziomie błędu ludzkiego
  • krótsze niż kodowane heksadecymalnie (32 i 64 zamiast 22 i 44), takie jak md5sum / sha1sum itp.

Podziękowania dla https://unix.stackexchange.com/a/230676/9583, a zwłaszcza komentarze do mojej początkowej inspiracji.


Jeśli potrzebujesz cyfr / znaków specjalnych - zazwyczaj będzie to liczba, jeśli nie, możesz bezpiecznie dołączyć 1bez zmniejszania entropii (podczas generowania nowego, aby uzyskać jeden w / numer , zmniejsza entropię). Możesz także bezpiecznie dołączyć !bez zmniejszania entropii. Żaden schemat nie zwiększa też wartości entropii, ale może doprowadzić wygenerowany ciąg znaków do zgodności ze starszymi wymaganiami dotyczącymi hasła.
Iiridayn

1

Filozofia uniksowa dotycząca „wielu małych narzędzi, które dobrze wykonują jedną rzecz” służy ci w tym przypadku bardzo dobrze.

  • /dev/urandomjest strumieniem losowych „bajtów” (które zawierają znaki niedrukowalne)
  • base64 koduje dane bajtowe [A-Za-z0-9/+] (które można w całości wydrukować)
  • dd kopiuje dane wejściowe na wyjście, stosując modyfikatory podane jako argumenty (które mogą obejmować rozmiar bloku i liczbę bloków)

OSX

base64     < /dev/urandom | dd bs=1k count=1

Linux

base64 -w0 < /dev/urandom | dd bs=1k count=1

Uwagi:

  • Jeśli potrzebujesz podzestawu znaków, możesz wstawić modyfikator do potoku.
    • Np .: tr -d '[A-Z/+]'pozbyć się wielkich liter +i/
  • Możesz ustawić bs(rozmiar bloku) na dowolną potrzebną długość.
  • W systemie Linux base64jest domyślnie zawijany do 76 kolumn i należy go zresetować, -w0chyba że tego chcesz.

1

Chciałbym przekazać moje zwykłe polecenie, aby wygenerować hasło

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' |cut -c -13
b0R55751vWW9V

Aby skonfigurować długość hasła, zmień liczbę w poleceniu cięcia na wymaganą długość, na przykład 24 znaki

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' |cut -c -24
WFBhVHuKbrnRhd5kdWXPzmZG

Nie chcesz mylić 0 lub O, 1 lub l? Odfiltruj to z innymtr

$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' | tr -d '0O1l'|cut -c -24
JuCphwvhrhppD9wVqfpP2beG

Osobiście nigdy nie wolę specjalnego znaku w haśle, dlatego wybieram tylko [:alnum:]generator haseł


0

Utrzymuję secpwgenw Alpine Linux i przechowuję źródła na moim Githubie .

Może generować losowe ciągi lub frazy diceware:

musl64 [~]$ secpwgen
USAGE: secpwgen <-p[e] | -A[adhsy] | -r | -s[e]> N

PASSPHRASE of N words from Diceware dictionary
  -p    generate passphrase
  -pe   generate enhanced (with symbols) passphrase

SKEY PASSWORD of N words from S/Key dictionary
  -s    generate passphrase
  -se   generate enhanced (with symbols) passphrase

ASCII RANDOM of N elements (at least one option MUST be present)
  -A    Each letter adds the following random elements in output:
    a    alphanumeric characters
    d    decimal digits
    h    hexadecimal digits
    s    special characters
    y    3-4 letter syllables

RAW RANDOM
  -r    output BASE64 encoded string of N random BITS
  -k    output koremutake encoding of N random BITS

Aby wygenerować losowy ciąg 13 znaków, użyłbyś:

musl64 [~]$ secpwgen -Aas 13
----------------
WK5#*V<]M3<CU ;ENTROPY=67.21 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

musl64 [~]$ secpwgen -Aa 13
----------------
GP0FIEBM9Y3BT ;ENTROPY=67.21 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

Aby użytkownicy pamiętali hasło, użyj wyrażeń diceware:

musl64 [~]$ secpwgen -p 5
----------------
wq seen list n8 kerr  ;ENTROPY=65.00 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

Osobiście lubię:

musl64 [~]$ secpwgen -r 512
----------------
h62lL7G4gwh3/j9c7YteQvVXoqJrQKKPWVR3Lt7az36DcfWZWtUgBT19iwmJBwP4UahNzPe7qYD7OcklUFpCzQ== ;ENTROPY=512.00 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.

0

Mój sposób na bardzo bezpieczne hasło (gdzie 16 to długość pw):

cat /dev/urandom | tr -cd [:graph:]|head -c 16

Przykładowy wynik:

jT@s_Nx]gH<wL~W}

Lub alternatywnie, aby wygenerować wiele haseł:

cat / dev / urandom | tr -cd [: graph:] | fold -w 16 | head -6

Przykładowy wynik:

7ck%G7'|f&}_8(]s
<?*]E.CG[NB'gK#A
:tF-WPTOa3!i7S(h
2xy(>=%3=Kb1B$`6
*98Lf{d?Jzb}6q1\
E7uCEAN2Hz]]y|5*

Trochę mniej bezpieczny (mniejszy zestaw znaków):

cat /dev/urandom |base64 -w 0|fold -w 16|head -6

Przykładowy wynik:

rJqYxYZLOTV+A45w
PUKQ+BoBf6yfZw5m
+LRfpsN9CsLRiN8V
yMS6zDpL6NHmG17s
yTUWPG7Rum97schi
cognvjVwaKaAyPRK

-1

Bardzo łatwym i prostym (prawdopodobnie prostszym niż szukasz) sposobem na osiągnięcie tego byłoby wygenerowanie losowej liczby w danym zakresie, przekonwertowanie tej liczby na równoważny znak ASCII i dołączenie jej na końcu łańcucha .

Oto podstawowy przykład w Pythonie:

import random # import random library  
passFile = open("passwords.txt", 'w') # create file passwords.txt
passNum = int(input("Number of passwords: ")) # get number of  passwords
passLength = int(input("Password length: ")) # get length of passwords  
for i in range(passNum):
    password = "" # reset password
    for i in range(passLength):
        num = random.randint(65, 122) # get random number
        while num in range(91, 97): # Don't include punctuation
            num = random.randint(65, 122)
        password += chr(num) # add character to current password 
    passFile.write(password + "\n") # add current password to file  
passFile.close() # close file

EDYCJA: dodano komentarze i kod, aby wygenerować wiele haseł i zapisać je w pliku


3
Gdybym otrzymał moc Pythona, NIE zrobiłbym tego w ten sposób. O wiele łatwiej byłoby użyć złączenia na łańcuchu zawierającym wszystkie znaki ważne dla hasła i używając losowego wyboru znaków.
Mike McMahon,


-2

Chciałbym to polecenie:

date +%s | sha256sum | base64 | head -c 12

1
Wolę raczej stosować losowe podejście nanosekundowe: date +%N ponieważ jeśli wygenerujesz wielu użytkowników i hasła w skrypcie, sekundy mogą stać się takie same dla wielu lub nawet wszystkich poleceń daty, tworząc w ten sposób identyczne hasła.
John Mayor

1
@JohnMayor: jest to podejście bardziej wytrzymałe: dd if=/dev/random bs=512 count=1?
Eugen Konkov

8
Te odpowiedzi są bardzo niebezpieczne! Generujesz hasło (hasła) ze znanego materiału siewnego, który jest łatwy do przewidzenia. Mogłem wygenerować wszystkie hasła wygenerowane przy użyciu tej metody z ostatnich lat i użyć tej listy do brutalnego wymuszania.
Flow

-4

Przechodzę do strony http://passwordsgenerator.net/, która umożliwia generowanie ciągów losowych znaków do 2048 znaków, wybieranie wielkich liter, małych liter, cyfr od 0 do 9, znaków interpunkcyjnych lub dowolnej kombinacji.


2
Wyjaśniłem pytanie, aby wyraźnie zaznaczyć, że ciągi generowane w trybie off-line są lepsze. Generowanie hasła bezpośrednio na stronie internetowej, szczególnie jeśli połączenie nie jest HTTPS (jak w Twojej odpowiedzi), nie jest bezpieczne.
landroni

1
Zdobycie losowego hasła z Internetu jest spektakularnie głupie i naiwne. Ktoś zna teraz hasło, którego używasz do jakiejś usługi lub witryny oraz unikalne dane osobowe na Twój temat (adres IP, informacje o przeglądarce / środowisku). Ta strona może teraz odsyłać informacje do innych danych zebranych o tobie. Na przykład, po wysłaniu na listę mailingową, twój adres IP znajduje się w nagłówku wiadomości, więc teraz mamy hasło, imię i adres e-mail ... Naprawdę ufasz przypadkowym nieznajomym za pomocą swoich haseł.
Martin Tournoij
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.