Lưu trữ an toàn Python
Khi lưu trữ mật khẩu, một trong những rủi ro lớn nhất là ai đó có thể đánh cắp cơ sở dữ liệu và có thể giải mã chúng. Để tránh điều này, bạn phải luôn băm mật khẩu trước khi lưu trữ chúng Show
Trong bài viết này, tôi sẽ chỉ cho bạn cách làm điều này trong Python bằng thư viện bcrypt Đang cài đặt bcryptTrước hết, chúng ta cần cài đặt bcrypt bằng pip pip install bcrypt Đó là một thông lệ tốt (mặc dù không bắt buộc) để tạo một môi trường ảo mới cho dự án này. Nếu bạn muốn tìm hiểu thêm về điều này, hãy xem bài viết sau Cách tạo và quản lý môi trường ảo trong PythonTạo môi trường ảo cho Python trong Windows (và Unix)con trăn. tiếng Anh đơn giản. io Băm mật khẩu là gì?Trước hết, điều quan trọng là phải biết lý thuyết đằng sau hàm băm Hàm băm là một hàm lấy một chuỗi byte và "biến đổi" nó thành một chuỗi byte khác, từ đó không thể xác định được chuỗi ban đầu. Hơn nữa, không có hai đầu vào khác nhau cho cùng một đầu ra Điều này có nghĩa là nếu chúng tôi lưu trữ mật khẩu đã băm, ngay cả khi ai đó đánh cắp cơ sở dữ liệu, họ sẽ không thể xác định được mật khẩu văn bản thuần túy là gì Bây giờ, giả sử rằng người dùng đã đăng ký bằng mật khẩu class PasswordDatabase: 6. Sau đó để thực hiện đăng nhập, chúng ta cần kiểm tra xem mật khẩu do người dùng viết có giống với mật khẩu được lưu trữ hay khôngĐể làm như vậy, chúng ta chỉ cần băm mật khẩu được sử dụng để đăng nhập, sau đó kiểm tra xem hàm băm này có tương ứng với mật khẩu được lưu trữ hay không. Vì theo định nghĩa của hàm băm, không có hai đầu vào khác nhau cho cùng một đầu ra, hai giá trị băm sẽ chỉ bằng nhau nếu mật khẩu do người dùng viết giống với mật khẩu được sử dụng trong quá trình đăng ký Điểm yếu duy nhất là nếu mật khẩu ngắn, kẻ tấn công có thể cố gắng băm tất cả các mật khẩu có thể cho đến khi tìm được mật khẩu chính xác. Tuy nhiên, điều này khó xảy ra nếu mật khẩu đủ dài vì có quá nhiều tổ hợp. Nhưng làm thế nào để đảm bảo rằng mật khẩu dài? Thông thường, trước khi băm mật khẩu, chúng tôi sẽ thêm muối, tôi. e. một chuỗi ký tự ngẫu nhiên. Bằng cách này, chúng tôi biết rằng ngay cả khi người dùng sử dụng mật khẩu ngắn thì mật khẩu đó vẫn được bảo mật Tạo cơ sở dữ liệu mật khẩuBây giờ chúng ta đã thấy ý tưởng đằng sau hàm băm, hãy xem cách nó hoạt động trong Python. Chúng tôi sẽ tạo một lớp class PasswordDatabase: 0 , lớp này sẽ triển khai phương thức class PasswordDatabase: 1 để thêm người dùng mới và class PasswordDatabase: 2 trả về true nếu người dùng class PasswordDatabase: 3 được đăng ký bằng mật khẩu class PasswordDatabase: 4Trước hết, chúng ta nên tạo phương thức class PasswordDatabase: 5class PasswordDatabase: Đây class PasswordDatabase: 6 là từ điển lưu trữ tên người dùng và mật khẩu. tên người dùng được sử dụng làm khóa của từ điểnĐăng ký người dùng mớiBây giờ hãy tạo chức năng để đăng ký người dùng mới. Nó sẽ
Bước đầu tiên rất dễ thực hiện. chúng ta chỉ cần kiểm tra xem tên người dùng đã có trong từ điển chưa class PasswordDatabase: 1Bây giờ chúng ta cần băm mật khẩu. Đây là nơi bcrypt đến để giúp chúng tôi Trước hết, chúng ta cần nhập nó class PasswordDatabase: 2Bây giờ chúng ta có thể tạo một phương thức class PasswordDatabase: 9class PasswordDatabase: 4Dòng đầu tiên là chuyển đổi mật khẩu (là một chuỗi) thành một chuỗi byte. Trên thực tế, các hàm bcrypt sẽ hoạt động trên các chuỗi byte, không phải trên các chuỗi Sau đó, chúng tôi tạo muối cho mật khẩu bằng cách sử dụng class PasswordDatabase: 10. Cuối cùng, chúng ta có thể tạo hàm băm từ byte mật khẩu và muối và trả lạiHãy quay lại hàm class PasswordDatabase: 11. Ở đây chúng ta cần gọi phương thức class PasswordDatabase: 9 mà chúng ta vừa tạo, sau đó lưu tên người dùng và hàm băm vào từ điển. Hàm trả về True vì một người dùng mới đã được lưu thành côngclass PasswordDatabase: 8Đăng nhập người dùngMột phương thức khác mà lớp class PasswordDatabase: 13 cần là phương thức để thực hiện đăng nhập. Thao tác này sẽ lấy tên người dùng và mật khẩu làm đầu vào, sau đó kiểm tra xem người dùng có tên người dùng và mật khẩu đã cho đã được đăng ký chưaclass PasswordDatabase: 0Trước hết, chúng ta cần trả về false nếu tên người dùng không có trong cơ sở dữ liệu Sau đó, chúng ta có thể kiểm tra xem mật khẩu được cung cấp làm đầu vào có tương ứng với hàm băm được lưu trong cơ sở dữ liệu không. Như trước đây, chúng ta cần chuyển đổi chuỗi mật khẩu thành byte bằng cách sử dụng hàm class PasswordDatabase: 14. Sau đó, chúng ta có thể gọi hàm class PasswordDatabase: 15. Điều này lấy làm đối số mật khẩu (tính bằng byte) và hàm băm. Sau đó, nó trả về true khi và chỉ khi mật khẩu đúngKiểm tra mãĐây là mã hoàn chỉnh của class PasswordDatabase: 0 của chúng tôiclass PasswordDatabase: 4Chúng ta có thể kiểm tra nó với các dòng mã sau class PasswordDatabase: 5Nếu mọi thứ hoạt động chính xác, chức năng đăng ký cuối cùng sẽ trả về false, vì đã tồn tại người dùng có tên “john” Sau đó, khi đăng nhập người dùng, chỉ cuộc gọi cuối cùng mới trả về true. nó là cái duy nhất có cả tên người dùng và mật khẩu đều đúng Phần kết luậnCảm ơn bạn đã đọc đến cuối. Nếu bạn muốn tìm hiểu thêm về thư viện bcrypt, đây là một số liên kết hữu ích mã hóa Pythonsửa đổi lần cuối ngày 29 tháng 11 năm 2021 Hướng dẫn bcrypt Python chỉ ra cách băm mật khẩu trong Python bằng thư viện bcrypt…mã số. com Băm mật khẩu trong Python. Hướng dẫn Bcrypt với các ví dụ. HackerBuổi trưaXây dựng một máy chủ từ đầu hoặc sử dụng một khung nhẹ đang trao quyền. Cùng với quyền lực đó là trách nhiệm…hackernoon. com Thêm nội dung bằng tiếng Anh. io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Nhận quyền truy cập độc quyền để viết các cơ hội và lời khuyên trong cộng đồng của chúng tôi Discord |