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?
Trả lời
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_SHA256
và CRYPT_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.
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
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
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
- 1. Làm cách nào để tìm hiểu thuật toán của Tarjan?
- 2. Cách tìm hiểu thuật toán [mã hóa] nào được JVM của tôi hỗ trợ?
- 3. crypt (3) $ 6 $ thuật toán băm mật khẩu (dựa trên SHA-512) trong Java?
- 4. Hashing Thuật toán, sử dụng của nó?
- 5. Thuật toán để hiểu nghĩa
- 6. Binary GCD Thuật toán so với Euclid của thuật toán trên máy tính hiện đại
- 7. SQL sử dụng thuật toán nào?
- 8. Thuật toán nào git sử dụng để phát hiện các thay đổi trên cây làm việc của bạn?
- 9. Python: sử dụng thuật toán đệ quy làm máy phát
- 10. Thuật toán sắp xếp của Ruby sử dụng thuật toán nào?
- 11. Hiểu thuật toán lựa chọn trung bình?
- 12. Thuật toán của Lucene
- 13. Tìm hiểu toán tử "is" của Python
- 14. Tôi làm cách nào để tìm hiểu các thuật toán cho các cuộc thi lập trình?
- 15. Cách thay thế cho crypt()
- 16. Thuật toán nào sử dụng table.sort?
- 17. Hiểu thuật toán của Ukkonen cho hậu tố cây
- 18. Thuật toán chuỗi tìm kiếm
- 19. Thuật toán máy phát Sudoku
- 20. Hiểu thuật toán hàm rand() của Visual C++
- 21. Hiểu "trung bình của trung vị" thuật toán
- 22. Hiểu thay đổi thuật toán làm
- 23. Hiểu thuật toán Mapreduce để tính toán chồng chéo
- 24. Cách tìm hiểu agda
- 25. Hiểu thuật toán tìm kiếm chuỗi Boyer-Moore của "Good Suffix Shift" -Table
- 26. Thuật toán nào đang sử dụng trong ZIP chuẩn?
- 27. Tìm hiểu JVM Eclipse đang chạy trên
- 28. Thuật toán cụm từ thông dụng nào sử dụng PHP?
- 29. Có cách nào để biết thuật toán GC nào JVM hiện đang sử dụng
- 30. Tìm kiếm thuật toán khóa cấp phép
bạn đang sử dụng định dạng muối nào? – CodesInChaos
Cung cấp muối nếu đó là những gì bạn đang yêu cầu. – Andy
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