Itu tergantung pada apa yang Anda maksud dengan "dapat dibaca". Jika Anda hanya ingin menggunakan karakter heksadesimal, Anda memerlukan 32 karakter untuk mencapai 128 bit entropi; baris ini akan berfungsi (hanya menggunakan perintah dari coreutils
paket):
head -c16 /dev/urandom | md5sum
Varian ini menghasilkan kata sandi dengan hanya huruf kecil, dari 'a' hingga 'p' (ini yang Anda inginkan jika Anda harus "mengetik" kata sandi pada ponsel cerdas):
head -c16 /dev/urandom | md5sum | tr 0-9 g-p
Jika Anda ingin mengetik satu karakter lebih sedikit, coba ini:
head -16 /dev/urandom | md5sum
(Kemungkinan mendapatkan semua 16 byte acak pertama sebagai 0x0A, yaitu karakter "baris baru", adalah 2, sehingga baris ini masih mendapatkan 128 bit entropi.)
Masih membatasi diri Anda pada perintah dari coreutils
, Anda dapat melakukan ini:
mktemp -u XXXXXXXXXXXXXXXXXXXXXX
Yang ini menghasilkan kata sandi 22 karakter, menggunakan /dev/urandom
sebagai sumber internal keacakan (saya memeriksa kode sumber, dan strace
konfirmasi panggilan). Karakternya adalah huruf (huruf besar dan kecil) dan angka; karena 62 lebih besar dari 2, 22 karakter sudah cukup.
Satu lagi:
od -An -x /dev/urandom | head -1
ini menampilkan delapan urutan dari empat digit heksadesimal. Bisa dibilang, pembagian menjadi urutan kecil ini dapat membantu membaca.
Untuk baris yang lebih panjang dan jenis kata sandi yang cukup berbeda, coba ini:
for i in {1..8} ; do head -$(expr $(head -c7 /dev/urandom | od -An -t dL) % $(wc -l < /usr/share/dict/british-english)) /usr/share/dict/british-english | tail -1 ; done
(yang ini hanya berfungsi pada host 64-bit; apakah Anda akan memperhatikan alasannya?). Selain coreutils
, versi itu juga memerlukan file kamus, ini untuk bahasa Inggris Britania.
Beberapa saran luar biasa di jawaban lain. Saya menemukan bahwa makepasswd tidak tersedia di mana-mana, dan menggunakan tr (sedikit) rumit, jadi ada opsi lain menggunakan OpenSSL:
openssl rand -base64 16
Angkanya adalah jumlah byte acak - jadi 16 byte untuk entropi 128-bit.
Menggunakan pwgen
Oneliner paling sederhana yang pernah ada:
pwgen
Itu mencoba membuat kata sandi yang mudah diingat. Untuk menonaktifkannya dan membuat kata sandi yang lebih aman, gunakan --secure
atau -s
bendera.
pwgen -s
Apakah kata sandi yang dihasilkan terlalu panjang? Terlalu pendek? Cukup tambahkan panjang yang diinginkan:
pwgen 9
# Or
pwgen -s 9
# Or
pwgen 9 -s
Alat serupa
Saya kebetulan tahu pwgen, ada alat lain di luar sana. Anda dapat menemukannya menggunakan fungsi pencarian dari distribusi Anda. Di Debian ini adalah:
apt-cache search password generator
Itu melakukan pencarian yang tepat (meskipun case-insensitive). Menggunakan password generat
malah memperluas pencarian.
Sebelum menginstal paket, ada baiknya melihat deskripsinya. Sekali lagi di Debian:
apt-cache show $DESIRED_PACKAGE
# E.g.
apt-cache show pwgen
Alat yang bisa saya temukan dengan cara ini:
pwgen
makepasswd
apg
otp
(dimaksudkan untuk pembalut sekali pakai, tidak disarankan)gpw
(sangat berfokus pada pengucapan, tidak disarankan)
Menggunakan alat standar Unix
Tidak semua sistem memiliki pwgen yang tersedia. Seperti yang dijawab orang lain, Anda dapat menggunakan md5sum
atau sha256sum
, tetapi itu hanya menghasilkan 0-9 dan a-f. Tidak ada huruf g-z atau campuran, apalagi karakter khusus. Lebih baik memfilter karakter yang tidak dapat dicetak dari /dev/urandom
sampai Anda memiliki kata sandi dengan panjang yang diinginkan:
cat /dev/urandom | tr -cd '@-~' | head -c 8
Yang memberikan sesuatu seperti XiVsdn[y
atau [email protected]^lY
. Anda dapat mengubah 8
di bagian akhir untuk panjang kata sandi yang diinginkan. Anda juga dapat mengubah @-~
bagian untuk membatasi karakter. Misalnya ini hanya akan mencetak karakter alfanumerik:
cat /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c 8
Ini hampir identik dengan pwgen -s
akan melakukan dan memberikan kata sandi seperti nZiUzNtE
.
Sebagai bonus, tr
alat disertakan di hampir setiap sistem operasi (Mac OS X, GNU/Linux, Android/Linux, Solaris, FreeBSD, dll.) kecuali Microsoft Windows.