Bạn không bao giờ được giữ mật khẩu ở dạng văn bản rõ ràng trong khi xác nhận người dùng hoặc làm điều gì đó tương tự.
Vì nhiều cá nhân sử dụng cùng một mật khẩu, nếu kẻ tấn công phát hiện ra cơ sở dữ liệu gồm các mật khẩu chưa được mã hóa, chúng có thể dễ dàng được sử dụng kết hợp với các email trùng khớp để truy cập vào trang web hoặc tài khoản được liên kết và thậm chí được sử dụng để cố gắng truy cập các tài khoản khác.
Mật khẩu ngày nay thường được băm khi cung cấp mật khẩu. Bạn nên băm với muối và giữ muối cùng với mật khẩu đã băm.
Salting có thể giống như một trong những bước trong công thức tạo màu nâu băm, nhưng trong mật mã, nó đề cập đến việc thêm dữ liệu ngẫu nhiên vào đầu vào của hàm băm để đảm bảo rằng hàm băm sẽ luôn cung cấp một kết quả duy nhất ngay cả khi các đầu vào giống hệt nhau.
Do đó, hàm băm đặc biệt được tạo ra bằng cách thêm muối có thể bảo vệ chúng ta khỏi một số phương pháp tấn công, bao gồm cả các cuộc tấn công bảng băm, đồng thời ngăn chặn từ điển và các nỗ lực ngoại tuyến brute-force.
Ở đây, với sự hỗ trợ của các đoạn mã, chúng tôi sẽ trình bày cách sử dụng 'bcrypt' để bảo mật mật khẩu của bạn.
Vậy, 'bcrypt' là gì?
Bcrypt là một thư viện băm hỗ trợ một số ngôn ngữ và cung cấp mã hóa mật khẩu đặc biệt. Để tăng tính bảo mật cho mật khẩu của bạn, nó sẽ tự động tạo thêm các ký tự ngẫu nhiên (muối) khi mã hóa chuỗi của bạn.
Bạn cũng có thể chọn xác định số lượng ký tự bổ sung mà bạn muốn thêm vào một chuỗi đến.
Thư viện bcrypt chỉ đọc mã byte, không đọc các chuỗi thô. Do đó, trước khi gửi một chuỗi mật khẩu đến bcrypt để mã hóa, trước tiên bạn phải mã hóa nó.
Mã hóa và mã hóa không giống nhau. Nó chỉ đảm bảo rằng một chuỗi có thể đọc được bằng máy trước khi bị kỹ thuật mã hóa che đậy.
Sử dụng bcrypt để mã hóa mật khẩu bằng Python
Python làm cho việc mã hóa mật khẩu bcrypt trở nên đơn giản. Chúng tôi sẽ tập trung vào việc này mà không cần sự hỗ trợ của khuôn khổ. Nhưng đừng lo lắng, nếu bạn hiểu cách lưu đầu vào của người dùng và đọc chúng từ cơ sở dữ liệu, thì quy trình này cũng giống như trong các khuôn khổ.
của DINTEK
Bạn chỉ cần thiết lập một môi trường ảo Python và sau đó sử dụng một IDE như PyCharm. Thư viện sau đó phải được cài đặt trước:
Mã hóa mật khẩu
Hãy xem cách sử dụng bcrypt để mã hóa một văn bản sau khi nó đã được cài đặt:
Mã Python nói trên thực thi và xuất ra một chuỗi byte được mã hóa. Nhưng mỗi khi bạn chạy script, kết quả lại khác. Bcrypt sử dụng phương pháp này để đảm bảo mọi người dùng đều có mật khẩu được mã hóa cụ thể.
Điều đó, tình cờ, là để mã hóa mật khẩu.
So sánh và xác nhận mật khẩu bằng Bcrypt
Điều gì xảy ra nếu bạn muốn lưu mật khẩu đã băm và kiểm tra sau để xem liệu nó có khớp với mật khẩu mà người dùng đã gửi để xác thực hay không?
Đơn giản vậy thôi. Chỉ mật khẩu xác thực phải được so sánh với mục nhập của cơ sở dữ liệu (hoặc trong bộ nhớ trong trường hợp này).
Mật khẩu xác thực cũng phải được mã hóa trước khi được so sánh với mật khẩu trong cơ sở dữ liệu vì bcrypt chỉ có thể đọc các chuỗi byte. Về cơ bản, bạn sẽ so sánh đầu vào xác thực được mã hóa với mật khẩu băm được mã hóa mà bạn hiện có trong cơ sở dữ liệu của mình.
Hãy kiểm tra điều này bằng cách sử dụng đầu vào Python hư cấu:
Khi chạy mã nói trên, bạn sẽ được nhắc nhập mật khẩu mới. Điều này được lưu trong bộ nhớ bởi Python. Trong phần xác thực, bạn sẽ nhập cùng một mật khẩu, mật khẩu này dành riêng cho bạn.
Nếu mật khẩu được so sánh và mật khẩu đã được mã hóa và lưu trước đó trùng khớp, Python sẽ phát ra một thông báo thành công.
Nếu không, thông báo lỗi được in ra và sau đó câu khác được thêm vào.
Ý tưởng cơ bản giống với việc đăng ký và sau đó cung cấp mật khẩu cho cơ sở dữ liệu để xác thực.
Kết luận
Ngay cả khi chúng tôi chỉ sử dụng mật khẩu được mã hóa để hiển thị cách mã hóa các chức năng trong bộ nhớ ngắn Python thuần túy, khả năng ứng dụng thực tế của nó nằm trong các ứng dụng cơ sở người dùng.
Tuy nhiên, bài viết này trình bày các phương pháp thiết yếu để tổ chức mã của bạn để thực hiện điều này, ngay cả trong các trường hợp thực tế.
Ví dụ: nếu bạn đang sử dụng Flask, bạn có thể cung cấp các trường đăng ký và xác thực thông qua các biểu mẫu web riêng biệt thay vì đầu vào.
Tất nhiên, trong khi so sánh mật khẩu, bạn sẽ đọc từ cơ sở dữ liệu có chứa mật khẩu được mã hóa được lưu giữ trong thế giới thực.
Jona Nitsch
Cảm ơn bạn vì lời giải thích đơn giản và đơn giản này,
Điều này đã giúp tôi rất nhiều trong dự án hiện tại của tôi.
Tôi nghĩ thật tốt khi mã ví dụ được giới hạn ở mức tối thiểu và không bị quá tải như nhiều cách giải thích khác.
Trân trọng