Làm cách nào để tạo mật khẩu băm SHA-512 cho bóng?


62

Các câu hỏi SF trước đây tôi từng thấy đã dẫn đến câu trả lời tạo ra mật khẩu băm MD5.

Có ai có gợi ý về việc tạo mật khẩu băm SHA-512 không? Tôi thích một lớp lót thay vì tập lệnh nhưng, nếu tập lệnh là giải pháp duy nhất, điều đó cũng tốt.

Cập nhật

Thay thế các phiên bản py2 trước đó bằng phiên bản này:

python3 -c "import crypt;print(crypt.crypt(input('clear-text pw: '), crypt.mksalt(crypt.METHOD_SHA512)))"

4
SHA và MD5 không được mã hóa. Chúng là các thuật toán băm. Sự khác biệt quan trọng là dữ liệu băm không thể phục hồi được. Bạn cần làm gì?
SmallClanger

Cảm ơn bạn. Sửa đổi câu hỏi. man 5 shadowgọi nó là "mật khẩu được mã hóa" vì vậy tôi đã sử dụng thuật ngữ đó.
Belmin Fernandez

2
Xin lỗi nếu đó là một chút ngớ ngẩn. Bạn đang cố gắng tự tạo băm mật khẩu tương thích bóng? Nếu vậy, hãy xem /etc/shadownội dung của bạn . Bạn sẽ thấy $x$salt$hash. xbiểu thị thuật toán được sử dụng bởi crypt, với tính 6điển hình trên các linux hiện đại, đó là sha512 (xem man 3 crypt). Một trong những câu trả lời dưới đây sẽ tạo ra cùng một hàm băm, miễn là bạn cho nó cùng một loại muối.
SmallClanger

2
Ồ không, không hề ngớ ngẩn chút nào. Bạn đã làm rõ một cái gì đó tôi đã nhầm lẫn vì vậy tôi rất biết ơn thưa ông!
Belmin Fernandez

1
Cảm ơn bạn! Ứng dụng dựa trên passlib là ứng dụng duy nhất tôi có thể thực hiện trên OS X.
Stig Brautaset

Câu trả lời:


65

Đây là một lót:

python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'

Python 3.3+ bao gồm mksalttrong mật mã , giúp sử dụng dễ dàng hơn (và an toàn hơn):

python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'

Nếu bạn không cung cấp một cuộc tranh cãi đến crypt.mksalt(nó có thể chấp nhận crypt.METHOD_CRYPT, ...MD5, SHA256, và SHA512), nó sẽ sử dụng có sẵn mạnh nhất.

ID của hàm băm (số sau số đầu tiên $) có liên quan đến phương thức được sử dụng:

  • 1 -> MD5
  • 2a -> Blowfish (không phải trong dòng chính glibc; được thêm vào trong một số bản phân phối Linux)
  • 5 -> SHA-256 (kể từ glibc 2.7)
  • 6 -> SHA-512 (kể từ glibc 2.7)

Tôi khuyên bạn nên tìm kiếm muối là gì và như vậy và theo từng chú thích nhỏ nhận xét sự khác biệt giữa mã hóa và băm.

Cập nhật 1: Chuỗi được sản xuất phù hợp với các kịch bản bắt đầu và bóng. Cập nhật 2: Cảnh báo. Nếu bạn đang sử dụng máy Mac, hãy xem nhận xét về việc sử dụng tính năng này trong python trên máy Mac, nơi nó dường như không hoạt động như mong đợi.


5
Thay thế random_saltbằng một muối ngẫu nhiên thực tế.
Belmin Fernandez

6
Tôi không thể làm việc này ở Yosemite. Đây là những gì nó nói ra: $6asQOJRqB1i2- điều đó dường như không đủ dài để chính xác!
Stig Brautaset

3
Hãy để mô-đun mật mã tạo ra muối cho bạn: python -c 'import crypt; print crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512))'
rrauenza

2
glibc theo mặc định chỉ sử dụng 5000 vòng , khá yếu trong những ngày này. Bạn có thể chỉ định số lượng vòng bằng cách thêm "$ rounds = ###", chẳng hạn : crypt.crypt("test", "$6$rounds=200000$random_salt"). 200000 mất khoảng 100ms trên máy tính xách tay hiện tại của tôi.
srparish

2
Điều này không nên được sử dụng, ít nhất là trên máy Mac. Trên máy Mac (10.13.5), điều này trả về cùng một kết quả không chính xác mỗi lần.
oskarpearson

37

Trên Debian, bạn có thể sử dụng mkpasswd để tạo mật khẩu với các thuật toán băm khác nhau phù hợp với / etc / bóng. Nó được bao gồm trong gói whois (theo apt-file)

mkpasswd -m sha-512
mkpasswd -m md5

để có được một danh sách các loại băm có sẵn:

mkpasswd -m help 

HTH


3
Gói gì cung cấp cho nó? Có một mkpasswdchương trình (một phần của sự mong đợi) theo Fedora, nhưng nó vô dụng cho mục đích này.
Cristian Ciupitu

Như anh ấy đã nói, phiên bản mkpasswdanh ấy đang nói là dành cho Debian / Ubuntu. Các mkpasswdtrên Fedora (ít nhất lên đến 14) thiếu -mcông tắc.
slm

3
Thật kỳ lạ, đó là gói whois, di sản từ Debian. Xem dpkg -S /usr/bin/mkpasswdtôi không thể tin vào chính mình: D
Rbjz

Để kiểm tra mật khẩu, nếu chữ số đầu tiên là 6, hãy sử dụng phần giữa đô la thứ hai và thứ ba làm muối. Ví dụ cho root:$6$AbCdE$xyz:...bạn nên sử dụng : mkpasswd -m sha-512 -S AbCdE. Với mật khẩu chính xác, bạn sẽ nhận được cùng một hàm băm.
Luc

24

Câu trả lời hay nhất: grub-crypt

Usage: grub-crypt [OPTION]...
Encrypt a password.

-h, --helpPrint this message and exit
-v, --version           Print the version information and exit
--md5                   Use MD5 to encrypt the password
--sha-256               Use SHA-256 to encrypt the password
**--sha-512             Use SHA-512 to encrypt the password (default)**

1
Giải pháp đơn giản .. đã làm việc cho tôi trên CentOS 6.
Banjer

4
Trên các hệ thống có grub-cryptlệnh, đây thực sự là cách dễ dàng và thuận tiện nhất để thực hiện. Không có ý nghĩa chơi xung quanh với muối bằng tay khi bạn có thể vặn nó lên. Vấn đề là ngày càng có nhiều hệ thống hiện đại có GRUB2 và do đó sẽ không bao gồm lệnh này.
rsaw

11

Đây là một mã C ngắn để tạo mật khẩu SHA-512 trên các hệ điều hành Unix khác nhau.

Tập tin: passwd-sha512.c

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
  if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
    printf("usage: %s password salt\n", argv[0]);
    printf("--salt must not larger than 16 characters\n");
    return;
  }

  char salt[21];
  sprintf(salt, "$6$%s$", argv[2]);

  printf("%s\n", crypt((char*) argv[1], (char*) salt));
  return;
}

để biên dịch:

/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c

sử dụng:

passwd-sha512 <password> <salt (16 chars max)>

Câu hỏi này đã 3 tuổi ...
Grumpy

Nhận xét này không phải là cũ. Ứng dụng dễ thương mà bạn có ở đó, đó chỉ là câu trả lời ở đó 1up ngay cả khi nó trông giống như ví dụ trang nam :)
Sampo Sarrala

4

Giải pháp Perl one-liner để tạo mật khẩu băm SHA-512:

perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'

Đã làm việc trên RHEL 6


2

Tại sao không thực hiện kiểm tra và sửa đổi sau đây cho các máy Centos / RHEL để đảm bảo rằng tất cả băm mật khẩu cho / etc / bóng được thực hiện với sha512. Sau đó, bạn có thể đặt passworkd bình thường bằng lệnh passwd

#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi

2

Dưới đây là một lớp lót sử dụng các lệnh shell để tạo mật khẩu băm SHA-512 với một muối ngẫu nhiên:

[root @ host] mkpasswd -m sha-512 MyPAsSwOrD $ (openssl rand -base64 16 | tr -d '+ =' | head -c 16)

Ghi chú

  1. Bạn có thể cần cài đặt gói "whois" (Debian, SuSE, v.v.), cung cấp "mkpasswd".
  2. Xem mật mã (3) để biết chi tiết về định dạng của các dòng trong "/ etc / bóng".

Thật không may, whoisgói từ Fedora 18 không cung cấp bất kỳ mkpasswd.
Cristian Ciupitu

1
Trong Arch Linux: / usr / bin / mkpasswd được sở hữu theo kỳ vọng 5.45-3
Nowaker

Tương tự trên Fedora 20 và nó làm một cái gì đó khác.
Cristian Ciupitu

2
Thật không may, lệnh được đề xuất có hai vấn đề: 1) Mật khẩu được cung cấp hiện được lưu trữ trong lịch sử của trình bao của bạn và hiển thị cho bất kỳ ai có lệnh 'history' hoặc tương tự. 2) Bạn không cần cung cấp muối ngẫu nhiên trên dòng lệnh - và tôi nghĩ bạn nên để mkpasswd làm điều đó cho bạn thay vì sử dụng các thủ thuật openssl thú vị. . )
oskarpearson

2

Đọc bình luận dưới đây để tìm hiểu về ý nghĩa bảo mật của câu trả lời này

Đối với những người có suy nghĩ về Ruby ở đây là một lớp lót:

'password'.crypt('$6$' + rand(36 ** 8).to_s(36))

1
Điều này không chính xác: Chức năng rand của Ruby không an toàn - nó sử dụng PRNG, do đó, điều này sẽ tạo ra kết quả có thể được thiết kế ngược dựa trên dự đoán về thời gian / trạng thái của thời điểm bạn chạy nó.
oskarpearson

1

Kịch bản này hoạt động với tôi trên Ubuntu 12.04 LTS: https://gist.github.com/JensRantil/ac691a4854a4f6cb4bd9

#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512

Nó có các tính năng sau đây mà một số lựa chọn thay thế khác thiếu:

  • Nó tạo ra muối của nó một cách an toàn. Không ai nên dựa vào việc này bằng tay. Không bao giờ.
  • nó không lưu trữ bất cứ thứ gì trong lịch sử vỏ.
  • để rõ ràng, nó in mật khẩu của người dùng mà nó tạo ra có thể tốt khi tạo mật khẩu của nhiều người dùng.

2
Lưu ý điều này sẽ chỉ hoạt động nếu bạn có chpasswdtrên hệ thống của bạn.
Matt Sanders

FYI: chpasswd không hỗ trợ -S trong bóng tối-4.1.5.1
Saustrup

0

Các thuật toán HASH là để sản xuất các bản tin MESSAGE, chúng không bao giờ phù hợp với mật khẩu, nên sử dụng một số loại HKDF ( http://tools.ietf.org/rfc/rfc5869.txt ) - xem PBKDF2 hoặc BCrypt


Điểm tốt, nhưng man cryptcho tôi biết PBKDF2 không được hỗ trợ.
Huygens

0
#!/usr/bin/env python

import getpass

from passlib.hash import sha512_crypt

if __name__ == "__main__":
    passwd = getpass.getpass('Password to hash: ')
    hash = sha512_crypt.encrypt(passwd)

    print hash

Bạn có thể sao chép nó từ repo github của tôi nếu bạn muốn: https://github.com/antoncohen/mksha


0

Nó không phải là một lớp lót, nhưng nó có thể giúp ai đó:

import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
    randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)

randomkhông an toàn về mặt mật mã, os.urandomnên được sử dụng. 8 ký tự trong từ điển dài 56 ký tự là quá ít. Liên kết một vết chích nhiều lần trong trăn cũng là hình thức xấu (nó có độ phức tạp O (n ^ 2))
Hubert Kario

0
$ htpasswd -c /tmp/my_hash user1
New password: 
Re-type new password: 
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30

Rõ ràng, bạn chỉ cần lấy trường thứ 2 và có thể xóa tệp sau khi bạn thêm nó vào bóng hoặc để sử dụng với sudo (vẫn có khả năng là bóng tối nhất).


0

Hãy xem trang man về mật mã (3) và tôi nghĩ rằng bạn sẽ thấy rằng công cụ mật mã đã được cập nhật để sử dụng glibc và sha256 ($ 5) và sha512 ($ 6), nhiều vòng, muối lớn hơn nhiều, v.v. .

Rõ ràng SHA512 có liên quan đến cách / etc / bóng hoạt động.

Điều đó nói rằng, trang web này rất hữu ích - đặc biệt là MKPASSWD, vì điều này đã giải quyết vấn đề CỦA TÔI.

Với mật khẩu có khả năng bị "mất", tôi có thể sử dụng MKPASSWD và muối, để tạo hàm băm SHA512 và xác nhận / từ chối danh sách mật khẩu ứng cử viên.

Tôi sẽ sử dụng John the ripper - nhưng ít nhất là trên phần cứng của tôi (Raspberry Pi) và ngân sách của tôi (không có gì) - John không thể làm điều đó (dường như không hỗ trợ công cụ mã hóa / glibc tiên tiến trong phiên bản miễn phí của raspbian.

Nhắc bạn, vì tôi có đủ quyền để đọc / viết / etc / bóng tối, tôi COULD chỉ cần ghi đè lên hàm băm và tiếp tục cuộc sống ... đây là một bài tập học thuật.


GHI CHÚ Ghi chú Glibc Phiên bản glibc2 của chức năng này hỗ trợ các thuật toán mã hóa bổ sung.

   If salt is a  character  string  starting  with  the  characters
   "$id$" followed by a string terminated by "$":

          $id$salt$encrypted

   then instead of using the DES machine, id identifies the encryp‐
   tion method used and this then determines how the  rest  of  the
   password  string is interpreted.  The following values of id are
   supported:

          ID  | Method
          ─────────────────────────────────────────────────────────
          1   | MD5
          2a  | Blowfish (not in mainline glibc; added in some
              | Linux distributions)
          5   | SHA-256 (since glibc 2.7)
          6   | SHA-512 (since glibc 2.7)

   So  $5$salt$encrypted  is  an  SHA-256  encoded   password   and
   $6$salt$encrypted is an SHA-512 encoded one.

0

Nếu bạn cần một giải pháp thay thế cho một lớp lót được viết bằng perl / python, mkpasswd là một kết hợp tốt. Mặc dù nó được bao gồm trong gói whois Debian, nhưng nó bị thiếu trên các hệ thống CentOS / RHEL. Tôi đã sửa đổi phiên bản Debian của mkpasswd và bao gồm cơ chế tạo muối mạnh hơn dựa trên OpenSSL. Nhị phân kết quả bảo toàn hoàn toàn tất cả các tham số dòng lệnh phiên bản của Debian. Mã này có sẵn trên github và sẽ biên dịch trên bất kỳ hương vị Linux nào: mkpasswd


-4

Tôi không chắc SHA-512 có liên quan như thế nào /etc/shadow. Những mật khẩu này là crypted.

Nhưng nếu bạn muốn mật khẩu được băm bằng SHA-512, bạn có thể thực hiện việc này bằng cách echo -n the_password | sha512sum. Bạn không thể sử dụng đầu ra cho / etc / bóng.


2
echo -n the_passwordvì vậy bạn không băm dòng mới. </
pedant

Mật khẩu shadowkhông mã hóa () ed nữa kể từ nhiều năm. Các hệ thống hiện đại sử dụng ít nhất md5.
Alexander Janssen

6
Trên thực tế mật khẩu shadowvẫn còn crypt()ed nhưng chức năng đã được cập nhật để hỗ trợ một số thuật toán khác nhau. Bất kể, phương pháp được mô tả trong câu trả lời này không tạo ra hàm băm phù hợp cho /etc/shadow. Thuật toán phức tạp hơn một vòng băm SHA-512.
chụp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.