Jawaban:
pwgen adalah salah satu dari banyak program untuk menghasilkan kata sandi
Secara pribadi, saya lebih suka untuk tidak menggunakan pembuat kata sandi karena kata sandi yang dihasilkan sangat sulit untuk diingat, tetapi satu solusi portabel adalah menggunakan / dev / urandom
Membuat kata sandi acak yang tidak mengandung karakter khusus, panjangnya 10 karakter:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10`
dyxJRKldvp
Ini berfungsi dengan mengambil byte dari / dev / urandom, menghapus yang tidak sesuai dengan pola yang ditentukan dalam tr
perintah, dan membatasinya menjadi 10 karakter head
.
Membuat kata sandi acak yang berisi karakter khusus, panjangnya 10 karakter:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0
Ini menggunakan teknik yang sedikit berbeda setelah tr
menghapus byte yang tidak diinginkan, karena idenya adalah memaksanya untuk memiliki setidaknya satu karakter khusus. Ini bekerja dengan menggunakan fold
perintah untuk membungkus garis menjadi kelompok-kelompok 10, kemudian menggunakan grep
untuk mengambil hanya garis yang berisi karakter khusus. head
lalu mengambil kata sandi pertama yang memenuhi persyaratan.
Saya menulis skrip kecil ini beberapa tahun yang lalu dan telah menggunakannya sejak itu. Jika ada, ini merupakan pelecehan menarik printf
dan menggunakan fitur indah BASH bahwa saya sayangnya jarang melihat dalam skrip: typeset
.
#!/usr/bin/env bash
# Released into public domain
# Aaron Bockover, 2005
# http://abock.org
typeset -i length; length=$1
typeset -i rounds; rounds=$2
[ $rounds -lt 1 ] && rounds=1
[ $length -lt 1 ] && {
echo "Usage: $0 <length> [<rounds>]" 2>/dev/null; exit 1;
}
for ((i=0; i < $rounds; i++)); do
for ((j=0; j < $length; j++)); do
set=$(($RANDOM % 20))
if [ $set -le 6 ]; then o=65; l=26; # 35% uppercase
elif [ $set -le 13 ]; then o=97; l=26; # 35% lowercase
elif [ $set -le 17 ]; then o=48; l=10; # 20% numeric
elif [ $set -le 18 ]; then o=58; l=7; # 10% symbolic
elif [ $set -le 19 ]; then o=33; l=15; fi
ord=$(($o + $RANDOM % $l))
printf \\$(($ord / 64 * 100 + $ord % 64 / 8 * 10 + $ord % 8))
done
echo
done
Saya juga menambahkan KeePassX yang memberi Anda pilihan untuk menggunakan entropi sistem untuk menghasilkan kata sandi yang kuat dengan beberapa fitur bagus - semuanya menggunakan GUI. Ini juga memberi Anda opsi untuk mengelola kata sandi Anda, dan menyimpannya ke file yang dienkripsi.
Ini adalah bagaimana antarmuka penghasil kata sandi KPX:
apg
bukan pilihan yang buruk jika Anda menginginkan kata sandi yang mudah diingat.
; apg -m 16 -a 0 -t
ByajNudgolIston9 (Byaj-Nud-gol-Ist-on-NINE)
Af}ockhuecUjrak8 (Af-RIGHT_BRACE-ock-huec-Uj-rak-EIGHT)
IakijKadmomIvgig (Iak-ij-Kad-mom-Iv-gig)
NutIlOsyahodBeef (Nut-Il-Os-ya-hod-Beef)
anMechOybekazell (an-Mech-Oyb-ek-az-ell)
VumushCummAd{fra (Vum-ush-Cumm-Ad-LEFT_BRACE-fra)
Perhatikan bahwa berdasarkan ini , kata sandi Anda setidaknya harus sepanjang 12 karakter.
Saya menggunakan non-acak, tetapi cukup bervariasi untuk semua tujuan serangan ... kata sandi utama, dan pass terakhir untuk menghasilkan kata sandi lain. Inilah cara saya menghasilkan kata sandi utama.
echo -n "some seed" | openssl dgst -binary -sha1 | base64 | sed -e 's/.\{4\}/& /g'
dan hasilnya
H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M=
sekarang cukup pilih beberapa bagian dan buat kata sandi, atur ulang, tinggalkan beberapa, tambahkan karakter atau 2 untuk menjadikannya sebagus acak. Selama Anda dapat mengingat seed Anda, Anda dapat membuat ulang ini, dan memulihkan kata sandi Anda (selama Anda tidak membuat terlalu banyak modifikasi)
Berikut ini skrip satu kali untuk membuat frasa sandi gaya XKCD. /usr/share/dict/words
bukan kamus yang bagus untuk ini karena sebagian besar kata-katanya panjang, tetapi mudah tersedia. Untuk frasa sandi yang lebih bagus, Anda dapat menggunakan kamus kata-kata pendek seperti daftar kata sandi S / Kunci Satu Kali .
dict="/usr/share/dict/words"
max="`wc -l <"$dict"`" \
perl -e '$count=4;
$/=\4; while (<>) {
print unpack('L') % $ENV{max} + 1, qq(\n); last unless --$count
}' /dev/urandom |
while read n ; do
tail -n "+$n" "$dict" | head -1
done
Jika Anda adalah pengguna GNOME dan Anda juga perlu menyimpan kata sandi untuk berbagai akun Anda, Anda dapat mencoba pengelola kata sandi Penyingkapan . Ini memiliki fitur penghasil kata sandi dasar, di mana Anda hanya mengatur panjang kata sandi dan memilih untuk memasukkan karakter tanda baca selain huruf dan angka.
Perbaiki saya jika saya salah, tetapi: Sejauh yang saya mengerti, tidak mungkin komputer dapat menghasilkan string yang benar-benar acak. Jadi saya datang dengan ide berikut [dan berharap itu tidak sepenuhnya bodoh]:
Jika seseorang melempar dadu 26 sisi, kesempatan untuk melempar, katakanlah 26 adalah 1:26. Dengan kata lain: Peluang untuk melempar 26 adalah sekitar 0,04%. Selanjutnya, dadu tidak memiliki memori dan tidak ada bug. Saya datang dengan ide berikut:
Model Kertas untuk dicetak:
Catatan : Saya bukan Pro Matematika dan saya datang dengan ide ini setelah membaca sebuah artikel di 2600 majalah yang menggambarkan ini. Saya baru saja menambahkan beberapa ide saya sendiri pada konsep dasar.
Juga : Saya ingin tahu apakah ini bukan hanya contoh sempurna untuk ' menulis cracker kata sandi brute force pertama Anda '. Tetapi pertanyaan Anda memberi saya alasan yang sempurna untuk memunculkan ide ini untuk didiskusikan.
Saya memiliki dua alias yang ditambahkan ke file .zshrc.local saya untuk membuat kata sandi yang kuat.
Yang pertama adalah:
alias pw.graph="cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"
Output dari mengetik pw.graph adalah lima baris dari setiap karakter yang dapat diketik pada keyboard dengan pengecualian spasi:
/d=|&mRq!g$QaNZ'L;CfEli,D3\)*h-jkerzv?{y"_Ic(0BtxJwF59:@G}KV1X2o>S~[#]s+W%A.<6bpTO^uP7U4HMYn`8
RIdW87{a4O3][?&rTn=m/:Y`_u*hqy2c%s@!ZPM$5to1f-.U9ClK,)'jDi0"pw>EzN^|gX~BSAJk\VFG(H<bx}+Q6#vL;e
s^H@yEo/X$|d?_jw7-n'l>m"Cb\W5.tTe0APB1D!#69[p+(8x}F&~RM`q3Q%vhfOiUZz]ucJk:)*agGV;=NY4{,K2SLrI<
$/t|!s}og5u:X~hcJUyYHf>;l<zDedL`.T*K8]CBSW[(xw+Mm^E3r16b-97%'@jVR{ZG#0p4AP=,I?\n&"a)vqNkQ2iO_F
,7n|^Y\%MpeBqvhI3mE<9zPS/~+sU`4ZoCWl&uxd'ft"kjcOy0X!{a-T_6RKiVg5Hb21D)w>@*N8;A[(rLG=$Q:.#]FJ?}
Yang kedua adalah:
alias pw.alnum="cat /dev/urandom | tr -dc '[:alnum:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"
Output dari mengetik pw.alnum adalah setiap huruf dan angka yang dapat dicetak baik huruf besar dan kecil:
E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv
Saya biasanya menggunakan pw.graph dan menyalin bagian acak dari baris tersebut. Beberapa kata sandi tidak mengizinkan simbol jadi saya menggunakan sebagian pw.alnum untuk itu.
Saya menggunakan ini disimpan sebagai file .html:
<script>
var keylist="abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*_"
var temp=''
function generatepass(plength){
temp=''
for (i=0;i<plength;i++)
temp+=keylist.charAt(Math.floor(Math.random()*keylist.length))
return temp
}
function populateform(enterlength){
document.pgenerate.output.value=generatepass(enterlength)
}
</script>
<form name="pgenerate">
<input type="text" size=32 name="output">
<input type="button" value="Generate Password" onClick="populateform(this.form.thelength.value)"><br />
<b>Password Length:</b> <input type="text" name="thelength" size=3 value="32">
</form>
[:print:]
fortr
(tr -dc '[:print:]'
), jika Anda sedikit paranoid. Masalahnya kemudian adalah simbol yang tersedia di keyboard Anda ...