Chcę wygenerować losowe hasło i robię to tak:
</dev/urandom tr -dc [:print:] | head -c 64
Na moim laptopie, na którym działa Ubuntu, produkuje tylko zgodne z przeznaczeniem znaki do wydruku. Ale kiedy ssh na serwer mojej szkoły, na którym działa Red Hat Enterprise Linux, i tam go uruchamiam, dostaję dane wyjściowe 3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�K
, które w ogóle się nie sprawdzą. Co może pójść nie tak?
źródło
:graph:
zamiast:print:
:</dev/urandom LC_ALL=C tr -dc '[:graph:]' | head -c 64
Zastanów się zamiast tego
Ma to dwie zalety:
Z losowego urządzenia odczytujesz tylko 48 bajtów, a nie ~ 8 KB; jeśli inne procesy na tym samym hoście wymagają liczb losowych, wyczerpanie 8 KB na raz może być poważnym problemem. (Tak, prawdopodobnie nikt nie powinien używać blokującego urządzenia losowego, ale ludzie tak robią ).
Produkcja nie
base64
zawiera prawie żadnych znaków o specjalnych znaczeniach. (Dla wcale, hals| tr +/ -_
na końcu, i (jak w przykładzie), upewnij się, że liczba bajtów wejścia dobase64
jest wielokrotnością 3)Hasło wygenerowane w ten sposób ma dokładnie 384 bity entropii, co jest nieco mniej niż to, co robiłeś (log 2 96 64 ≈ 421,4), ale więcej niż wystarcza do większości celów (256 bitów entropii bezpiecznie „zgaduje, kiedy Słońce wypala ”terytorium z wyjątkiem kluczy RSA, AFAIK).
źródło
Inne osoby już zwróciły uwagę, że lokalizacja określa, co
[:print:]
oznacza. Jednak nie wszystkie znaki drukowalne są odpowiednie dla haseł (nawet w ascii). Naprawdę nie chcesz spacji, tabulatorów i # $% ^? w swoim haśle - nie tylko jest to trudne do zapamiętania, ale także potencjalnie niebezpieczne dla bazowego systemu uwierzytelniania, może być niemożliwe wprowadzenie pola wprowadzania danych i tak dalej. W takim przypadku powinieneś po prostu ręcznie wybrać „rozsądne” znaki:lub po prostu
Lub jeszcze lepiej, użyj
base64
zgodnie z sugestią w innych odpowiedziach.źródło
?
lub^
jest po prostu zbyt zły, aby traktować go poważnie.[:print:]
klasa ma nie zawierać karty. To tylko[:alnum:]
+[:punct:]
+ spacja (pojedyncza spacja, nie[:space:]
).Co powiesz na
ciągi powinny wypisywać dane wyjściowe z urandom w formacie do wydruku
źródło
-bash: /dev/urandom: Permission denied
Nie wiem, czy jest jakiś powód, dla którego
/dev/random
generujesz hasło, ale zalecałbym używanie pwgen w celu złagodzenia bólu.Gdzie 10 to długość hasła.
http://man.cx/pwgen
źródło
Ta metoda IMHO jest mądrzejsza, gdy pobiera dane z / dev / urandom Łańcuch wklejony jako $ P $ P $ P ... musi mieć co najmniej 256 znaków.
źródło