Nói chung:
Bạn luôn nên áp dụng muối khi băm mật khẩu, để có một hàm băm khác ngay cả khi bạn có cùng một mật khẩu. Điều này làm tăng bảo mật bằng cách "ngăn chặn" mọi người sử dụng bảng cầu vồng để bẻ khóa mật khẩu.
Nhưng bcrypt tự xử lý muối!
Quay lại câu hỏi ban đầu của bạn:
Chi phí được sử dụng để làm cho nó "tốn kém" để bẻ khóa mật khẩu bằng một cuộc tấn công từ điển/vũ phu.
BCRYPT về cơ bản băm mật khẩu nhiều lần, điều này khiến nó tốn thời gian [= tốn kém] để lấy mật khẩu vào một hàm băm đã cho. Nếu bạn cố gắng tìm mật khẩu cho một hàm băm [tấn công lực lượng vũ phu], bạn phải tính toán hàng tỷ băm mật khẩu. Khi mỗi lần băm mất thời gian "$ chi phí", thì một cuộc tấn công vũ lực là không khả thi. Ngay cả khi bạn có thể tính toán băm cho một mật khẩu tiềm năng tính bằng mili giây.
Nói một cách đơn giản: Nếu bạn có mật khẩu băm cho SHA-1 [không an toàn, không sử dụng nó!] Với muối [vì điều này thường được chứa trong băm] và bạn muốn hack nó sau đó bạn phải băm tất cả Mật khẩu + muối và khi bạn tìm thấy sự kết hợp với cùng một hàm băm, bạn đã tìm thấy một mật khẩu có thể cho băm này.
Giả sử bạn sử dụng muối tốt và mật khẩu đủ dài, sau đó bạn cần một cái gì đó như 1-5 giây cho hàm băm mật khẩu. Nếu bạn sử dụng phương pháp Blowfish với chi phí = 10, bạn cần 10-50 giây cho hàm băm mật khẩu. Đối với một mật khẩu duy nhất, đây không phải là vấn đề lớn. Vì vậy, một cuộc tấn công theo chỉ đạo cho một hàm băm duy nhất vẫn đơn giản, nhưng thường mọi người có được danh sách lớn các kết hợp người dùng và mật khẩu và họ quan tâm để lấy mật khẩu cho tất cả chúng một cách nhanh chóng. Sau đó, điều này ít sinh lợi hơn cho kẻ xấu, vì anh ta cần gấp 10 lần sức mạnh CPU để tính tất cả những thứ đó.
MS1 tại rdrecs dot com ¶
- php dot net tại Marksim dot org ¶
- 2 năm trước
Ẩn danh ¶
hman ¶
Password_hash PHP là gì?
password_hash [] tạo một hàm băm mật khẩu mới bằng thuật toán băm một chiều mạnh mẽ. Các thuật toán sau đây hiện đang được hỗ trợ: password_default - Sử dụng thuật toán BCRYPT [mặc định là Php 5.5. 0]. Lưu ý rằng hằng số này được thiết kế để thay đổi theo thời gian vì các thuật toán mới và mạnh hơn được thêm vào PHP.
- Làm thế nào an toàn là password_hash php?
- Kết quả băm từ password_hash [] là an toàn vì: Nó sử dụng thuật toán băm mạnh mẽ. Nó thêm một muối ngẫu nhiên để ngăn chặn các bảng cầu vồng và các cuộc tấn công từ điển.
- Password_hash có đủ không?
- Password_hash có đủ tốt không? "Vâng, nó đủ an toàn, và vâng, có một cách tốt hơn/an toàn hơn. Kể từ Php 7.2, argon2 là một phần của phương pháp mới được thực hiện [băm] để giành được sự cạnh tranh băm mật khẩu cung cấp phương pháp mạnh mẽ hơn , nếu bạn muốn nâng cấp phiên bản PHP của bạn lên 7.2.
Thuật ngữ nào mà password_verify sử dụng?
- Nó sử dụng thuật toán mặc định để tạo giá trị băm của mật khẩu. Nó sử dụng thuật toán Crypt_blowfish để tạo giá trị băm của mật khẩu.
- Chìa khóa để tạo ra một hàm băm mật mã hữu ích là để thuật toán không thể đảo ngược, nhưng có thể lặp lại một cách nhất quán. Đó là:
- Chỉ được đưa ra đầu ra của
password_hash['rasmuslerdorf']
, bạn không thể lấy lại chuỗi'rasmuslerdorf'
Cho đầu vào 'rasmuslerdorf'
, bạn có thể tạo ra đầu ra giống như cuộc gọi trước đó đến password_hash['rasmuslerdorf']
Mike Robinson ¶
8 năm trước — Creates a password hash
MS1 tại rdrecs dot com ¶
php dot net tại Marksim dot org ¶[string $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
1, string|int|null $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
2, array $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
3 = []]:
string
2 năm trước
- Ẩn danh ¶ - Use the bcrypt algorithm [default as of PHP 5.5.0]. Note that this constant is designed to change over time as new and stronger algorithms are added to PHP. For that reason, the length of the result from using this identifier can change over time. Therefore, it is recommended to store the result in a database column that can expand beyond 60 characters [255 characters would be a good choice].
- hman ¶ - Use the
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
6 algorithm to create the hash. This will produce a standard crypt[] compatible hash using the "$2y$" identifier. The result will always be a 60 character string, or$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
7 on failure. -
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
8 - Sử dụng thuật toán băm argon2i để tạo băm. Thuật toán này chỉ khả dụng nếu PHP đã được biên dịch với hỗ trợ argon2. - Use the Argon2i hashing algorithm to create the hash. This algorithm is only available if PHP has been compiled with Argon2 support. -
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
9 - Sử dụng thuật toán băm argon2id để tạo băm. Thuật toán này chỉ khả dụng nếu PHP đã được biên dịch với hỗ trợ argon2. - Use the Argon2id hashing algorithm to create the hash. This algorithm is only available if PHP has been compiled with Argon2 support.
Các tùy chọn được hỗ trợ cho
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K5:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K5:
Appropriate Cost Found: 10
1 [Chuỗi] - Để cung cấp muối theo cách thủ công để sử dụng khi băm mật khẩu. Lưu ý rằng điều này sẽ ghi đè và ngăn muối được tự động tạo.string] - to manually provide a salt to use when hashing the password. Note that this will override and prevent a salt from being automatically generated.Nếu bị bỏ qua, một loại muối ngẫu nhiên sẽ được tạo bằng password_hash [] cho mỗi mật khẩu băm. Đây là chế độ hoạt động dự định.password_hash[] for each password hashed. This is the intended mode of operation.
Cảnh báo
Tùy chọn muối không được chấp nhận. Bây giờ nó được ưu tiên chỉ sử dụng muối được tạo theo mặc định. Kể từ Php 8.0.0, một loại muối được đưa ra rõ ràng bị bỏ qua.
Appropriate Cost Found: 10
2 [int] - biểu thị chi phí thuật toán nên được sử dụng. Ví dụ về các giá trị này có thể được tìm thấy trên trang Crypt [].int] - which denotes the algorithmic cost that should be used. Examples of these values can be found on the crypt[] page.Nếu bị bỏ qua, giá trị mặc định của
Appropriate Cost Found: 10
3 sẽ được sử dụng. Đây là một chi phí cơ bản tốt, nhưng bạn có thể muốn xem xét tăng nó tùy thuộc vào phần cứng của bạn.
Các tùy chọn được hỗ trợ cho
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K8 và
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K9:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K8 and
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K9:
Appropriate Cost Found: 10
6 [int] - Bộ nhớ tối đa [tính bằng kibibyte] có thể được sử dụng để tính toán băm argon2. Mặc định làAppropriate Cost Found: 10
7.int] - Maximum memory [in kibibytes] that may be used to compute the Argon2 hash. Defaults toAppropriate Cost Found: 10
7.Appropriate Cost Found: 10
8 [int] - Khoảng thời gian tối đa có thể mất để tính toán băm argon2. Mặc định làAppropriate Cost Found: 10
9.int] - Maximum amount of time it may take to compute the Argon2 hash. Defaults toAppropriate Cost Found: 10
9.Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
0 [int] - Số lượng luồng để sử dụng để tính toán băm argon2. Mặc định làArgon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
1.int] - Number of threads to use for computing the Argon2 hash. Defaults toArgon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
1.Cảnh báo
Tùy chọn muối không được chấp nhận. Bây giờ nó được ưu tiên chỉ sử dụng muối được tạo theo mặc định. Kể từ Php 8.0.0, một loại muối được đưa ra rõ ràng bị bỏ qua.
Appropriate Cost Found: 10
2 [int] - biểu thị chi phí thuật toán nên được sử dụng. Ví dụ về các giá trị này có thể được tìm thấy trên trang Crypt [].
Nếu bị bỏ qua, giá trị mặc định của Appropriate Cost Found: 103 sẽ được sử dụng. Đây là một chi phí cơ bản tốt, nhưng bạn có thể muốn xem xét tăng nó tùy thuộc vào phần cứng của bạn.
Các tùy chọn được hỗ trợ cho
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K8 và
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K9:
Appropriate Cost Found: 10
6 [int] - Bộ nhớ tối đa [tính bằng kibibyte] có thể được sử dụng để tính toán băm argon2. Mặc định là Appropriate Cost Found: 10
7.
Appropriate Cost Found: 108 [int] - Khoảng thời gian tối đa có thể mất để tính toán băm argon2. Mặc định là
Appropriate Cost Found: 109.
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K5 as the algorithm, will result in the
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT02 parameter being truncated to a maximum length of 72 bytes.
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT00 [int] - Số lượng luồng để sử dụng để tính toán băm argon2. Mặc định là
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT01.
Chỉ có sẵn khi PHP sử dụng libargon2, không phải với việc thực hiện libsodium.
Thông số
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT02
Mật khẩu của người dùng.
Thận trọng
Sử dụng
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K5 làm thuật toán, sẽ dẫn đến tham số
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT02 bị cắt theo chiều dài tối đa là 72 byte.
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT05password_verify[] function to verify the hash without needing separate storage for the salt or algorithm information.
Một thuật toán mật khẩu hằng số biểu thị thuật toán sẽ sử dụng khi băm mật khẩu.
8.0.0 | Nếu bị bỏ qua, một loại muối ngẫu nhiên sẽ được tạo ra và chi phí mặc định sẽ được sử dụng. no longer returns $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K7 on failure. |
8.0.0 | Trả về giá trị |
7.4.0 | Trả về mật khẩu băm.string now, but still accepts ints for backward compatibility. |
7.4.0 | Thuật toán đã sử dụng, chi phí và muối được trả lại như một phần của băm. Do đó, tất cả thông tin cần thiết để xác minh hàm băm được bao gồm trong đó. Điều này cho phép hàm password_verify [] xác minh băm mà không cần lưu trữ riêng cho thông tin muối hoặc thuật toán. |
7.3.0 | Thay đổi$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K9 was added. |
7.2.0 | Phiên bản$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K8 was added. |
Sự mô tả
password_hash [] không còn trả về $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
7 khi thất bại.password_hash[] example
password_hash['rasmuslerdorf']
2
Tham số
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT05 bây giờ là không thể.
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Tham số Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
5 mong đợi một chuỗi bây giờ, nhưng vẫn chấp nhận INTS để tương thích ngược.password_hash[] example setting cost manually
password_hash['rasmuslerdorf']
3
Tham số
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT05 bây giờ là không thể.
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Tham số Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
5 mong đợi một chuỗi bây giờ, nhưng vẫn chấp nhận INTS để tương thích ngược.password_hash[] example finding a good cost
password_hash['rasmuslerdorf']
4
password_hash['rasmuslerdorf']
5
password_hash['rasmuslerdorf']
6Tham số
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT05 bây giờ là không thể.
Appropriate Cost Found: 10
Tham số Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
5 mong đợi một chuỗi bây giờ, nhưng vẫn chấp nhận INTS để tương thích ngược.password_hash[] example using Argon2i
password_hash['rasmuslerdorf']
7
Tham số
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT05 bây giờ là không thể.
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
Tham số Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
5 mong đợi một chuỗi bây giờ, nhưng vẫn chấp nhận INTS để tương thích ngược.
Appropriate Cost Found: 10
6 [int] - Bộ nhớ tối đa [tính bằng kibibyte] có thể được sử dụng để tính toán băm argon2. Mặc định là Appropriate Cost Found: 10
7.
Appropriate Cost Found: 108 [int] - Khoảng thời gian tối đa có thể mất để tính toán băm argon2. Mặc định là
Appropriate Cost Found: 109.
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT00 [int] - Số lượng luồng để sử dụng để tính toán băm argon2. Mặc định là
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT01.
Chỉ có sẵn khi PHP sử dụng libargon2, không phải với việc thực hiện libsodium.:
Thông số
Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT02: Updates to supported algorithms by this function [or changes to the default one] must follow the following rules:
- Mật khẩu của người dùng.
- Thận trọng
Xem thêm
- password_verify [] - xác minh rằng mật khẩu khớp với băm
- Crypt [] - Chuỗi một chiều băm
- »& Nbsp; triển khai userland
- natri_crypto_pwhash_str [] - Nhận băm được mã hóa ASCII -được mã hóa
PHPNetComment201908 tại Lucb1e Dot Com ¶ ¶
3 năm trước
password_hash['rasmuslerdorf']
9
'rasmuslerdorf'
0
'rasmuslerdorf'
1
'rasmuslerdorf'
2
'rasmuslerdorf'
3
'rasmuslerdorf'
4
'rasmuslerdorf'
5
'rasmuslerdorf'
6
'rasmuslerdorf'
7
'rasmuslerdorf'
8
'rasmuslerdorf'
9
'rasmuslerdorf'
0
'rasmuslerdorf'
1
'rasmuslerdorf'
2Nicoswd ¶ ¶
9 năm trước
'rasmuslerdorf'
3
'rasmuslerdorf'
4
'rasmuslerdorf'
5
'rasmuslerdorf'
6
'rasmuslerdorf'
7
'rasmuslerdorf'
8
'rasmuslerdorf'
2Lyo mi ¶
6 năm trước
password_hash['rasmuslerdorf']
0
password_hash['rasmuslerdorf']
1
password_hash['rasmuslerdorf']
2
password_hash['rasmuslerdorf']
3
password_hash['rasmuslerdorf']
4
'rasmuslerdorf'
2Cloxy ¶ ¶
9 năm trước
password_hash['rasmuslerdorf']
6
password_hash['rasmuslerdorf']
7
password_hash['rasmuslerdorf']
8
password_hash['rasmuslerdorf']
9Lyo mi ¶
9 năm trước
password_hash['rasmuslerdorf']
0
Lyo mi ¶
6 năm trước
password_hash['rasmuslerdorf']
1
password_hash['rasmuslerdorf']
2
'rasmuslerdorf'
2Cloxy ¶ ¶
3 năm trước
password_hash['rasmuslerdorf']
4
password_hash['rasmuslerdorf']
5
password_hash['rasmuslerdorf']
6
password_hash['rasmuslerdorf']
7
password_hash['rasmuslerdorf']
8
password_hash['rasmuslerdorf']
9
password_hash
0
password_hash
1
password_hash
2
password_hash
3
password_hash
4
'rasmuslerdorf'
2Nicoswd ¶ ¶
9 năm trước
password_hash
6
password_hash
7
'rasmuslerdorf'
2Lyo mi ¶
3 năm trước
password_hash
9
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K00
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K01
'rasmuslerdorf'
2Lyo mi ¶
9 năm trước
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K03
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K04
'rasmuslerdorf'
2
Lyo mi ¶
3 năm trước
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K06
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K07
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K08
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K09
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K10
'rasmuslerdorf'
2