무작위 문자열을 생성하는 방법?


209

임의의 문자열 (예 : 비밀번호, 사용자 이름 등)을 생성하고 싶습니다. 필요한 길이 (예 : 13 자)를 지정할 수 있어야합니다.

어떤 도구를 사용할 수 있습니까?

보안 및 개인 정보 보호를 위해 웹 사이트의 온라인과 달리 온라인에서 문자열을 생성하는 것이 좋습니다.


1
AskUbuntu에 이미 좋은 답변이 있습니다. (개인적으로 사용합니다 apg.)
Sparhawk

1
@Sparhawk AskUbuntu 질문 / 답변은 리스팅 도구에 대한 자세한 내용입니다. 여기 에 임의의 문자열을 생성하는 방법 을 보여주는 답변을 추가하십시오 apg.
landroni

1
컴퓨터에서 난수 생성 사용에주의하십시오. 어떤 것들은 보이는 것보다 훨씬 덜 무작위 적이지만, '좋은'과 '나쁜'난수 생성의 차이를 말하는 것은 매우 어렵습니다.
Sobrique

@ 소 브리 크 의사 난수 생성기 (예 :)에 대한 탁월한 점 /dev/urandom. random.org 기반의 진정한 난수 생성기를 사용하여 답변을 얻는 것이 좋을 것 입니다.
landroni

25
농담 답변 : 실제로 임의의 문자열을 생성하려면 Emacs (또는 Vim) 앞에 새로운 사용자를 배치하고 종료하도록 요청하십시오. ;)
와일드 카드

답변:


186

가장 좋아하는 방법은 /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

15
또는 이렇게하십시오 : head /dev/urandom | tr -dc A-Za-z0-9 | head -c10-이 방법이 더 정확합니다. 당신은 대문자, 소문자 또는 숫자 인 10 개의 문자를 얻습니다
Brandin

8
첫 번째 head명령에 문제가있을 수 있습니다. 에서 첫 10 줄을 출력합니다. /dev/urandom즉, 10 번째 줄 바꿈을 본 후에 중지됩니다. 따라서 tr명령으로 전송되는 출력 길이 는 임의적입니다. 의 출력에 13 자 미만이있을 수 있습니다 tr. 나는 이것이 일어날 확률을 계산하지 않았으며, 계산은 약간 까다 롭습니다.
kasperd

6
더 나은 이런 식으로 작업을 수행합니다<dev/urandom tr -dc "$charset" | head -c "$length"
PSkocik

3
+1 다음 은 bash 명령 행에서 이스케이프 된 OWASP 비밀번호 특수 문자 페이지 에서 다른 문자를 포함시키려는 빠른 시도입니다 .tr -dc A-Za-z0-9\!\"#$\&\'\(\)\*+,-./\:\\\\\;\<=\>\?@[]^_`{\|}~
Rup

2
@Rup 나는 당신의 tr ..명령으로 작동하지 않는 것이 확실하지 않지만 모든 것을 인용하는 것 (작은 따옴표 제외)이 작동합니다 tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~'.
Kenny Evitt

144

임의의 비밀번호를 생성하려면 다음을 사용할 수 있습니다 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

21
바퀴를 재발 명하지 않은 경우 +1 "발음 가능"제약 조건의 엔트로피 감소를 원하지 않으면을 사용하십시오 pwgen -s.
Nate Eldredge

123

나는 openssl암호의 스위스 군용 칼 명령을 사용하고 있습니다.

openssl rand -base64 12

또는

openssl rand -hex 12

10
rand -hex키보드의 90 +가 아닌 16 자로 출력이 제한됩니다. base64는 64 자이므로 더 낫지 만 무작위는 아닙니다 (예 : 예측 가능한 패딩 패턴이 있거나 일부 문자가 다른 문자보다 자주 나타남).
Martin Tournoij

@Carpetsmoker :이 예 openssl rand -base64 12는 16 개의 출력 문자를 생성합니다 (256 개의 값이 64에 매핑되기 때문에). 16 진수 예제는 24자를 생성합니다. 간단한 1 : 2 매핑이기 때문에 16 진수의 경우 손실이 없지만 패딩이 사용되기 때문에 base64의 경우 약간있을 수 있습니다. 기수는 임의성에 영향을 미치지 않으며 하나가 다른 것과 매핑되는 방식입니다. (그리고 총 비트 수는 훨씬 더 중요합니다).
Dennis Williamson

문제는 "특정 길이의 임의의 문자열을 생성하는 방법"@DennisWilliamson이므로 귀하의 의견은 정확 하지만 이 질문의 맥락 에서는 정확하지 않습니다 .
Martin Tournoij

@ Carpetsmoker :이 경우에도이 답변이 아닙니다.
Dennis Williamson

4
이 답변은 더 많은 투표를 받아야합니다. urandom, pwgen, gpw 등은 시스템에서 사용 가능하거나 사용 불가능할 수 있습니다. 또한 다른 환경에서는 한 정책에서 작동하는 정책이 다른 정책에서는 작동하지 않을 수 있습니다. openssl이없는 것은 꽤 기능이 잘못된 설정 일 것입니다. 더 나은 : openssl rand -base64 32 | tr -d / = + | cut -c -16 32 문자에서 비 알파벳을 빼고 16 문자 길이로 자릅니다. 관리자로 쉽게 처리 할 수 ​​있습니다. 사용자에게는 영숫자 만 있습니다 (감사하는 경향이 있음). 길이가 길어 특수 문자를 제거해도 엔트로피에 지나치게 영향을 미치지 않습니다. 황금.
zentechinc

18

방법은 다음과 같습니다. 10 자의 임의 문자열을 생성합니다. "문자열"을 다른 문자열 처리 도구로 대체하여 최적화 할 수 있습니다.

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 1

1
+1이 답변은 POSIX에서 맞습니다. /dev/urandom물론 코스 사용도 빼고
Harold Fischer

12

내가 사용하는 모든 배포판에 내장 된 표준 Linux 도구로 가능한 최고의 엔트로피로 암호를 생성하려면 다음을 수행하십시오.

< /dev/urandom tr -cd "[:print:]" | head -c 32; echo

32 (공백)에서 126 (물결표, ~) 까지 모든 ASCII 인쇄 가능 문자를 출력합니다 . 비밀번호 길이는 head-c플래그 로 제어 할 수 있습니다 . 다른 가능한 문자 세트도 있습니다 tr(공백을 포함하지 않고 문자 33-126, 사용 [:graph:]).


1
기존 답변과 다른 점은 무엇입니까? 특히 허버트 가 떠오른다.
Fox

3
@Fox His 솔루션은 하드 코딩 된 문자 목록을 사용하는데, 이는 코드 가독성, 소형화 및 청결성으로 인해 권장되는 프로그래밍 방식이 아닙니다. 또한 인쇄 가능한 특수 ASCII 문자 중 일부는 bash로 해석 할 수 있습니다. 한 줄의 가장 명백한 단점은 말할 것도 없습니다. 최대 엔트로피가 필요한 경우 사용 가능한 모든 문자가 목록에 포함되어 있는지 확인할 수 있습니까? 그리고 tr의 동작을 바꿀 수있는 중복이 없는가? 당신이 요청한 이후 그의 답변은 내 것으로 대체되어야합니다. :)
drws

2
대부분의 웹 사이트에는 암호에 사용할 수있는 문자에 대한 제한이 있으므로 많은 경우, '[: print :]'하드 코딩은 OWASP 암호 특수 문자 목록을 하드 코딩하는 것보다 나쁘지 않습니다. 변수를 사용하여 여기에있는 거의 모든 대답을 개선 할 수 있다고 생각합니다. 그러나 이것은 단지 편집 만 제안하는 사소한 변화입니다
Fox

1
< /dev/urandom tr -cd '[:graph:]'| tr -d '\\' | head -c 32; echo` characters in generated string. 많은 언어에서 이스케이프 문자이므로`을 원하지 않는 경우 문제가 발생합니다
mzzzzb

< /dev/urandom tr -cd "[:print:]" | tr -d ' \\/\`\|' | head -c 32; echo제외 | \ /`and space
Ryan Krage

9

원하는 임의성 수준에 따라 bash ( zshksh가능하면 다른) 내장 $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자를 사용하여 임의의 문자열 만 생성합니다. 그것이 당신에게 충분한 지 아닌지는 당신이 이것에 필요한 것에 달려 있습니다.


생성 된 문자열의 길이를 어떻게 제어합니까?
landroni

@landroni 올바른 길이를 얻을 때까지 루프를 사용하는 것이 부족하다고 생각하지 않습니다. $RANDOM0에서 32767 사이의 숫자를 인쇄합니다.
terdon

나는 명령을 20 번 정도 실행하려고 시도했지만 4-5
자를

2
@landroni 덕분에 길이를 지정하는 방법을 추가했지만 그다지 좋지 않습니다. rand=$(head -c 100 /dev/urandom | tr -dc A-Za-z0-9 | head -c13)대신에 비슷한 것을 사용하고 싶습니다 .
terdon

1
@SkippyleGrandGourou 아주 좋은 지적. 나는 이것을 대답에 덧붙였다.
terdon

8

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의 일부이며 광범위하게 사용 가능하거나 적어도 포팅되었습니다.


5

@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 초를 기다렸다) ...
landroni

내 우분투 14.04 시스템에서 iconv는 libc-bin2.19 에 의해 제공됩니다 . 그것이 같은 iconv인지 확실하지 않습니다 ...
landroni

tr이진 입력을 지원합니다. 그러나 같은 범위 A-Z는 로케일 설정에 영향을받을 수 있습니다. 시도LC_ALL=C tr …
Gilles

1
@Gilles POSIX 사양에 따르면 이진 입력을 지원하지 않습니다. GNU tr는 멀티 바이트를 전혀 지원하지 않기 때문에 (예를 들어 마지막으로 모든 바이트의 여섯 번째 비트를 설정하여 변경 사례가 구현되었는지 확인) GNU 만 지원합니다. 다른 시스템 (예 : BSD)은 멀티 바이트를 지원하며 임의의 입력 스트림이 유효한 멀티 바이트 스트림 일 가능성도 대부분의 인코딩에서 매우 작기 때문에 실패합니다. GNU 특정 시점에 멀티 바이트 지원을 추가 수 있으며이 시점에서 실패합니다. 물론 설정 LC_ALL=C하면 문제가 해결됩니다.
Martin Tournoij

@Carpetsmoker POSIX는 tr이진 입력 (C 로케일)을 처리 해야 합니다. (음, 그것은 단지 널 바이트가 지원되어야 함을 명시 적으로 말하고, 개행 문자로 끝나지 않은 비어 있지 않은 파일은 지원되어야한다는 것이 아니라 실제로는 항상 그렇습니다.)
Gilles

4

APG 일부 Linux 배포판에는 기본적으로 포함되어 있습니다.

Special, Numeric, Capital 및 Lower 하위 집합에서 크기 5에서 10까지의 암호를 생성하려면 명령은 다음과 같습니다.

apg -MSNCL -m 5 -x 10

그리고 반환

@OpVeyhym9
3:Glul
3DroomIc?
hed&Os0
NefIj%Ob3
35Quok}

댓글에서 @landroni가 말했듯이.


1
다음은 많은 특수 문자를 포함하는 임의의 14 자 암호를 생성하는 옵션입니다.apg -a1 -m14
neuhaus

3

md5정확하게이 목적을 가진 도구 중 하나를 사용할 수 있습니다 . 완전히 임의의 암호를 만드는 경우을 사용할 수 있습니다 md5pass. "일반 텍스트"를 "소금"과 함께 사용하여 나중에 복구 할 수있는 동일한 암호를 점프 비트 구성으로 사용할 수 있거나 완전히 다른 방법으로 사용할 수 있기 때문에 사용하기에 매우 유용한 도구입니다. 항상 임의의 비밀번호. 일반적인 사용법은 다음과 같습니다.

md5pass [password] [salt]

여기서 password임의의 문자열 구성에 사용될 선택된 단어이며 사용되는 salt바이트 단위의 점프입니다. 이처럼 :

md5pass word

$1$.MUittVW$j.XDTF1QRnxqFdXRUiSLs0

이렇게하면 "임의의 시퀀스"암호가 만들어집니다. no를 사용 salt하면 나중에이 동일한 문자열을 다시 작성하지 못할 수 있습니다.

그러나 다음 salt과 같이 사용하면

md5pass word 512

$1$512$.0jcLPQ83jgszaPT8xzds0

그런 다음 단어가 원래 정의 된 경우 동일한 소금 (또는 점프)과 함께 단어를 사용하면 복구 할 수있는 시퀀스를 만들 수 있습니다.


a salt를 사용할 때 , 이것은 PasswordMaker 접근 방식과 비슷하게 들립니다.
landroni

-예 메이커 비밀번호 하나와 비슷하게 들릴 수 있지만 차이점은 상용 프로그램이나 그 밖의 것이 아니라는 것입니다. 여기서 md5pass, md5sum, md5sum.textutils와 같은 md5 도구 세트가 관련되어 있고 시스템을 사용할 수 있기 때문입니다. 무료로 일부 !!!
Joke Sr. OK

필자는 실제로 PasswordMaker 를 염두에 두 었으며 오픈 소스이며 비상업적입니다.
landroni


2

이 두 명령은 각각 임의의 비밀번호와 비밀번호 문구를 생성합니다.

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 옵션은 암호 길이 (문자 또는 암호)를 단어로 지정합니다.


1

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

내 대답의 마지막 예를 확인하십시오. tr을 사용하지 않습니다. unix.stackexchange.com/a/494931/203075
Zibri

1

나는 사용한다:

base64 < /dev/urandom | tr -d 'O0Il1+\' | head -c 44

이것은 57 개의 가능한 문자를 제공합니다. 구별하기 어려운 문자 ( )가 제거되었으므로 문자열을 복사하여 붙여 넣기 (제거 +\)하거나 인쇄하고 다시 입력 할 수 있습니다 I1lO0.

  • 44 자에게 나에게 : log 2 (57 44 )> 256.64 비트 엔트로피
  • 22 문자는 나에게 : log 2 (57 22 )> 128.32 비트 엔트로피

나는 이것을 좋아한다.

  • 명령은 입력하기 쉽고 기억하기 쉽습니다
  • 추가 바이너리가없는 표준 시스템 도구를 사용합니다.
  • 많은 무작위성을 "폐기"하지 않습니다 (무작위 비트의 89 %를 tr로 직접 배관하는 솔루션의 경우 ~ 24 % 사용)
  • 22와 44 문자는 두 개의 중단 점의 공통 전력을 아주 잘 (짝수 위) 짝짓기합니다.
  • 최소한의 인적 오류율로 출력을 쉽게 선택하여 붙여 넣기 또는 인쇄 및 재 입력 할 수 있습니다.
  • md5sum / sha1sum 등과 같은 16 진 인코딩 (22 및 44 대신 32 및 64)보다 짧은 솔루션

에 신용 https://unix.stackexchange.com/a/230676/9583 내 초기 영감 특히 코멘트.


이 경우 필요한 숫자 / 특수 문자 - 안전하게 추가 할 수없는 경우 일반적으로 수있을 것입니다 1(숫자 승 / 하나를 얻을 수있는 새로운 생성 할 때 엔트로피를 감소시키지 않고 수행 엔트로피를 감소 참조). !엔트로피를 줄이지 않고 안전하게 추가 할 수도 있습니다 . 어느 체계도 어느 것도 가치있는 엔트로피를 증가 시키지는 않지만 생성 된 문자열을 이전 암호 요구 사항을 준수 할 수 있습니다.
Iiridayn

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(블록 크기)를 원하는 길이로 설정할 수 있습니다 .
  • Linux에서는 base64기본적으로 76 개의 열로 줄 바꿈되며 -w0원하지 않는 경우 다시 설정해야합니다 .

1

평소의 명령을 입력하여 비밀번호를 생성하고 싶습니다.

$ 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:]암호 생성기 에만 선택 합니다


0

secpwgenAlpine 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.

0

매우 안전한 암호를 얻는 방법 (여기서 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

-1

이것을 달성하기위한 매우 쉽고 간단한 (아마도 더 간단하게) 방법은 주어진 범위에서 임의의 숫자를 생성하고 그 숫자를 동등한 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

편집 : 주석 추가 및 코드를 추가하여 여러 암호를 생성하고 파일에 작성


3
파이썬의 힘이 주어지면 나는이 방식으로 그것을하지 않을 것입니다. 암호에 유효한 모든 문자를 포함하고 무작위를 사용하여 문자를 선택하는 문자열에서 조인을 사용하는 것이 훨씬 쉽습니다.
Mike McMahon

더 나은 다음과 같이 파이썬을 사용하는 code.activestate.com/recipes/578468-password-generator-mkpasswd
Grijesh 차우

-2

이 명령을 원합니다 :

date +%s | sha256sum | base64 | head -c 12

1
차라리 더 무작위 나노초 접근 방식을 사용 : date +%N 스크립트에서 많은 사용자 및 암호를 생성하는 경우 때문에, 초 따라서 동일한 암호를 생산, 많은 또는 모든 날짜 명령에 대한 동일 될 수 있습니다.
John Mayor

1
@JohnMayor :이 접근 방식이 더 강력 dd if=/dev/random bs=512 count=1합니까?
Eugen Konkov

8
이 답변은 매우 위험합니다! 알려진 시드에서 예측하기 쉬운 암호를 생성합니다. 지난 몇 년간이 방법을 사용하여 생성 된 모든 암호를 생성하고이 목록을 무차별 강제 목적으로 사용할 수 있습니다.
흐름

-4

http://passwordsgenerator.net/으로 이동 하면 최대 2048 자까지 임의의 문자열을 생성하고 대문자, 소문자, 숫자 0-9, 문장 부호 또는 임의의 조합을 선택할 수 있습니다.


2
오프라인으로 생성 된 문자열이 바람직하다는 것을 분명히하기 위해 질문을 명확히했습니다. 웹 사이트에서 직접 암호를 생성하는 것은, 특히 연결이 HTTPS가 아닌 경우 (답변에서와 같이) 안전하지 않습니다.
landroni

1
인터넷에서 임의의 암호를 얻는 것은 매우 어리 석고 순진합니다. 이제 일부 서비스 또는 사이트에 사용중인 비밀번호와 사용자에 대한 고유 한 개인 정보 (IP 주소, 브라우저 / 환경 정보)를 알고 있습니다. 이 사이트는 이제 귀하에 대해 수집 된 다른 데이터와 정보를 상호 참조 할 수 있습니다. 예를 들어, 메일 링리스트에 게시 한 IP 주소는 메일 헤더에 있으므로 암호, 이름 및 전자 메일 주소가 있습니다. 여기에서 암호를 사용하여 임의의 낯선 사람을 신뢰하고 있습니다.
Martin Tournoij
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.