Cách tốt nhất để mã hóa và giải mã mật khẩu là sử dụng thư viện chuẩn trong PHP vì phương pháp mã hóa và giải mã mật khẩu đúng cách từ đầu rất phức tạp và liên quan đến nhiều khả năng xảy ra lỗ hổng bảo mật. Sử dụng thư viện chuẩn đảm bảo rằng việc triển khai băm được xác minh và tin cậy
Nội dung chính Hiển thị
- Bạn có thể giải mã mật khẩu băm PHP không?
- Làm cách nào để giải mã dữ liệu được mã hóa trong MySQL?
- Bạn có thể giải mã mật khẩu băm không?
- Chúng tôi có thể giải mã MD5 bằng PHP không?
Ghi chú. Điều này sử dụng API mật khẩu PHP có sẵn trong phiên bản 5. 5. 0 trở lên
Mã hóa mật khẩu. Để tạo hàm băm từ chuỗi, chúng tôi sử dụng hàm password_hash[]
cú pháp
string password_hash[string $password, mixed $algo, [array $options]]
Hàm password_hash[] tạo hàm băm mật khẩu mới của chuỗi bằng một trong các thuật toán băm có sẵn. Nó trả về hàm băm hiện có độ dài 60 ký tự, tuy nhiên, vì các thuật toán mới và mạnh hơn sẽ được thêm vào PHP, nên độ dài của hàm băm có thể tăng lên. Do đó, nên phân bổ 255 ký tự cho cột có thể được sử dụng để lưu trữ hàm băm trong cơ sở dữ liệu
Các thuật toán sau hiện đang được hỗ trợ khi sử dụng chức năng này
- PASSWORD_DEFAULT
- MẬT KHẨU_BCRYPT
- PASSWORD_ARGON2I
- PASSWORD_ARGON2ID
Các tùy chọn bổ sung có thể được chuyển đến chức năng này có thể được sử dụng để đặt chi phí mã hóa, muối được sử dụng trong quá trình băm, v.v. trong mảng $options
Ví dụ dưới đây cho thấy phương pháp sử dụng phương thức password_hash[]
Ví dụ
php
bool password_verify[string $password, string $hash]5
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]7
bool password_verify[string $password, string $hash]8
bool password_verify[string $password, string $hash]9
bool password_verify[string $password, string $hash]0
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]1
bool password_verify[string $password, string $hash]2
bool password_verify[string $password, string $hash]7
bool password_verify[string $password, string $hash]4
bool password_verify[string $password, string $hash]5
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]8
bool password_verify[string $password, string $hash]9
Password Verified!0
bool password_verify[string $password, string $hash]1
bool password_verify[string $password, string $hash]0
Password Verified!3
đầu ra
băm được tạo. $2y$10$7rLSvRVyTQORapkDOqmkhetjF6H9lJHngr4hJMSM2lHObJbW5EQh6
Giải mã mật khẩu. Để giải mã hàm băm mật khẩu và truy xuất chuỗi gốc, chúng tôi sử dụng hàm password_verify[]
cú pháp
bool password_verify[string $password, string $hash]
Hàm password_verify[] xác minh rằng hàm băm đã cho khớp với mật khẩu đã cho, được tạo bởi hàm password_hash[]. Nó trả về true nếu mật khẩu và hàm băm khớp hoặc false nếu ngược lại
php
bool password_verify[string $password, string $hash]5
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]7
bool password_verify[string $password, string $hash]8
bool password_verify[string $password, string $hash]9
bool password_verify[string $password, string $hash]0
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]1
bool password_verify[string $password, string $hash]32
bool password_verify[string $password, string $hash]33
bool password_verify[string $password, string $hash]0
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]36
bool password_verify[string $password, string $hash]37
bool password_verify[string $password, string $hash]7
bool password_verify[string $password, string $hash]39
bool password_verify[string $password, string $hash]1
bool password_verify[string $password, string $hash]51
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]53
bool password_verify[string $password, string $hash]54
bool password_verify[string $password, string $hash]36
bool password_verify[string $password, string $hash]56
bool password_verify[string $password, string $hash]57
bool password_verify[string $password, string $hash]8
bool password_verify[string $password, string $hash]59
bool password_verify[string $password, string $hash]0
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]62____263
bool password_verify[string $password, string $hash]64
bool password_verify[string $password, string $hash]57
bool password_verify[string $password, string $hash]8
bool password_verify[string $password, string $hash]67______30
bool password_verify[string $password, string $hash]6
bool password_verify[string $password, string $hash]62
Password Verified!3
đầu ra
________số 8PHP là ngôn ngữ kịch bản phía máy chủ được thiết kế dành riêng cho phát triển web. Bạn có thể học PHP từ đầu bằng cách làm theo Hướng dẫn PHP và Ví dụ về PHP này
Bạn không mã hóa mật khẩu, bạn băm chúng
Vấn đề là bạn không thực sự cần mật khẩu người dùng, bạn chỉ cần biết rằng họ biết mật khẩu đó
Ví dụ, một cách hoàn toàn khủng khiếp để làm điều đó có thể là một phép tính đơn giản. e. g
nếu mật khẩu người dùng là 'horse123', bạn có thể lưu trữ mật khẩu đó là
bool password_verify[string $password, string $hash]72. Sau đó, bạn chỉ cần đếm các chữ cái trong mật khẩu và nếu đó là
bool password_verify[string $password, string $hash]72, bạn biết nó đúng
Điều đó có nghĩa là bạn không bao giờ cần biết mật khẩu thực
Rõ ràng điều đó thật tồi tệ, vì có rất nhiều mật khẩu có 8 ký tự. Chúng tôi cần thứ gì đó ít 'va chạm' hơn
Thay vào đó, chúng tôi sử dụng hàm băm một chiều. Cách phổ biến nhất để làm điều này là sử dụng hàm băm MD5. [nó không phải là tốt nhất, nhưng nó đơn giản để giải thích]. Để biết cách thực sự làm điều này, hãy xem http. //www. bức tường mở. com/phpass/
Đối với phiên bản ngắn và ngọt ngào
Lấy mật khẩu người dùng và làm điều gì đó như
bool password_verify[string $password, string $hash]3
sau đó, lưu trữ nó trong DB của bạn
Khi họ đăng nhập, bạn thực hiện lại thao tác tương tự và kiểm tra xem hàm băm trong DB của bạn có
Bằng cách này, bạn không bao giờ cần biết mật khẩu thực, mật khẩu có thể dài bao nhiêu tùy thích và nếu cơ sở dữ liệu của bạn bị đánh cắp, các hàm băm sẽ không hữu ích cho bất kỳ ai [vì chúng tôi đã thêm vào văn bản ngẫu nhiên đó]
Vì vậy, bây giờ bạn hiểu rằng, đọc
http. //www. bức tường mở. com/phpass/
và hoàn toàn đọc kỹ các câu lệnh SQL injection và SQL đã chuẩn bị, nếu không thì điều này hơi vô nghĩa
Bạn có thể giải mã mật khẩu băm PHP không?
Giải mã mật khẩu. Để giải mã hàm băm mật khẩu và truy xuất chuỗi gốc, chúng tôi sử dụng hàm password_verify[] . Hàm password_verify[] xác minh rằng hàm băm đã cho khớp với mật khẩu đã cho, được tạo bởi hàm password_hash[].
Làm cách nào để giải mã dữ liệu được mã hóa trong MySQL?
Hàm MySQL AES_DECRYPT trả về chuỗi gốc sau khi giải mã chuỗi được mã hóa. Nó sử dụng thuật toán AES [Advanced Encryption Standard] để thực hiện giải mã. Hàm AES_DECRYPT trả về chuỗi đã giải mã hoặc NULL nếu phát hiện dữ liệu không hợp lệ