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


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 ( 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자를 사용하여 임의의 문자열 만 생성합니다. 그것이 당신에게 충분한 지 아닌지는 당신이 이것에 필요한 것에 달려 있습니다.


생성 된 문자열의 길이를 어떻게 제어합니까?
— 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.