답변:
개인적으로, 생성 된 암호는 기억하기 매우 어렵 기 때문에 암호 생성기를 사용하지 않는 것이 좋습니다. 그러나 한 가지 휴대용 솔루션은 / dev / urandom 을 사용하는 것입니다
특수 문자를 포함하지 않는 임의의 비밀번호를 작성하는 길이는 10 자입니다.
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10`
dyxJRKldvp
이것은 / dev / urandom에서 바이트를 가져 tr
와서 명령에 지정된 패턴에 맞지 않는 바이트를 삭제하고을 사용 하여 10 자로 제한합니다 head
.
특수 문자를 포함하는 임의의 비밀번호를 작성하는 길이는 10 자입니다.
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0
이것은 tr
불필요한 바이트를 제거한 후에 약간 다른 기술을 사용 합니다. 아이디어는 적어도 하나의 특수 문자를 갖도록 강요하기 때문입니다. 이것은 fold
명령을 사용하여 행을 10 개의 그룹으로 랩핑 한 다음 grep
특수 문자를 포함하는 행만 페치 하는 데 사용 됩니다. head
그런 다음 요구 사항을 충족하는 첫 번째 비밀번호를 가져옵니다.
나는 몇 년 전에이 작은 스크립트를 작성했으며 그 이후로 사용 해 왔습니다. 어쨌든, 그것은 printf
불행히도 스크립트에서 거의 볼 수 없는 재미있는 BASH의 남용 과 흥미로운 기능을 사용합니다 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
apg
쉽게 기억할 수있는 암호를 원한다면 나쁜 선택이 아닙니다.
; 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)
에 따른 참고 이 암호는 긴 적어도 12 자이어야합니다.
나는 무작위가 아닌 것을 사용하지만 모든 공격 목적 (마스터 비밀번호, 마지막 패스 는 다른 비밀번호를 생성 하기에 충분)으로 다양 합니다. 마스터 비밀번호를 생성하는 방법은 다음과 같습니다.
echo -n "some seed" | openssl dgst -binary -sha1 | base64 | sed -e 's/.\{4\}/& /g'
그리고 출력
H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M=
이제 몇 개의 섹션을 선택하고 비밀번호를 만들고, 재정렬하고, 일부를 제외하고, 문자를 추가하거나 2를 무작위로 사용하십시오. 시드를 기억할 수있는 한 시드를 재생성하고 비밀번호를 복구 할 수 있습니다 (너무 많은 수정을하지 않는 한)
다음은 XKCD 스타일 비밀번호 문구 를 생성하기위한 일회용 스크립트입니다 . /usr/share/dict/words
대부분의 단어가 길지만 쉽게 구할 수 있기 때문에이 사전에 적합하지 않습니다. 더 좋은 암호를 위해 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
그놈 사용자이고 다양한 계정의 비밀번호를 저장해야하는 경우 계시 비밀번호 관리자를 사용해 볼 수 있습니다 . 비밀번호 길이 만 설정하고 문자와 숫자 외에 문장 부호 문자를 포함할지 여부를 선택한다는 기본 비밀번호 생성기 기능이 있습니다.
내가 틀렸다면 나를 바로 잡으십시오.하지만 내가 이해하는 한 컴퓨터가 완전히 임의의 문자열을 만들 수있는 방법 은 없습니다 . 그래서 나는 다음과 같은 아이디어를 생각해 냈습니다 [그리고 그것이 완전히 어리석지 않기를 바랍니다] :
26면 주사위를 던지면 던질 확률은 26이라고 1:26입니다. 다시 말해 26을 던질 확률은 약 0.04 %입니다. 또한 주사위에는 메모리와 버그가 없습니다. 나는 다음 아이디어를 생각해 냈습니다.
인쇄 할 용지 모델 :
참고 : 저는 Math Pro가 아니며 2600 잡지의 기사를 읽은 후이 아이디어를 생각해 냈습니다. 방금 기본 개념에 대한 아이디어를 추가했습니다.
또한 : 이것이 ' 첫 번째 무차별 암호 크래커 작성 '에 대한 완벽한 예가 아닌지 궁금합니다 . 그러나 당신의 질문은 토론을위한이 아이디어를 제시 할 완벽한 이유를 제공했습니다.
강력한 암호를 만들기 위해 .zshrc.local 파일에 두 개의 별칭이 추가되었습니다.
첫 번째는 :
alias pw.graph="cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"
pw.graph 입력 결과는 스페이스 바를 제외하고 키보드로 입력 할 수있는 모든 문자의 5 행입니다.
/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?}
두 번째는 :
alias pw.alnum="cat /dev/urandom | tr -dc '[:alnum:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"
pw.alnum을 입력하면 출력 가능한 모든 문자와 숫자가 모두 대문자와 소문자입니다.
E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv
나는 일반적으로 pw.graph를 사용하고 라인의 임의의 부분을 복사합니다. 일부 암호는 기호를 허용하지 않으므로 pw.alnum의 일부를 사용합니다.
저장된 .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:]
에 대한tr
(tr -dc '[:print:]'
당신은 약간의 편집증 경우). 그러면 키보드에서 사용할 수있는 기호가 문제가됩니다.