วิธีสร้างแฮชรหัสผ่าน SHA512 ในบรรทัดคำสั่ง


83

ใน Linux ฉันสามารถสร้างรหัสผ่านกัญชา SHA1 sha1pass mypasswordใช้ มีเครื่องมือบรรทัดคำสั่งที่คล้ายกันซึ่งทำให้ฉันสร้างsha512แฮชได้หรือไม่ คำถามเดียวกันและBcryptPBKDF2


คุณไม่หมายถึงsha1sumเหรอ

1
@Tichodroma ไม่มีจริงsha1passคำสั่งเป็นส่วนหนึ่งของแพคเกจ syslinux- ทั่วไปใน Debian
Derobert

2
มีsha512sumคำสั่งที่เป็นส่วนหนึ่งของ coreutils และในทำนองเดียวกันopenssl sha512- แต่ไม่ได้ทำสิ่งพิเศษที่sha1passทำ
Keith Thompson เมื่อ

คำตอบ:


55

ใช่คุณกำลังมองหาmkpasswdซึ่ง (อย่างน้อยก็ใน Debian) เป็นส่วนหนึ่งของ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 ของคุณทำเช่นนั้นควร (และ manpage ให้ตัวเลือก -R เพื่อตั้งค่าความแข็งแกร่ง) -R ใช้ได้กับ sha-512 แต่ฉันไม่แน่ใจว่า PBKDF-2 ของมันหรือไม่

หากคุณต้องการสร้างรหัสผ่าน bcrypt คุณสามารถทำได้ง่ายๆด้วยCrypt::Eksblowfish::Bcryptโมดูล Perl


70

ใน Redros distros ใด ๆ เช่น Fedora, CentOS หรือ RHEL คำสั่ง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-liners ต่อไปนี้เพื่อสร้างรหัสผ่าน SHA-512 พึงระลึกไว้ว่าสิ่งเหล่านี้มีความเค็ม:

Python (> = 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)))'

Python (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

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

ในตัวอย่างเหล่านี้รหัสผ่านคือสตริง "รหัสผ่าน" และเกลือคือ "saltsalt" ตัวอย่างทั้งสองใช้$ 6 $ซึ่งหมายถึงว่าคุณต้องการฝังศพใต้ถุนโบสถ์เพื่อใช้ SHA-512


2
สำหรับไพ ธ อนหนึ่งซับคุณสามารถใช้crypt.mksalt(crypt.METHOD_SHA512)เพื่อสร้างเกลือแทนการใช้เกลือถาวร
Jake Cobb

2
@JakeCobb crypt.mksaltมีให้เฉพาะใน Python 3.x
Riccardo Murri

2
ก่อนที่จะพิมพ์รหัสผ่านแบบข้อความที่บรรทัดคำสั่งตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่า "ignorespace" ใน HISTCONTROL (เช่นให้ทำสิ่งนี้เป็นครั้งแรกบน CentOS / RHEL: echo 'export HISTCONTROL = "ละเว้น ups: ignorespace"'> /etc/profile.d /histcontrol.sh && source /etc/profile.d/histcontrol.sh) มิฉะนั้นจะได้รับการบันทึกใน ~ / .bash_history ของคุณ
Patrick

3
perl (และ python น่าจะ) ใช้ฟังก์ชันระบบ "crypt" ดังนั้นจึงไม่สามารถพกพาได้พวกเขาต้องการฟังก์ชัน crypt ที่เข้าใจประเภทแฮชที่ร้องขอ OSX crypt ไม่ได้ - เพียงแค่คืนสายอักขระ DES-เข้ารหัสแบบเก่าให้ฉัน
Dan Pritts

1
@RiccardoMurri ฉันมี Python 2.7.5 และเข้าถึงได้crypt.mksaltบน CentOS 7.1
12345

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: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
Will Sheppard

ฉันไม่เชื่อว่าด้วงนั้นอยู่บน c7 ดังนั้นคุณสามารถใช้: python -c 'crypt นำเข้า, getpass; พิมพ์ (crypt.crypt (getpass.getpass (), crypt.mksalt (crypt.METHOD_SHA512))) '
ucemike

3

หากต้องการขยายขอบเขตการแก้ปัญหาของ @ slm ด้านบนหากคุณกังวลเกี่ยวกับคนที่ได้รับประวัติทุบตีของคุณและเห็นรหัสผ่านข้อความธรรมดาคุณสามารถแทรกraw_input()ในคำสั่ง python ที่ช่องใส่เกลือและรหัสผ่านแสดงขึ้นมา ข้อความไม่ถูกปิดบังในขณะที่คุณกำลังพิมพ์ แต่จะไม่ปรากฏในประวัติทุบตีของคุณ คุณสามารถเริ่มต้นคำสั่งด้วยช่องว่างนำ แต่ฉันมักจะลืมที่จะทำ

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



0

หากคุณใช้วิธี 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())'

ในคำตอบนี้เวอร์ชัน 29 พฤศจิกายน 2017 มันบอกว่ามันใช้งานได้กับ python 2.7 (หรือใหม่กว่า) โมดูล crypt ของ python2.7 ไม่มี mksalt () นอกจากนี้ฉันคิดว่าคุณต้องการให้การโทร crypt.mksalt () เป็น arg ที่ 2 เพื่อ crypt.crypt () (วางผิดใกล้ paren?)
Juan

0

openssl รุ่น "OpenSSL 1.1.1” บน Linux และ openssl เวอร์ชัน" LibreSSL 2.6.5” บน MacOS รองรับ 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 (โปรดทราบว่ายังมีการขึ้นบรรทัดใหม่ในตอนท้าย) แฮชรหัสผ่าน Unix จะถูกใส่เกลือและใส่รหัสเวอร์ชั่นแฮชระหว่างสองสัญลักษณ์ "$" ดูคำตอบโดย @slm
zorlem

โดยเฉพาะอย่างยิ่งปัญหาคือในขณะที่รหัสผ่านค่อนข้างสับสนวิธีนี้มีความเสี่ยงต่อการโจมตีen.wikipedia.org/wiki/Rainbow_table
DepressedDaniel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.