Câu trả lời:
Cá nhân, tôi không thích sử dụng trình tạo mật khẩu vì mật khẩu được tạo rất khó nhớ, nhưng một giải pháp di động là sử dụng / dev / urandom
Tạo mật khẩu ngẫu nhiên không chứa ký tự đặc biệt, dài 10 ký tự:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10`
dyxJRKldvp
Điều này hoạt động bằng cách lấy byte từ / dev / urandom, xóa những cái không phù hợp với mẫu được chỉ định trong tr
lệnh và giới hạn nó ở 10 ký tự head
.
Tạo mật khẩu ngẫu nhiên có chứa các ký tự đặc biệt, dài 10 ký tự:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0
Điều này sử dụng một kỹ thuật hơi khác sau khi tr
loại bỏ các byte không mong muốn, vì ý tưởng là buộc nó phải có ít nhất một ký tự đặc biệt. Điều này hoạt động bằng cách sử dụng fold
lệnh để bọc dòng thành nhóm 10, sau đó sử dụng grep
để chỉ tìm nạp các dòng có chứa một ký tự đặc biệt. head
sau đó lấy mật khẩu đầu tiên đáp ứng yêu cầu.
Tôi đã viết kịch bản nhỏ này một vài năm trước và đã sử dụng nó kể từ đó. Nếu bất cứ điều gì, đó là một sự lạm dụng thú vị printf
và sử dụng một tính năng đáng yêu của BASH mà tôi rất tiếc hiếm khi thấy trong các tập lệnh : 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
Tôi cũng sẽ thêm KeePassX , cung cấp cho bạn tùy chọn sử dụng entropy hệ thống để tạo mật khẩu mạnh với một vài tính năng hay - tất cả đều sử dụng GUI. Nó cũng cung cấp cho bạn tùy chọn quản lý mật khẩu và lưu chúng vào một tệp được mã hóa.
Đây là giao diện của trình tạo mật khẩu KPX trông như thế nào:
apg
không phải là một lựa chọn tồi nếu bạn muốn mật khẩu có thể dễ dàng ghi nhớ.
; 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)
Lưu ý rằng theo điều này , mật khẩu của bạn phải dài ít nhất 12 ký tự.
Tôi sử dụng không ngẫu nhiên, nhưng đủ khác nhau cho tất cả các mục đích tấn công ... mật khẩu chính và mật khẩu cuối cùng để tạo mật khẩu khác. Đây là cách tôi tạo mật khẩu chủ.
echo -n "some seed" | openssl dgst -binary -sha1 | base64 | sed -e 's/.\{4\}/& /g'
và đầu ra
H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M=
bây giờ chỉ cần chọn một vài trong số các phần và tạo mật khẩu, sắp xếp lại chúng, bỏ một số phần, thêm một ký tự hoặc 2 để làm cho nó tốt như ngẫu nhiên. Miễn là bạn có thể nhớ hạt giống của mình, bạn có thể tạo lại hạt giống này và khôi phục mật khẩu của mình (miễn là bạn không thực hiện quá nhiều sửa đổi)
Đây là tập lệnh một lần để tạo cụm mật khẩu kiểu XKCD . /usr/share/dict/words
không phải là một từ điển tuyệt vời cho điều này vì hầu hết các từ đều dài, nhưng nó dễ dàng có sẵn. Đối với cụm mật khẩu đẹp hơn, bạn có thể sử dụng từ điển các từ ngắn, chẳng hạn như danh sách từ Mật khẩu một lần S / Key .
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
Nếu bạn là người dùng Gnome và bạn cũng cần lưu trữ mật khẩu cho các tài khoản khác nhau của mình, bạn có thể thử trình quản lý mật khẩu Khải Huyền . Nó có một tính năng tạo mật khẩu cơ bản, trong đó bạn chỉ đặt độ dài mật khẩu và chọn nếu bao gồm các ký tự dấu chấm câu bên cạnh các chữ cái và chữ số.
Sửa lỗi cho tôi nếu tôi sai, nhưng: Theo như tôi hiểu thì không có cách nào máy tính có thể tạo ra một chuỗi hoàn toàn ngẫu nhiên. Vì vậy, tôi đã nảy ra ý tưởng sau đây [và hy vọng nó không hoàn toàn ngu ngốc]:
Nếu một người ném xúc xắc 26 mặt, cơ hội để ném, giả sử 26 là 1:26. Nói cách khác: Cơ hội ném 26 là khoảng 0,04%. Hơn nữa, một con xúc xắc không có bộ nhớ và không có lỗi. Tôi đã đưa ra ý tưởng sau đây:
Mô hình giấy để in ra:
Lưu ý : Tôi không phải là Math Pro và tôi đã nảy ra ý tưởng này sau khi đọc một bài báo trên 2600 tạp chí mô tả điều này. Tôi chỉ thêm một số ý tưởng của riêng tôi về khái niệm cơ bản.
Ngoài ra : Tôi tự hỏi nếu đây không chỉ là một ví dụ hoàn hảo cho ' viết công cụ bẻ khóa mật khẩu vũ phu đầu tiên của bạn '. Nhưng câu hỏi của bạn đã cho tôi một lý do hoàn hảo để đưa ra ý tưởng này để được thảo luận.
Tôi có hai bí danh được thêm vào tệp .zshrc.local của mình để tạo mật khẩu mạnh.
Đầu tiên là:
alias pw.graph="cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"
Đầu ra của việc gõ pw.graph là năm dòng của mỗi ký tự có thể được gõ trên bàn phím ngoại trừ thanh dấu cách:
/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?}
Thứ hai là:
alias pw.alnum="cat /dev/urandom | tr -dc '[:alnum:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"
Đầu ra của việc gõ pw.alnum là mỗi chữ cái có thể in và đánh số cả chữ hoa và chữ thường:
E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv
Tôi thường sử dụng pw.graph và sao chép một phần ngẫu nhiên của dòng. Một số mật khẩu không cho phép các ký hiệu vì vậy tôi sử dụng một phần của pw.alnum cho điều đó.
Tôi sử dụng tệp này được lưu dưới dạng tệp .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:]
chotr
(tr -dc '[:print:]'
), nếu bạn hơi hoang tưởng. Vấn đề sau đó sẽ là các biểu tượng có sẵn trên bàn phím của bạn ...