명령 행에서 SHA512 비밀번호 해시를 작성하는 방법


83

Linux에서는을 사용하여 SHA1 비밀번호 해시를 만들 수 있습니다 sha1pass mypassword. sha512해시를 만들 수있는 비슷한 명령 줄 도구가 있습니까? 대한 같은 질문 BcryptPBKDF2.


당신은 의미하지 sha1sum않습니까?

1
@Tichodroma 아니오, 실제로 sha1pass데비안에 syslinux-common 패키지의 일부인 명령이 있습니다.
derobert

2
거기의 sha512sum유사로 coreutils의 일부가의 명령 openssl sha512-하지만 어느 쪽도 여분의 물건하지 sha1pass않습니다를.
Keith Thompson

답변:


55

예, 패키지의 mkpasswd일부인 (적어도 데비안에서는) 찾고 whois있습니다. 이유를 묻지 말고 ...

anthony@Zia:~$ mkpasswd -m help
Available methods:
des     standard 56 bit DES-based crypt(3)
md5     MD5
sha-256 SHA-256
sha-512 SHA-512

불행히도 내 버전은 최소한 bcrypt를 수행하지 않습니다. C 라이브러리가 그렇게해야한다면 (그리고 맨 페이지는 강도를 설정하는 -R 옵션을 제공합니다). -R은 sha-512에서도 작동하지만 PBKDF-2인지 확실하지 않습니다.

bcrypt 암호를 생성해야하는 경우 Crypt::Eksblowfish::BcryptPerl 모듈을 사용하여 간단하게 수행 할 수 있습니다 .


70

Fedora, CentOS 또는 RHEL과 같은 Red Hat 배포판에서 명령 mkpasswd에는 일반적으로 Debian / Ubuntu에 포함 된 버전과 동일한 스위치 세트가 포함되어 있지 않습니다.

참고 : 이 명령 mkpasswd은 실제로 expect패키지의 일부이므로 피해야합니다. 다음 명령 중 하나를 사용하여 패키지가 속하는 패키지를 찾을 수 있습니다.

$ yum whatprovides "*/mkpasswd"
-or-
$ repoquery -q --file */mkpasswd

$ repoquery -q --file */mkpasswd
expect-0:5.43.0-8.el5.x86_64
expect-0:5.43.0-8.el5.i386

이 두 가지 방법 모두 rpm패키지를 찾을 필요가 없기 때문에 사용하는 것보다 우수합니다 */mkpasswd.

해결 방법

이 문제를 해결하려면 다음 Python 또는 Perl one-liner를 사용하여 SHA-512 암호를 생성하십시오. 이것들은 소금에 절인 것을 유의하십시오 :

파이썬 (> = 3.3)

$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'

또는 스크립팅 된

$ python -c 'import crypt; print(crypt.crypt("somesecret", crypt.mksalt(crypt.METHOD_SHA512)))'

파이썬 (2.x 또는 3.x)

$ python -c "import crypt, getpass, pwd; \
             print(crypt.crypt('password', '\$6\$saltsalt\$'))"

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

참고 : $ 6 $는 sha512를 나타냅니다. 알고리즘을 지정하는이 방법에 대한 지원은 OS 레벨 crypt (3) 라이브러리 함수 (일반적으로 libcrypt)의 지원에 따라 다릅니다. 파이썬 버전에 의존하지 않습니다.

$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'
$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

이 예에서 비밀번호는 문자열 "password"이고 솔트는 "saltsalt"입니다. 두 예제 모두 $ 6 $ 를 사용하고 있는데 이는 crypt가 SHA-512를 사용하기를 원한다는 것을 나타냅니다.


2
파이썬 1 라이너 crypt.mksalt(crypt.METHOD_SHA512)의 경우 고정 소금을 사용하는 대신 소금을 생성하는 데 사용할 수 있습니다 .
Jake Cobb

2
@JakeCobb는 crypt.mksalt파이썬 3.x를에서만 사용할 수 있습니다
리카르도 Murri 지역

2
명령 행에 일반 텍스트 비밀번호를 입력하기 전에 HISTCONTROL에 "ignorespace"가 설정되어 있는지 확인하십시오 (즉, CentOS / RHEL에서 먼저 수행하십시오 : echo 'export HISTCONTROL = "ignoredups : ignorespace"'> /etc/profile.d /histcontrol.sh 및 소스 /etc/profile.d/histcontrol.sh). 그렇지 않으면 ~ / .bash_history에 저장됩니다.
Patrick

3
펄 (그리고 아마도 파이썬)은 시스템 함수 "crypt"를 사용한다. 따라서 이식성이 없으므로 요청 된 해시 유형을 이해하는 암호화 기능이 필요합니다. OSX 암호화는 그렇지 않습니다. 구식 DES 암호화 문자열을 돌려줍니다.
Dan Pritts

1
@RiccardoMurri 저는 Python 2.7.5를 가지고 crypt.mksalt있으며 CentOS 7.1에서 액세스 할 수 있습니다
user12345

15

패키지에 doveadm포함 된 유틸리티 를 사용할 수 있습니다 dovecot.

doveadm pw -s SHA512-CRYPT

결과 예 :

{SHA512-CRYPT}$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1

{SHA512-CRYPT}를 잘라 내면 SHA512 해시 문자열이 나타납니다.


일반 사용자로 작동하지 않습니다 :doveadm(jotik): Fatal: Error reading configuration: stat(/etc/dovecot/dovecot.conf) failed: Permission denied (euid=1000(jotik) egid=100(users) missing +x perm: /etc/dovecot, we're not in group 97(dovecot), dir owned by 0:97 mode=0750)
jotik

12

이 명령을 실행하십시오 :

$ /sbin/grub-crypt --sha-512

그런 다음 해시하려는 단어를 입력하십시오.


-bash : / sbin / grub-crypt : 해당 파일이나 디렉토리가 없음
윌 셰퍼드

나는 grub이 c7에 있다고 생각하지 않으므로 다음을 사용할 수 있습니다. python -c 'import crypt, getpass; print (crypt.crypt (getpass.getpass (), crypt.mksalt (crypt.METHOD_SHA512))) '
ucemike

3

위의 @ slm의 해결 방법을 확장하기 위해 누군가가 bash 기록을 보유하고 일반 텍스트 암호를 보는 것이 걱정 raw_input()되는 경우 소금 및 암호 필드가있는 python 문에 삽입 하여 프롬프트를 표시 할 수 있습니다. 입력하는 동안 텍스트가 숨겨지지 않지만 bash 기록에는 표시되지 않습니다. 선행 공백으로 명령을 시작할 수도 있지만 항상 잊어 버립니다.

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')"

2
또한 구성 할 수있는 bash공간이 추가로 시작 명령을 기록하지 않는 HISTCONTROL=ignorespace당신에 .bashrc파일을. 기록에서 제외하려는 명령을 실행할 때 단순히 공백을 입력 한 다음 실제 명령을 입력하십시오.
theillien

1

sha512 htpasswd

사용자와 비밀번호를 요청하고 일반 htpasswd 파일을 생성하는 명령 :

python -c 'import crypt,getpass; print(getpass.getpass("Name: ")+":"+crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))' >> htpasswd

모든 파이썬 버전> 2.5에서 작동합니다.


1

OpenSSL은

openssl passwd -6

도움말 :

$ openssl passwd --help
Usage: passwd [options]
Valid options are:
...
 -6                  SHA512-based password algorithm

0

sim의 답변에서 Python (> = 2.7) 메소드를 사용하고 비밀번호를 생성하기 전에 비밀번호를 확인하려는 경우-굵은 손가락 비밀번호 때문에 ...

$ python -c 'import crypt,getpass;pw=getpass.getpass(); print(crypt.crypt(pw), crypt.mksalt(crypt.METHOD_SHA512) if (pw==getpass.getpass("Confirm: ")) else exit())'

이 답변의 2017 년 11 월 29 일 버전에서는 파이썬 2.7 이상에서 작동한다고 말합니다. python2.7의 crypt 모듈에는 mksalt ()가 없습니다. 또한 crypt.mksalt () 호출을 crypt.crypt ()에 대한 두 번째 인수로 원한다고 생각합니다.
Juan

0

Linux의 openssl 버전 "OpenSSL 1.1.1"및 MacOS의 openssl 버전 "LibreSSL 2.6.5"는 md5_crypt를 지원합니다.

그냥 실행하고 비밀번호를 입력하십시오 :

openssl passwd -crypt
Password:
Verifying - Password:
<results_into_a_md5_crypt_password>

또는 일반 텍스트 비밀번호를 CLI에 직접 제공하십시오.

openssl password -crypt <plain_text_password_goes_here>
<results_into_a_md5_crypt_password>

-12

당신은 사용할 수 있습니다 sha512sum:

echo "password" | sha512sum

24
이 답변은 잘못되었습니다. 이 명령은 유효한 SHA-512 암호 해시를 생성하지 않습니다 . 단순히 문자열 암호의 체크섬을 계산합니다 \ n (끝에 줄 바꿈이 있음에 유의하십시오). 유닉스 암호 해시는 솔트 처리되어 있고 두 개의 "$"기호 사이의 해시 버전 코드를 포함합니다. @slm의 답변을 참조하십시오.
zorlem

보다 구체적으로, 문제는 암호가 다소 난독 화되어 있지만이 방법은 en.wikipedia.org/wiki/Rainbow_table 공격에 취약하다는 것 입니다.
DepressedDaniel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.