2012-06-13 24 views
6

Vì vậy, tôi có một trang web đọc/xác minh (và viết) băm mật khẩu từ cơ sở dữ liệu, và tôi có thứ gì đó làm cho mật khẩu kiểu SHA-512 trông giống như:Tạo kiểu mã băm Sha-512 glibc 2.7 trong Perl

$6$GloHensinmyampOc$AxvlkxxXk36oDOyu8phBzbCfLn8hyWgoYNEuqNS.3dHf4JJrwlYCqha/g6pA7HJ1WwsADjWU4Qz8MfSWM2w6F. 

Trang web dựa trên java, vì vậy tôi đã viết SHA-512. Vấn đề là, có một loạt các công việc perl cron chạy mà cũng cần phải xác minh băm mật khẩu đôi khi vào cơ sở dữ liệu, và kể từ khi chạy trên một hộp Solaris, nó crypt không hỗ trợ định dạng $ 6 $.

Vì vậy, khi tôi làm:

printf("crypt => '%s'\n",crypt("Hello",'$1$CygnieHyitJoconf$')); 

tôi nhận lại một cách hợp lý:

crypt => '$1$CygnieHy$n9MlDleP0qmGCfpbnVYy11' 

Trong khi đó, nếu tôi làm

printf("crypt => '%s'\n",crypt("Hello",'$6$CygnieHyitJoconf$')); 

tôi nhận được một vô ích

crypt => '' 

Có cách nào để lấy các băm mật khẩu SHA-512 trong Perl trên một hộp không sử dụng glibc không? (Đó là những gì tôi đã đươc nghe khi tôi thực hiện tìm kiếm chủ yếu ("sử dụng hầm mộ").

tôi thực sự không thích tái thực hiện SHA-512 băm mật khẩu trong perl.

Cảm ơn!

Trả lời

3

Thật không may là crypt sẽ là hệ thống libc của bạn crypt, chịu trách nhiệm cho việc lựa chọn các thuật toán và các chuỗi tiền tố ánh xạ tới các thuật toán. chúng, và trong trường hợp của libc, tôi không biết bất kỳ reimplementations nào, mật khẩu "SHA-512" của glibc không chỉ đơn giản là SHA-512, nó là một thuật toán tùy chỉnh mà không không tồn tại bên ngoài glibc mà tôi biết. Nếu bạn vẫn có cơ hội, bạn có thể muốn thay đổi thành một thuật toán như bcrypt hoặc PBKDF-SHA-2 có nhiều triển khai bằng các ngôn ngữ khác nhau.

+0

Nó không phải là quá nhiều thuật toán tùy chỉnh vì nó là một thuật toán khác. Đó là sha512crypt. SHA512 được thiết kế là FAST, ngược lại với những gì bạn muốn cho một hàm băm mật khẩu. Nó tuân theo chuẩn crypt (3) cùng với bcrypt, và hỗ trợ độ phức tạp biến (một số biến 'vòng' để làm cho nó mạnh hơn trong tương lai khi 5000 vòng mặc định không đủ nữa). crypt (3) luôn là những gì bạn nên sử dụng cho băm mật khẩu. không có gì khác, bao giờ hết. –

7

Thực ra, tôi nghĩ rằng tôi chỉ tìm thấy câu trả lời của riêng tôi: Crypt::Passwd::XS

Crypt :: Pass :: XS - thực hiện XS Full của hầm mộ chung() thuật toán

Nó unix_md5, apache_md5, unix_des, unix_sha256 và unix_sha512 .. Tôi đoán đó là một chút đáng tiếc rằng nó không làm blowfish. Nhưng, tuy nhiên, nó giải quyết vấn đề của tôi! Cảm ơn @hobbs anyway tho!

use strict; 
use Crypt::Passwd::XS; 

{ 
     printf("crypt => %s\n",Crypt::Passwd::XS::crypt("Hello",'$6$CygnieHyitJoconf$')); 
} 

Bây giờ trả

crypt => $6$CygnieHyitJoconf$vkGJm.nLrFhyWHhNTvOh9fH/k7y6k.8ed.N7TqwT93hPMPfAOUsrRiO3MmQB5xTm1XDCVlW2zwyzU48epp8pY/ 

như mong đợi!

+0

Xin chào, thật tuyệt.Tôi sẽ lưu ý :) – hobbs

+0

Oh, vui vẻ Irony. Một mô-đun có tên "Crypt :: Passwd :: XS" chứa các thuật toán CHỈ mà bạn KHÔNG BAO GIỜ nên sử dụng cho mật khẩu !!! bcrypt hoặc PBKDF * guys, và nếu bạn không hiểu tại sao, bạn nên đọc lên. Đó là tinh tế, nhưng chỉ là sự khác biệt giữa "vô dụng" và "công trình" !! – cnd

+0

Thật sao? Tại sao bạn không nên sử dụng unix_sha512? Nó muối, và cho đến nay như tôi biết nó vẫn chống va chạm ..? – bnsh

Các vấn đề liên quan