2012-04-21 29 views
6

Tôi không chắc chắn thuật toán crypt() nào sử dụng khi băm. Tôi nhìn vào hướng dẫn sử dụng PHP, nhưng nó chỉ nói rằng nó sử dụng bất cứ thứ gì có sẵn. Nhưng làm thế nào để tôi biết cái nào nó sử dụng, và nếu nó sử dụng cái nào, làm thế nào để biết nó sử dụng cái nào? Tôi đang sử dụng MAMP hiện tại là môi trường phát triển của mình, nhưng tôi nghĩ rằng phải có một cách để tìm ra một câu lệnh trong PHP.Cách tìm hiểu thuật toán crypt() nào sử dụng trên máy của bạn?

+0

bạn đang sử dụng định dạng muối nào? – CodesInChaos

+0

Cung cấp muối nếu đó là những gì bạn đang yêu cầu. – Andy

+1

Nếu tôi nhớ chính xác, định dạng của muối xác định thuật toán kiểm tra tài liệu: http://php.net/manual/en/function.crypt.php – CodesInChaos

Trả lời

9

Bạn chỉ định thuật toán như một phần của chuỗi muối. Ví dụ: bắt đầu bằng $2a$ sẽ mang đến cho bạn một con cá bơn Blowfish. Nếu máy không hỗ trợ thuật toán bạn đang cố gắng sử dụng, bạn sẽ không nhận được kết quả có ý nghĩa. Bạn có thể thử tìm hiểu trước thuật toán nào được hỗ trợ bằng cách kiểm tra một số hằng số được xác định trước, chẳng hạn như CRYPT_BLOWFISH, mặc dù tôi đã nhận thấy rằng các hằng số CRYPT_SHA256CRYPT_SHA512 không phải lúc nào cũng được xác định, ít nhất là trên PHP 5.2. Bắt đầu với PHP 5.3, PHP đã thực hiện các thuật toán riêng của mình, do đó, nó không quan trọng những gì hệ thống đã có sẵn tại thời gian biên dịch PHP như nó có trong PHP 5.2 và trước đó. Bản vá Suhosin cho PHP 5.2 được cho là bổ sung ít nhất Blowfish, nhưng việc triển khai nó không có vẻ tương thích với bản cập nhật được sử dụng trong PHP 5.3.

Các PHP docs for the crypt() function làm cung cấp một số thông tin về cách sử dụng chuỗi muối để xác định các thuật toán để sử dụng:

  • CRYPT_STD_DES - Tiêu chuẩn DES dựa trên băm với muối hai nhân vật từ bảng chữ cái"./0-9A-Za-z ". Sử dụng các ký tự không hợp lệ trong muối sẽ khiến crypt() thất bại.
  • CRYPT_EXT_DES - Mở rộng DES dựa trên băm. "Muối" là chuỗi gồm 9 ký tự có dấu gạch dưới , sau đó là 4 byte số lần lặp và 4 byte muối. Đây là được mã hóa dưới dạng ký tự có thể in, 6 bit cho mỗi ký tự, ít nhất là ký tự quan trọng trước tiên. Các giá trị 0 đến 63 được mã hóa là "./0-9A-Za-z". Sử dụng các ký tự không hợp lệ trong muối sẽ khiến crypt() thất bại.
  • CRYPT_MD5 - MD5 băm với muối Mười hai nhân vật bắt đầu với $ 1 $
  • CRYPT_BLOWFISH - băm Blowfish với muối như sau: "$ 2a $", một tham số chi phí hai chữ số, "$", và 22 chữ số từ bảng chữ cái "./0-9A-Za-z". Sử dụng các ký tự bên ngoài phạm vi này trong muối sẽ gây ra crypt() trả về một chuỗi có độ dài bằng không. Hai tham số chi phí của hai tham số là logarit cơ bản của số lặp cho thuật toán băm dựa trên Blowfish cơ bản và phải nằm trong phạm vi từ 04-31, các giá trị ngoài phạm vi này sẽ khiến crypt() thất bại.
  • CRYPT_SHA256 - Hàm băm SHA-256 với một muối mười sáu ký tự có tiền tố với $ 5 $. Nếu chuỗi muối bắt đầu bằng 'rounds = $', giá trị số của N được sử dụng để chỉ ra bao nhiêu lần vòng băm nên được thực thi, giống như tham số chi phí trên Blowfish. Số lượng mặc định của vòng là 5000, tối thiểu là 1000 và tối đa là 999,999,999. Bất kỳ lựa chọn nào của N ngoài phạm vi này sẽ bị cắt bớt đến giới hạn gần nhất.
  • CRYPT_SHA512 - Hàm băm SHA-512 có mười sáu là muối ký tự có tiền tố $ 6 $. Nếu chuỗi muối bắt đầu bằng 'vòng = $', giá trị số của N được sử dụng để cho biết số lượng lần vòng lặp băm nên được thực thi, giống như thông số chi phí trên Blowfish.Số vòng mặc định là 5000, có tối thiểu 1000 và tối đa là 999.999.999. Bất kỳ lựa chọn nào của N ngoài phạm vi này sẽ bị cắt ngắn đến giới hạn gần nhất.

Vì vậy, để xác định rằng bạn muốn chuỗi "mật khẩu" băm sử dụng Blowfish với 2^10 lần lặp lại, bạn có thể sử dụng

crypt('password', '$2a$10$XA86t7EJ0xD9OYEUbnTulT'); 

nơi chuỗi bắt đầu với XA86 là muối.

Cuối cùng, nếu bạn muốn thêm ví dụ hoặc chỉ muốn một cái gì đó để chăm sóc của tất cả các doanh nghiệp tương thích mật khẩu này cho bạn, hãy xem phpass. Đó là phạm vi công cộng và hoạt động độc đáo trong kinh nghiệm của tôi. Nó sẽ tự động sử dụng thuật toán "tốt nhất" trên hệ thống trừ khi bạn chỉ định rằng bạn muốn một băm tương thích với nhiều hệ thống, trong trường hợp này (tôi nghĩ) nó sử dụng MD5.

+0

Yea, đó cũng là vấn đề của tôi. Không có đủ thông tin về điều đó vì một lý do kì lạ nào đó. – Andy

+0

Bạn có thể chỉ cho tôi một ví dụ về cách nó sẽ trông khi sử dụng $ 2a $ ví dụ để cho crypt biết thuật toán để sử dụng? – Andy

+0

Có, tôi sẽ chỉnh sửa chỉ trong giây lát. Tôi không thể cung cấp thêm thông tin cho bạn trước khi tôi đang nhập trên điện thoại của mình trong khi xếp hàng để xem tại cửa hàng. – Andrew

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