임의의 문자열 (예 : 비밀번호, 사용자 이름 등)을 생성하고 싶습니다. 필요한 길이 (예 : 13 자)를 지정할 수 있어야합니다.
어떤 도구를 사용할 수 있습니까?
보안 및 개인 정보 보호를 위해 웹 사이트의 온라인과 달리 온라인에서 문자열을 생성하는 것이 좋습니다.
apg
.
/dev/urandom
. random.org 기반의 진정한 난수 생성기를 사용하여 답변을 얻는 것이 좋을 것 입니다.
임의의 문자열 (예 : 비밀번호, 사용자 이름 등)을 생성하고 싶습니다. 필요한 길이 (예 : 13 자)를 지정할 수 있어야합니다.
어떤 도구를 사용할 수 있습니까?
보안 및 개인 정보 보호를 위해 웹 사이트의 온라인과 달리 온라인에서 문자열을 생성하는 것이 좋습니다.
apg
.
/dev/urandom
. random.org 기반의 진정한 난수 생성기를 사용하여 답변을 얻는 것이 좋을 것 입니다.
답변:
가장 좋아하는 방법은 /dev/urandom
함께 사용하여 tr
원하지 않는 문자를 삭제 하는 것입니다 . 예를 들어 숫자와 문자 만 가져 오려면
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13 ; echo ''
또는 OWASP 비밀번호 특수 문자 목록 에서 더 많은 문자 를 포함 시키려면 다음을 수행 하십시오 .
</dev/urandom tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' | head -c 13 ; echo
tr
입력에 대해 불평 하는 데 문제가 있으면 다음 과 같이 추가LC_ALL=C
하십시오.
LC_ALL=C tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13 ; echo
head /dev/urandom | tr -dc A-Za-z0-9 | head -c10
-이 방법이 더 정확합니다. 당신은 대문자, 소문자 또는 숫자 인 10 개의 문자를 얻습니다
head
명령에 문제가있을 수 있습니다. 에서 첫 10 줄을 출력합니다. /dev/urandom
즉, 10 번째 줄 바꿈을 본 후에 중지됩니다. 따라서 tr
명령으로 전송되는 출력 길이 는 임의적입니다. 의 출력에 13 자 미만이있을 수 있습니다 tr
. 나는 이것이 일어날 확률을 계산하지 않았으며, 계산은 약간 까다 롭습니다.
<dev/urandom tr -dc "$charset" | head -c "$length"
tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
tr ..
명령으로 작동하지 않는 것이 확실하지 않지만 모든 것을 인용하는 것 (작은 따옴표 제외)이 작동합니다 tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'
.
임의의 비밀번호를 생성하려면 다음을 사용할 수 있습니다 pwgen
.
pwgen은 임의의 의미는 없지만 발음하기 쉬운 암호를 생성합니다. 이 암호에는 소문자 또는 대소 문자 혼합 또는 숫자 만 입력 할 수 있습니다. 대문자와 숫자는 단어 만 기억할 때 위치를 쉽게 기억할 수있는 방식으로 배치됩니다.
길이가 13 인 7 개의 비밀번호를 생성하십시오.
geek@liv-inspiron:~$ pwgen 13 7
Eu7Teadiphaec giepahl3Oyaiy iecoo9Aetaib4 phaiChae6Eivi athoo3igee8Co
Iphu4ufeDeelo aesoYi2lie9he
주석에서 언급했듯이 -s
인수 를 사용하여 엔트로피가 줄어드는 것을 피할 수 있습니다 (예 : 더 안전하고 완전히 임의적이지만 기억하기 어려운 비밀번호 생성).
geek@liv-inspiron:~$ pwgen -s 13 7
eAfycrPlM4cYv 4MRXmZmyIVNBp D8y71iqjG7Zq7 FQRHcserl4R8O yRCUtPtV3dsqV
0vJpp2h0OrgF1 QTp7MKtJyTrjz
임의의 사용자 이름을 생성하려면 다음을 사용할 수 있습니다 gpw
.
이 패키지는 확실한 암호를 생성합니다. 그것은 당신이 그것을 공급하는 사전에서 가져온 세 글자 조합 (기록)의 통계를 사용합니다.
길이가 13 인 7 개의 비밀번호 (사용자 이름)를 생성하십시오.
geek@liv-inspiron:~$ gpw 7 13
sreepoidahsas
risadiestinge
ntodynesssine
deodstestress
natinglumperm
riasigentspir
enderiferback
pwgen -s
.
나는 openssl
암호의 스위스 군용 칼 명령을 사용하고 있습니다.
openssl rand -base64 12
또는
openssl rand -hex 12
rand -hex
키보드의 90 +가 아닌 16 자로 출력이 제한됩니다. base64는 64 자이므로 더 낫지 만 무작위는 아닙니다 (예 : 예측 가능한 패딩 패턴이 있거나 일부 문자가 다른 문자보다 자주 나타남).
openssl rand -base64 12
는 16 개의 출력 문자를 생성합니다 (256 개의 값이 64에 매핑되기 때문에). 16 진수 예제는 24자를 생성합니다. 간단한 1 : 2 매핑이기 때문에 16 진수의 경우 손실이 없지만 패딩이 사용되기 때문에 base64의 경우 약간있을 수 있습니다. 기수는 임의성에 영향을 미치지 않으며 하나가 다른 것과 매핑되는 방식입니다. (그리고 총 비트 수는 훨씬 더 중요합니다).
방법은 다음과 같습니다. 10 자의 임의 문자열을 생성합니다. "문자열"을 다른 문자열 처리 도구로 대체하여 최적화 할 수 있습니다.
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1
/dev/urandom
물론 코스 사용도 빼고
내가 사용하는 모든 배포판에 내장 된 표준 Linux 도구로 가능한 최고의 엔트로피로 암호를 생성하려면 다음을 수행하십시오.
< /dev/urandom tr -cd "[:print:]" | head -c 32; echo
32 (공백)에서 126 (물결표, ~
) 까지 모든 ASCII 인쇄 가능 문자를 출력합니다 . 비밀번호 길이는 head
의 -c
플래그 로 제어 할 수 있습니다 . 다른 가능한 문자 세트도 있습니다 tr
(공백을 포함하지 않고 문자 33-126, 사용 [:graph:]
).
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echo
` characters in generated string.
많은 언어에서 이스케이프 문자이므로`을 원하지 않는 경우 문제가 발생합니다
< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echo
제외 | \ /`and space
원하는 임의성 수준에 따라 bash ( zsh
및 ksh
가능하면 다른) 내장 $RANDOM
변수를 사용할 수 있습니다.
$ echo $RANDOM | tr '[0-9]' '[a-z]'
bfeci
$ echo $RANDOM | tr '[0-9]' '[a-z]'
cijjj
직접 읽는 방법 /dev/urandom
은 훨씬 간단하지만 완료를 위해 다음을 사용할 수도 있습니다 $RANDOM
.
echo $(for((i=1;i<=13;i++)); do printf '%s' "${RANDOM:0:1}"; done) | tr '[0-9]' '[a-z]'
중요 :이 솔루션은 알파벳의 처음 10자를 사용하여 임의의 문자열 만 생성합니다. 그것이 당신에게 충분한 지 아닌지는 당신이 이것에 필요한 것에 달려 있습니다.
$RANDOM
0에서 32767 사이의 숫자를 인쇄합니다.
rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)
대신에 비슷한 것을 사용하고 싶습니다 .
Pablo Repetto에서 영감을 얻은이 기억하기 쉬운 솔루션으로 끝났습니다 .
shuf -zer -n20 {A..Z} {a..z} {0..9}
-z는 다중 라인 출력을 피합니다
-e 결과를 에코
-r 모든 문자가 여러 번 나타날 수 있도록 허용
길이가 20자인 -n20 임의 문자열
{A..Z} {a..z} {0..9} 문자 클래스 허용
shuf
Linux coreutils의 일부이며 광범위하게 사용 가능하거나 적어도 포팅되었습니다.
@Brandin은 다른 답변에 대한 의견에서 최대 100 바이트를 /dev/urandom
사용 하는 방법을 설명했습니다 head -c 100
. 이를 수행하는 다른 방법은 다음과 dd
같습니다.
tr -dc A-Za-z0-9 < /dev/urandom | dd bs=100 count=1 2>/dev/null
2>/dev/null
의 마지막 dd
명령은 출력 "/ ... 기록 아웃 ... 레코드"를 억제하는 것이다.
나는이 두 가지 방법 사이의 실질적인 장점 / 단점을 알지 못합니다.
tr
입력에 대해 불평 하는 두 가지 방법에 문제가있었습니다 . 나는 이것이 바이너리 입력을받는 것을 좋아하지 않기 때문에 생각했기 때문에으로 첫 번째 필터링 /dev/random
을 제안 했습니다 iconv -c -t US
. 그러나 Gilles는 다음과 같은 다른 진단 및 솔루션을 제안했습니다.
LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | dd bs=100 count=1 2>/dev/null
iconv
솔루션은 하나 개의 CPU 코어를 maxes과 출력을 얻을하지 않습니다 (나는 그것을 죽이는 전에 약간의 10 초를 기다렸다) ...
libc-bin
2.19 에 의해 제공됩니다 . 그것이 같은 iconv인지 확실하지 않습니다 ...
tr
이진 입력을 지원합니다. 그러나 같은 범위 A-Z
는 로케일 설정에 영향을받을 수 있습니다. 시도LC_ALL=C tr …
tr
는 멀티 바이트를 전혀 지원하지 않기 때문에 (예를 들어 마지막으로 모든 바이트의 여섯 번째 비트를 설정하여 변경 사례가 구현되었는지 확인) GNU 만 지원합니다. 다른 시스템 (예 : BSD)은 멀티 바이트를 지원하며 임의의 입력 스트림이 유효한 멀티 바이트 스트림 일 가능성도 대부분의 인코딩에서 매우 작기 때문에 실패합니다. GNU 는 특정 시점에 멀티 바이트 지원을 추가 할 수 있으며이 시점에서 실패합니다. 물론 설정 LC_ALL=C
하면 문제가 해결됩니다.
tr
이진 입력 (C 로케일)을 처리 해야 합니다. (음, 그것은 단지 널 바이트가 지원되어야 함을 명시 적으로 말하고, 개행 문자로 끝나지 않은 비어 있지 않은 파일은 지원되어야한다는 것이 아니라 실제로는 항상 그렇습니다.)
md5
정확하게이 목적을 가진 도구 중 하나를 사용할 수 있습니다 . 완전히 임의의 암호를 만드는 경우을 사용할 수 있습니다 md5pass
. "일반 텍스트"를 "소금"과 함께 사용하여 나중에 복구 할 수있는 동일한 암호를 점프 비트 구성으로 사용할 수 있거나 완전히 다른 방법으로 사용할 수 있기 때문에 사용하기에 매우 유용한 도구입니다. 항상 임의의 비밀번호. 일반적인 사용법은 다음과 같습니다.
md5pass [password] [salt]
여기서 password
임의의 문자열 구성에 사용될 선택된 단어이며 사용되는 salt
바이트 단위의 점프입니다. 이처럼 :
md5pass word
$1$.MUittVW$j.XDTF1QRnxqFdXRUiSLs0
이렇게하면 "임의의 시퀀스"암호가 만들어집니다. no를 사용 salt
하면 나중에이 동일한 문자열을 다시 작성하지 못할 수 있습니다.
그러나 다음 salt
과 같이 사용하면
md5pass word 512
$1$512$.0jcLPQ83jgszaPT8xzds0
그런 다음 단어가 원래 정의 된 경우 동일한 소금 (또는 점프)과 함께 단어를 사용하면 복구 할 수있는 시퀀스를 만들 수 있습니다.
salt
를 사용할 때 , 이것은 PasswordMaker 접근 방식과 비슷하게 들립니다.
xxd
Linux 및 OS에서 작동하는 길이를 -l을 통해 지정 하려면 명령을 사용하십시오 .
https://www.howtoforge.com/linux-xxd-command/
xxd -l16 -ps /dev/urandom
이 두 명령은 각각 임의의 비밀번호와 비밀번호 문구를 생성합니다.
shuf --random-source=/dev/urandom --repeat --head-count=20 file_with_characters | tr --delete '\n'
shuf --random-source=/dev/urandom --repeat --head-count=7 file_with_words | tr '\n' ' '
비밀번호 생성기는 비밀번호에 사용하려는 모든 문자, 한 줄에 하나씩, 정확히 한 번에 하나씩 포함 된 file_with_characters가 필요합니다. 파일에는 빈 줄이 없어야하며 줄은 개행으로 끝나야합니다.
비밀번호 문구 생성기는 비밀번호 문구에 사용할 모든 단어, 한 줄에 하나씩, 정확히 한 번에 하나씩 포함 된 file_with_words가 필요합니다. 파일에는 빈 줄이 없어야하며 줄은 개행으로 끝나야합니다.
--head-count 옵션은 암호 길이 (문자 또는 암호)를 단어로 지정합니다.
macOS에서 tr로 / dev / urandom을 파이프하는 것이 작동하지 않는 것을 발견했습니다. 다른 방법이 있습니다.
set="abcdefghijklmonpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
n=6
rand=""
for i in `seq 1 $n`; do
char=${set:$RANDOM % ${#set}:1}
rand+=$char
done
echo $rand
나는 사용한다:
base64 < /dev/urandom | tr -d 'O0Il1+\' | head -c 44
이것은 57 개의 가능한 문자를 제공합니다. 구별하기 어려운 문자 ( )가 제거되었으므로 문자열을 복사하여 붙여 넣기 (제거 +
및 \
)하거나 인쇄하고 다시 입력 할 수 있습니다 I1lO0
.
나는 이것을 좋아한다.
에 신용 https://unix.stackexchange.com/a/230676/9583 내 초기 영감 특히 코멘트.
1
(숫자 승 / 하나를 얻을 수있는 새로운 생성 할 때 엔트로피를 감소시키지 않고 수행 엔트로피를 감소 참조). !
엔트로피를 줄이지 않고 안전하게 추가 할 수도 있습니다 . 어느 체계도 어느 것도 가치있는 엔트로피를 증가 시키지는 않지만 생성 된 문자열을 이전 암호 요구 사항을 준수 할 수 있습니다.
"한 가지 일을 잘 수행하는 많은 작은 도구"라는 유닉스 철학은이 경우 매우 유용합니다.
/dev/urandom
임의의 "바이트" 스트림 (인쇄 할 수없는 문자 포함)base64
바이트 데이터를 [A-Za-z0-9/+]
(인쇄 할 수있는)dd
인수로 주어진 수정자를 적용하여 출력에 입력을 복사합니다 (블록 크기 및 블록 수를 포함 할 수 있음).OSX
base64 < /dev/urandom | dd bs=1k count=1
리눅스
base64 -w0 < /dev/urandom | dd bs=1k count=1
노트:
tr -d '[A-Z/+]'
대문자를 제거 +
하고/
bs
(블록 크기)를 원하는 길이로 설정할 수 있습니다 .base64
기본적으로 76 개의 열로 줄 바꿈되며 -w0
원하지 않는 경우 다시 설정해야합니다 .평소의 명령을 입력하여 비밀번호를 생성하고 싶습니다.
$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' |cut -c -13
b0R55751vWW9V
비밀번호 길이를 구성하려면 cut 명령의 숫자를 필요한 길이 (예 : 24 자)로 변경하십시오.
$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' |cut -c -24
WFBhVHuKbrnRhd5kdWXPzmZG
0 또는 O, 1 또는 l을 혼동하고 싶지 않습니까? 다른 필터로 필터링tr
$ cat /dev/urandom | base64 | head -n 1 |tr -dc '[:alnum:]' | tr -d '0O1l'|cut -c -24
JuCphwvhrhppD9wVqfpP2beG
나는 개인적으로 암호에 특별한 문자를 선호하지 않으므로 [:alnum:]
암호 생성기 에만 선택 합니다
secpwgen
Alpine Linux에서 유지 관리 하고 소스를 Github에 유지합니다 .
임의의 문자열 또는 주사위 문구를 생성 할 수 있습니다.
musl64 [~]$ secpwgen
USAGE: secpwgen <-p[e] | -A[adhsy] | -r | -s[e]> N
PASSPHRASE of N words from Diceware dictionary
-p generate passphrase
-pe generate enhanced (with symbols) passphrase
SKEY PASSWORD of N words from S/Key dictionary
-s generate passphrase
-se generate enhanced (with symbols) passphrase
ASCII RANDOM of N elements (at least one option MUST be present)
-A Each letter adds the following random elements in output:
a alphanumeric characters
d decimal digits
h hexadecimal digits
s special characters
y 3-4 letter syllables
RAW RANDOM
-r output BASE64 encoded string of N random BITS
-k output koremutake encoding of N random BITS
13 자의 임의 문자열을 생성하려면 다음을 사용하십시오.
musl64 [~]$ secpwgen -Aas 13
----------------
WK5#*V<]M3<CU ;ENTROPY=67.21 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.
musl64 [~]$ secpwgen -Aa 13
----------------
GP0FIEBM9Y3BT ;ENTROPY=67.21 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.
사용자가 비밀번호를 기억하려면 diceware 구문을 사용하십시오.
musl64 [~]$ secpwgen -p 5
----------------
wq seen list n8 kerr ;ENTROPY=65.00 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.
나는 개인적으로 좋아한다 :
musl64 [~]$ secpwgen -r 512
----------------
h62lL7G4gwh3/j9c7YteQvVXoqJrQKKPWVR3Lt7az36DcfWZWtUgBT19iwmJBwP4UahNzPe7qYD7OcklUFpCzQ== ;ENTROPY=512.00 bits
----------------
INFO: destroying random number generator.
INFO: zeroing memory.
매우 안전한 암호를 얻는 방법 (여기서 16은 암호 길이입니다) :
cat /dev/urandom | tr -cd [:graph:]|head -c 16
결과 예 :
jT@s_Nx]gH<wL~W}
또는 여러 개의 비밀번호를 생성하려면 다음을 수행하십시오.
고양이 / dev / urandom | tr -cd [: 그래프 :] | 폴드 -w 16 | 헤드 -6
결과 예 :
7ck%G7'|f&}_8(]s
<?*]E.CG[NB'gK#A
:tF-WPTOa3!i7S(h
2xy(>=%3=Kb1B$`6
*98Lf{d?Jzb}6q1\
E7uCEAN2Hz]]y|5*
보안 수준이 낮음 (작은 문자 집합) :
cat /dev/urandom |base64 -w 0|fold -w 16|head -6
결과 예 :
rJqYxYZLOTV+A45w
PUKQ+BoBf6yfZw5m
+LRfpsN9CsLRiN8V
yMS6zDpL6NHmG17s
yTUWPG7Rum97schi
cognvjVwaKaAyPRK
이것을 달성하기위한 매우 쉽고 간단한 (아마도 더 간단하게) 방법은 주어진 범위에서 임의의 숫자를 생성하고 그 숫자를 동등한 ASCII 문자로 변환 한 다음 문자열 끝에 추가하는 것입니다 .
다음은 파이썬의 기본 예입니다.
import random # import random library
passFile = open("passwords.txt", 'w') # create file passwords.txt
passNum = int(input("Number of passwords: ")) # get number of passwords
passLength = int(input("Password length: ")) # get length of passwords
for i in range(passNum):
password = "" # reset password
for i in range(passLength):
num = random.randint(65, 122) # get random number
while num in range(91, 97): # Don't include punctuation
num = random.randint(65, 122)
password += chr(num) # add character to current password
passFile.write(password + "\n") # add current password to file
passFile.close() # close file
편집 : 주석 추가 및 코드를 추가하여 여러 암호를 생성하고 파일에 작성
이 명령을 원합니다 :
date +%s | sha256sum | base64 | head -c 12
date +%N
스크립트에서 많은 사용자 및 암호를 생성하는 경우 때문에, 초 따라서 동일한 암호를 생산, 많은 또는 모든 날짜 명령에 대한 동일 될 수 있습니다.
dd if=/dev/random bs=512 count=1
합니까?
http://passwordsgenerator.net/으로 이동 하면 최대 2048 자까지 임의의 문자열을 생성하고 대문자, 소문자, 숫자 0-9, 문장 부호 또는 임의의 조합을 선택할 수 있습니다.
apg
.)