Hướng dẫn how do i hash a password using bcrypt in python? - làm cách nào để băm mật khẩu bằng bcrypt trong python?
Giới thiệuLưu trữ mật khẩu một cách an toàn phải là bắt buộc đối với bất kỳ kỹ sư đáng tin cậy nào. Mật khẩu văn bản thuần túy cực kỳ không an toàn - bạn thậm chí không nên xem xét việc lưu trữ chúng một định dạng đơn giản. Đủ để ai đó đạt được các đặc quyền xem trên cơ sở dữ liệu cho toàn bộ cơ sở người dùng bị xâm phạm. Show
Bạn nên luôn luôn cho rằng cơ sở dữ liệu của bạn sẽ bị xâm phạm và thực hiện tất cả các biện pháp phòng ngừa cần thiết để ngăn chặn bất kỳ ai, những người có thể nắm giữ dữ liệu của bạn, khai thác nó theo bất kỳ cách nào có thể. Điều đó đặc biệt đúng đối với cơ sở dữ liệu lưu trữ thông tin đăng nhập của người dùng hoặc dữ liệu nhạy cảm khác.will be compromised and take all necessary precautions to prevent anyone, who could get hold of your data, from exploiting it in any way possible. That is especially true for databases that store users' login credentials or other sensitive data. Ngoài ra - đó là một câu hỏi về hành vi đạo đức. Nếu người dùng đăng nhập cho trang web của bạn - bạn có thể tìm thấy nguyên văn quảng cáo mật khẩu của họ không? Mật khẩu thường được sử dụng trên nhiều trang web, chứa thông tin cá nhân và/hoặc có thể phơi bày một bên của người dùng mà họ không muốn đưa ra công khai. Cả bạn và một diễn viên độc hại đều không thể đọc mật khẩu văn bản đơn giản tại bất kỳ điểm nào. Đây là lý do tại sao các trang web không thể gửi email cho bạn mật khẩu của bạn khi bạn quên nó - họ không biết điều đó. Bạn phải đặt lại nó.you nor a malicious actor should be able to read a plain-text password at any point. This is why websites can't email you your password when you forget it - they don't know it. You have to reset it.
Để ngăn chặn bất kỳ ai khai thác một cách trắng trợn thông tin đăng nhập, bạn nên luôn luôn băm mật khẩu trước khi lưu trữ chúng trong cơ sở dữ liệu. Đó là cách đơn giản nhất, nhưng hiệu quả nhất để ngăn chặn việc sử dụng mật khẩu trái phép được lưu trữ trong cơ sở dữ liệu của bạn. Ngay cả khi ai đó nắm giữ thông tin đăng nhập của người dùng, thông tin đó không thể được sử dụng ở bất kỳ hình dạng hoặc hình thức nào, vì định dạng không thể đọc được đối với con người và khó có thể tính toán tính toán.always hash passwords before storing them in a database. That is the simplest, yet most effective way to prevent the unauthorized use of passwords stored in your database. Even if someone gets a hold of users' login credentials, that information can't be used in any shape or form, since the format is unreadable for humans, and hard to crack computationally.
Mật khẩu băm là gì?Ở dạng cơ bản nhất của nó, băm đề cập đến việc chuyển đổi một chuỗi sang một chuỗi khác (còn được gọi là băm) bằng hàm băm. Bất kể kích thước của chuỗi đầu vào, băm sẽ có kích thước cố định được xác định trước trong chính thuật toán băm. Mục tiêu là băm không trông giống như chuỗi đầu vào và bất kỳ thay đổi nào trong chuỗi đầu vào tạo ra sự thay đổi trong băm. Ngoài ra - các hàm băm đầu vào băm theo kiểu một chiều. Đó không phải là một chuyến đi khứ hồi và một mật khẩu băm không thể không bị ảnh hưởng. Cách duy nhất để kiểm tra xem mật khẩu đầu vào có khớp với cái trong cơ sở dữ liệu hay không là băm mật khẩu đầu vào, sau đó so sánh các băm. Bằng cách này, chúng ta không cần biết mật khẩu thực tế là gì để xác định xem nó có khớp với cái nào trong cơ sở dữ liệu hay không. Lưu ý: Trong hướng dẫn này, chúng tôi sẽ sử dụng thuật ngữ "hàm băm" cho hàm toán học được sử dụng để tính toán băm có kích thước cố định dựa trên chuỗi đầu vào (các hàm băm phổ biến bao gồm SHA256, SHA1, MD5, CRC32, BCRYPT, v.v.) . Một "thuật toán băm" đề cập đến toàn bộ quá trình băm, bao gồm không chỉ một hàm băm được sử dụng mà còn nhiều tham số có thể được thay đổi trong quá trình băm. In this guide, we'll use the term "hashing function" for a mathematical function used to calculate the fixed-size hash based on the input string (popular hashing functions include SHA256, SHA1, MD5, CRC32, BCrypt etc.). A "hashing algorithm" refers to the whole process of hashing, including not only a hashing function used but many more parameters that can be altered during the process of hashing. Mỗi khi bạn đặt một cái gì đó như Điều đó đảm bảo rằng ngay cả các chuỗi đầu vào tương tự cũng tạo ra các băm hoàn toàn khác nhau. Nếu mật khẩu tương tự được tạo ra cùng một băm - bẻ khóa một mật khẩu đơn giản có thể dẫn đến việc tạo bảng tra cứu cho các ký tự khác. Mặt khác, vì cùng một đầu vào luôn mang lại cùng một đầu ra, một băm là khá dễ đoán.
Nếu ai đó biết hàm băm nào đã được sử dụng để băm một mật khẩu nhất định (và không có một danh sách lớn các hàm băm đang sử dụng), chúng có thể bẻ khóa nó bằng cách đoán tất cả các mật khẩu có thể, băm chúng với cùng một hàm băm và so sánh Băm vào băm của mật khẩu mà họ muốn bẻ khóa. Loại tấn công này được gọi là một cuộc tấn công vũ phu và cuộc tấn công được sử dụng để hoạt động rất tốt cho các mật khẩu đơn giản, chẳng hạn như 1, 2, v.v.Cách dễ nhất để ngăn chặn các cuộc tấn công vũ phu là sử dụng hàm băm tương đối chậm để tính toán. Bằng cách đó, cuộc tấn công vũ phu sẽ mất rất nhiều thời gian để tính toán tất cả các băm có thể, đến nỗi nó thậm chí không đáng để cố gắng thực hiện. Ngoài ra, hầu hết các ứng dụng web đều có "thời gian chờ" tích hợp sau khi một số lượng mật khẩu không chính xác nhất định được nhập vào Ai đó có được một bản sao cục bộ của mật khẩu băm. Muối trong mật khẩu là gì?Là mật mã, giá mỗi tính toán và nâng cao công nghệ - chỉ cần chọn một hàm băm thích hợp không đủ để bảo mật mật khẩu được lưu trữ trong cơ sở dữ liệu. Trong một số trường hợp, ngay cả một chức năng băm tuyệt vời cũng không thể ngăn chặn một cuộc tấn công. Do đó, bạn nên thực hiện các biện pháp phòng ngừa bổ sung để làm cho việc bẻ khóa mật khẩu được lưu trữ trở nên khó khăn hơn. Vấn đề với băm là đầu ra (nghĩa là băm) luôn giống nhau cho cùng một đầu vào. Điều đó làm cho băm có thể dự đoán được, do đó dễ bị tổn thương. Bạn có thể giải quyết rằng bằng cách chuyển một chuỗi ngẫu nhiên bổ sung cùng với chuỗi đầu vào khi thực hiện băm. Điều đó sẽ đảm bảo rằng băm không còn tạo ra cùng một đầu ra mỗi khi nó có cùng chuỗi với đầu vào. Chuỗi giả có độ dài cố định đó được truyền bên cạnh chuỗi đầu vào khi thực hiện băm được gọi là muối. Mỗi khi bạn muốn lưu trữ mật khẩu trong cơ sở dữ liệu, một loại muối mới, ngẫu nhiên, sẽ được tạo và truyền cùng với mật khẩu cho hàm băm. Do đó, ngay cả khi hai người dùng có cùng một mật khẩu, bản ghi của nó trong cơ sở dữ liệu sẽ hoàn toàn khác nhau.
Muối được sử dụng để tạo mật khẩu được lưu trữ riêng biệt và được thêm vào bất kỳ đầu vào mới nào được băm và so sánh với băm được lưu trữ trong cơ sở dữ liệu, đảm bảo rằng ngay cả khi bổ sung các yếu tố ngẫu nhiên - người dùng có thể đăng nhập bằng cách sử dụng mật khẩu tương ứng của họ . Quan điểm của muối không phải là làm cho việc tính toán một mật khẩu không khả thi hơn nhiều về mặt tính toán - đó là để ngăn chặn sự tương đồng giữa các chuỗi băm và để ngăn kẻ tấn công bẻ khóa nhiều mật khẩu nếu chúng giống nhau. Thông qua Salting - Các hoạt động cực kỳ tốn kém về mặt tính toán được định vị thành một trường hợp duy nhất và phải lặp lại cho mọi mật khẩu trong cơ sở dữ liệu, ngăn chặn một loạt bảo mật bị hỏng.extremely computationally expensive operations are localized to a single instance and have to be repeated for every password in the database, stopping a cascade of broken security. Rất may - toàn bộ logic này thường được trừu tượng hóa bởi các khung và mô -đun bảo mật mà chúng ta có thể dễ dàng sử dụng trong mã. Bcrypt là gì?BCRYPT là một thuật toán băm mật khẩu, được thiết kế với tất cả các biện pháp phòng ngừa bảo mật mà chúng tôi đã đề cập trong tâm trí. Nó được sử dụng làm thuật toán băm mật khẩu mặc định trong OpenBSD, một hệ điều hành tập trung vào bảo mật nguồn mở và là thuật toán băm được hỗ trợ rộng rãi nhất cho đến nay. BCRYPT được coi là khá an toàn. Hàm băm của nó dựa trên thuật toán cá thổi (mật mã), thực hiện muối và tốc độ tính toán thích nghi. Tốc độ thích ứng đề cập đến khả năng tăng độ phức tạp của giá trị băm tính, trong tương lai bằng chứng cho thuật toán. Nó tiếp tục đủ chậm để ngăn chặn các cuộc tấn công vũ phu bất kể tốc độ tính toán ngày càng tăng của phần cứng.Blowfish (cipher) algorithm, implements salting and adaptive computation speed. Adaptive speed refers to the ability to increase the complexity of calculating hash value, which future proofs the algorithm. It keeps being slow enough to prevent brute-force attacks no matter the increasing computing speed of the hardware. BCRYPT được hỗ trợ và triển khai rộng rãi trong hầu hết các ngôn ngữ chính thống. Có các triển khai có sẵn công khai cho Java, JavaScript, C, C ++, C#, GO, Perl, PHP, v.v. Cách băm mật khẩu bằng python bằng bcryptMô -đun 3 trên PYPI cung cấp một triển khai BCRYPT tuyệt vời mà chúng tôi có thể dễ dàng cài đặt thông qua 4:
Lưu ý: Để đảm bảo rằng tất cả các phụ thuộc cần thiết được cài đặt, tài liệu chính thức khuyên bạn nên chạy các lệnh sau dựa trên hệ điều hành mà bạn chọn. Dành cho Debian và Ubuntu:
Đối với Fedora và Rhel-Derivative:
Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó! Cho Alpine:
Sau khi bạn đã cài đặt BCRYPT bằng 4, bạn có thể nhập nó vào dự án của mình:
Để băm mật khẩu của bạn bằng bcrypt, trước tiên bạn phải chuyển đổi nó thành mảng byte. Để đạt được điều đó, chúng ta có thể sử dụng phương pháp 6 của lớp 7! Nó sẽ mã hóa phiên bản chuỗi của mật khẩu bạn muốn băm vào một mảng byte, được đưa ra một loại mã hóa nhất định và làm cho có thể băm bằng bcrypt.Hãy lấy 8 làm mật khẩu ví dụ để minh họa việc sử dụng bcrypt:
Phương thức 6 lấy một chuỗi trong một số mã hóa (ví dụ: ASCII, UTF-8, v.v.) và chuyển đổi nó thành một mảng byte tương ứng. Đó là mảng byte hình thành của một chuỗi được gọi là chuỗi B.Lưu ý: Trong ví dụ trước, 0 is a string and 1 is a byte-array. But if you print both variables, the only visible difference is that the 1 has 3 as a prefix before its value - 4. Thence the name of that type of byte-array - a b-string.Cuối cùng, bạn có thể băm mật khẩu được mã hóa bằng bcrypt:
Như bạn có thể thấy, phương pháp được sử dụng để băm trong bcrypt là 5. Phải mất hai đối số, biểu diễn chuỗi B của mật khẩu và muối. Rõ ràng, bạn có thể tự tạo một loại muối, nhưng chắc chắn nên sử dụng 6Method thay thế. Đó là một phương pháp bcrypt được tạo ra đặc biệt để tạo muối theo kiểu bảo mật bằng mật mã.Lưu ý: Tốc độ tính toán thích ứng trong BCRYPT đạt được bằng cách đặt một số lần lặp cần thiết để tạo muối. Giá trị đó được thông qua như là đối số của 6method.
The default value is 12, meaning that BCrypt uses 212 (4096) iterations to generate a salt. By increasing the value of that argument, you increase the number of iterations used to generate a salt, and by extension, the time needed to compute the hash.Bây giờ, 8 đang lưu trữ phiên bản băm của mật khẩu 0. 8 sẽ trông hơi giống với:
Không giống với mật khẩu gốc, phải không? Nhưng nếu bạn so sánh 8 với mật khẩu ban đầu bằng phương thức 2 của BCrypt, nó sẽ trả về giá trị 3!Lưu ý: Phương pháp 2 method is designed for validating hashed passwords. It hashes the new input password, adds the salt it automatically tracks, and then compares the results.Chúng ta hãy kiểm tra xem có phải văn bản theo nghĩa đen 5 có phải là mật khẩu hợp lệ cho 8 mới mà chúng ta vừa tạo không:
Các thành phần của đầu ra bcryptNhư chúng ta đã thấy trong ví dụ trước, đầu vào của BCRYPT là mật khẩu (tối đa 72 byte) và muối (với số lần lặp liên quan) và đầu ra là hàm băm 24 byte. Hãy xem xét hình minh họa sau đây để hiểu được cách bcrypt xây dựng băm được sản xuất: Minh họa này cho thấy một băm mật khẩu, 7, do đó, nó minh họa băm từ phần trước.Như chúng ta đã thảo luận trước đây, mỗi lần bạn gọi phương thức 6, nó sẽ tạo ra một mảng byte có kích thước cố định mới (được đại diện bởi một chuỗi B). Trong ví dụ này, phương pháp 6 đã tạo ra đầu ra được đánh dấu là 0 trong hình minh họa. Hãy phân tách phần 0 và giải thích từng tiểu mục riêng lẻ. 0 có ba tiểu mục chia cho dấu hiệu 3:
Sau đó, bcrypt dính vào 0 cùng với giá trị băm là 7 và do đó tạo ra 8 cuối cùng của 7.Lưu ý: Giá trị băm của 7 (or any other password) refers to a radix-64 encoding of the first 23 bytes of the 24-byte hash. It is represented by 31 characters.Sự kết luậnSau khi đọc bài viết này, bạn sẽ có một sự hiểu biết vững chắc về cách sử dụng bcrypt để băm mật khẩu trước khi lưu trữ nó vào cơ sở dữ liệu. Để đặt mọi thứ vào một viễn cảnh, chúng tôi đã giải thích thuật ngữ cơ bản theo nghĩa chung và sau đó minh họa quá trình băm mật khẩu trên ví dụ về bcrypt. Làm thế nào để tôi băm với bcrypt?Cách sử dụng BCrypt để băm và xác minh mật khẩu.. Bước 1: Cài đặt BCRYPT. Sử dụng NPM: NPM Cài đặt BCRYPT. .... Bước 2: Nhập bcrypt. const bcrypt = yêu cầu ("bcrypt"). Bước 3: Tạo muối. Để tạo muối, hãy gọi bcrypt. .... Bước 4: Hé mật khẩu. .... Bước 5: So sánh mật khẩu bằng BCRYPT .. Làm cách nào để mã hóa một bcrypt trong python?Để băm mật khẩu của bạn bằng bcrypt, trước tiên bạn phải chuyển đổi nó thành mảng byte.Để đạt được điều đó, chúng ta có thể sử dụng phương thức mã hóa () của lớp chuỗi!Nó sẽ mã hóa phiên bản chuỗi của mật khẩu bạn muốn băm vào một mảng byte, được đưa ra một loại mã hóa nhất định và làm cho có thể băm bằng bcrypt.use the encode() method of the string class! It will encode the string version of the password you want to hash into a byte array, given a certain encoding type, and make it possible to hash using BCrypt.
Làm thế nào để bạn truyền một mật khẩu được mã hóa trong Python?Steps:.. Nhập thư viện RSA .. Tạo khóa công khai và riêng tư với RSA..... Mã hóa chuỗi thành chuỗi byte .. Sau đó mã hóa chuỗi byte bằng khóa công khai .. Sau đó chuỗi được mã hóa có thể được giải mã bằng khóa riêng .. Khóa công khai chỉ có thể được sử dụng để mã hóa và riêng tư chỉ có thể được sử dụng để giải mã .. Làm thế nào để bạn tạo một hàm băm trong Python?Ví dụ 1: Làm thế nào băm () hoạt động trong Python ?.. # Hash cho số nguyên không thay đổi.in ('băm cho 181 là:', băm (181)). # Hash cho thập phân.in ('băm cho 181,23 là:', băm (181,23)). # băm cho chuỗi.in ('băm cho python là:', băm ('python')). |