Làm cách nào để gỡ mật khẩu trong python?
Hướng dẫn bcrypt Python cho thấy cách băm mật khẩu trong Python bằng thư viện bcrypt. Nó định nghĩa các thuật ngữ cơ bản bao gồm mã hóa, băm và muối Show Mô-đun Python hashed = bcrypt.hashpw(passwd, salt)9 là một thư viện để tạo các giá trị băm mạnh trong Python. Nó được cài đặt với lệnh import bcrypt0 mã hóaMã hóa là quá trình mã hóa một tin nhắn hoặc thông tin theo cách mà chỉ những người được ủy quyền mới có thể đọc nó bằng một khóa tương ứng và những người không được ủy quyền thì không thể. Thông tin hoặc tin nhắn dự định, được gọi là văn bản gốc, được mã hóa bằng thuật toán mã hóa – mật mã – tạo ra bản mã chỉ có thể đọc được nếu được giải mã. Mã hóa là chức năng hai chiều. Khi chúng tôi mã hóa một cái gì đó, chúng tôi đang làm như vậy với ý định giải mã nó sau. Mã hóa được sử dụng để bảo vệ dữ liệu khi được truyền đi; . g. trong một giao tiếp thư bămBăm là quá trình sử dụng thuật toán để ánh xạ dữ liệu có kích thước bất kỳ thành độ dài cố định. Đây được gọi là giá trị băm. Trong khi mã hóa là chức năng hai chiều, băm là chức năng một chiều. Mặc dù về mặt kỹ thuật có thể băm ngược một giá trị, nhưng sức mạnh tính toán cần thiết khiến nó không khả thi. Mặc dù mã hóa nhằm bảo vệ dữ liệu khi truyền, nhưng băm nhằm xác minh rằng dữ liệu không bị thay đổi và dữ liệu đó là xác thực Ghi chú. Băm không giới hạn bảo mật. Nó cũng được sử dụng để so sánh lượng lớn dữ liệu hoặc tra cứu khóa nhanh Mật khẩu không được lưu trữ dưới dạng văn bản gốc trong cơ sở dữ liệu mà ở dạng giá trị băm Muối là một giá trị ngẫu nhiên mạnh về mật mã có độ dài cố định được thêm vào đầu vào của các hàm băm để tạo các giá trị băm duy nhất cho mọi đầu vào. Một muối được thêm vào để làm cho đầu ra băm mật khẩu trở nên độc nhất ngay cả đối với người dùng sử dụng mật khẩu phổ biến Hàm băm bcryptBcrypt là một hàm băm mật khẩu được thiết kế bởi Niels Provos và David Mazières, dựa trên mật mã Blowfish. Hàm bcrypt là thuật toán băm mật khẩu mặc định cho OpenBSD. Có triển khai bcrypt cho C, C++, C#, Java, JavaScript, PHP, Python và các ngôn ngữ khác Thuật toán bcrypt tạo hàm băm và muối mật khẩu cho chúng tôi bằng cách sử dụng mật mã mạnh. Chi phí tính toán của thuật toán được tham số hóa, vì vậy nó có thể tăng lên khi máy tính trở nên nhanh hơn. Chi phí tính toán được gọi là hệ số công việc hay hệ số chi phí. Nó làm chậm quá trình băm, khiến các nỗ lực của brute force khó hơn và chậm hơn. Yếu tố chi phí tối ưu thay đổi theo thời gian khi máy tính ngày càng nhanh hơn. Nhược điểm của yếu tố chi phí cao là tăng tải cho tài nguyên hệ thống và ảnh hưởng đến trải nghiệm người dùng Trong ví dụ tiếp theo, chúng tôi tạo mật khẩu băm tạo_hashed_password. py #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed) Ví dụ tạo muối và mật khẩu băm với bcrypt import bcrypt Chúng tôi nhập mô-đun hashed = bcrypt.hashpw(passwd, salt)9 salt = bcrypt.gensalt() Một muối được tạo ra với chức năng import bcrypt2 hashed = bcrypt.hashpw(passwd, salt) Giá trị băm được tạo bằng hàm import bcrypt3, lấy giá trị văn bản rõ ràng và muối làm tham số $ python first.py b'$2b$12$mwSIOyxLJid1jFLgnU0s0.' b'$2b$12$mwSIOyxLJid1jFLgnU0s0.7pmzp8Mtx.GEO30x0AbI2v8r2sb98Cy' $ python first.py b'$2b$12$MgGs11HIXGkg1Bm1Epw0Du' b'$2b$12$MgGs11HIXGkg1Bm1Epw0Du20TV8ppi2Latgq7kKng8UjM5ZFWKKeS' Lưu ý rằng muối là phần đầu tiên của giá trị băm được tạo. Cũng lưu ý rằng mỗi khi một giá trị băm và muối duy nhất được tạo Python bcrypt kiểm tra mật khẩuVí dụ sau kiểm tra mật khẩu dựa trên giá trị được băm ________số 8Một mật khẩu được kiểm tra với chức năng import bcrypt4 #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)0 Yếu tố chi phí làm tăng tính bảo mật bằng cách làm chậm quá trình băm #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)1 Chúng tôi đặt hệ số chi phí với tham số import bcrypt5 thành mười sáu. Chúng tôi đo thời gian để tạo mật khẩu băm Lưu trữ mật khẩu an toàn 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 cần bận tâm đến việc lưu trữ chúng ở định dạng đơn giản. Chỉ cần ai đó giành được quyền xem trên cơ sở dữ liệu là đủ để toàn bộ cơ sở người dùng bị xâm phạm
Bạn phải luôn cho rằng cơ sở dữ liệu của mình 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 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 Ngoài ra - đó là một câu hỏi về hành vi đạo đức. Nếu người dùng đăng ký 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? . Cả bạn và kẻ xấu đều không thể đọc được mật khẩu văn bản thuần túy tại bất kỳ thời đ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 thiết lập lại nó
Để ngăn bất kỳ ai khai thác trắng trợn thông tin đăng nhập, bạn phải 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ưng hiệu quả nhất để ngăn chặn việc sử dụng trái phép mật khẩu đượ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 dưới bất kỳ hình dạng hoặc hình thức nào, vì định dạng này không thể đọc được đối với con người và khó bẻ khóa bằng máy tính
Băm mật khẩu là gì?Ở dạng cơ bản nhất, băm đề cập đến việc chuyển đổi một chuỗi này sang một chuỗi khác (còn được gọi là hàm băm) bằng cách sử dụng hàm băm. Bất kể kích thước của chuỗi đầu vào là gì, hàm 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à hàm băm không giống chuỗi đầu vào và bất kỳ thay đổi nào trong chuỗi đầu vào đều tạo ra sự thay đổi trong hàm băm Ngoài ra - hàm băm đầu vào băm theo kiểu một chiều. Đây không phải là một chuyến đi khứ hồi và mật khẩu đã băm không thể bị hủy băm. Cách duy nhất để kiểm tra xem mật khẩu đầu vào có khớp với mật khẩu 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 giá trị băm. Bằng cách này, chúng tôi không cần biết mật khẩu thực sự là gì để xác định xem nó có khớp với mật khẩu trong cơ sở dữ liệu hay không Ghi chú. Trong hướng dẫn này, chúng tôi sẽ sử dụng thuật ngữ "hàm băm" cho một hàm toán học được sử dụng để tính toán hàm 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. ). "Thuật toán băm" đề cập đến toàn bộ quá trình băm, không chỉ bao gồm một hàm băm được sử dụng mà còn nhiều tham số khác có thể được thay đổi trong quá trình băm Mỗi khi bạn đặt thứ gì đó chẳng hạn như import bcrypt1 vào thuật toán băm, bạn sẽ nhận được kết quả chính xác như nhau. Nhưng, nếu bạn thay đổi import bcrypt1 dù chỉ một chút, đầu ra sẽ bị thay đổi đến mức không thể nhận ra Đ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 giá trị băm hoàn toàn khác nhau. Nếu các mật khẩu tương tự tạo ra các giá trị băm giống nhau - việc 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, nên việc băm 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ó danh sách lớn các hàm băm được sử dụng), họ có thể bẻ khóa bằng cách đoán tất cả các mật khẩu có thể, băm chúng bằng cùng một hàm băm và so sánh kết quả thu được. . Kiểu tấn công này được gọi là tấn công brute-force và kiểu tấn công này từng hoạt động cực kỳ hiệu quả đối với các mật khẩu đơn giản, chẳng hạn như import bcrypt3, #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)30, 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. Theo 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 giá trị băm có thể, đến mức 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 nhập một số lượng mật khẩu không chính xác nhất định, khiến cho việc đoán theo kiểu vũ phu là không khả thi nếu ai đó đang cố gắng ép buộc một mật khẩu thông qua giao diện người dùng được kiểm soát, tuy nhiên, điều này sẽ không xảy ra nếu Muối trong băm mật khẩu là gì?Vì mật mã, giá trên mỗi lần tính toán và tiến bộ công nghệ - chỉ chọn một hàm băm phù hợp là 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 hàm 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 để khiến 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 hàm băm là đầu ra (i. e. hash) luôn giống nhau cho cùng một đầu vào. Điều đó làm cho việc băm có thể dự đoán được, do đó dễ bị tổn thương. Bạn có thể giải quyết điều đó 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 hàm băm không còn tạo ra cùng một đầu ra mỗi khi nó nhận được cùng một chuỗi với đầu vào Chuỗi giả ngẫu nhiên có độ dài cố định đó được truyền cùng với 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 muối mới, ngẫu nhiên sẽ được tạo và chuyển cùng với mật khẩu tới hàm băm. Do đó, ngay cả khi hai người dùng có cùng 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 và được thêm vào bất kỳ đầu vào mới nào sẽ được băm và so sánh với hàm 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 mật khẩu tương ứng của họ. Mục đích của việc thêm muối không phải là làm cho việc bẻ khóa một mật khẩu trở nên bất khả thi hơn nhiều về mặt tính toán - mà là để ngăn chặn việc tìm kiếm sự tương đồng giữa các chuỗi được 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 quá trình tạo muối - các hoạt động cực kỳ tốn kém về mặt tính toán được bản địa hóa thành một phiên bản duy nhất và phải được 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 Rất may - toàn bộ logic này thường được trừu tượng hóa bởi các mô-đun và khung 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 đầu. 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 Blowfish (mã hóa), thực hiện tốc độ tính toán thích ứng và muối. Tốc độ thích ứng đề cập đến khả năng tăng độ phức tạp của việc tính toán giá trị băm, điều này sẽ chứng minh thuật toán trong tương lai. Nó vẫn đủ 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 của phần cứng ngày càng tăng 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. Trong hướng dẫn này, chúng tôi sẽ đề cập đến việc triển khai Python của thuật toán BCrypt Cách băm mật khẩu trong Python bằng BCryptMô-đun #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)31 trên PyPi cung cấp triển khai BCrypt tuyệt vời mà chúng tôi có thể dễ dàng cài đặt qua #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)32 #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)6 Ghi chú. Đối với Debian và Ubuntu #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)3 Đối với các dẫn xuất của Fedora và RHEL #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)8 Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó cho núi cao #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)9 Sau khi bạn đã cài đặt BCrypt bằng cách sử dụng #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)32, bạn có thể nhập nó vào dự án của mình import bcrypt1 Để 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 #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)34 của lớp #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)35. Nó sẽ mã hóa phiên bản chuỗi của mật khẩu bạn muốn băm thành một mảng byte, được cung cấp một loại mã hóa nhất định và có thể băm bằng BCrypt Hãy lấy #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)36 làm mật khẩu ví dụ để minh họa việc sử dụng BCrypt import bcrypt5 Phương thức #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)34 lấy một chuỗi trong một số bảng mã (e. g. ASCII, UTF-8, v.v. ) và chuyển đổi nó thành một mảng byte tương ứng. Mảng byte đó được tạo thành từ một chuỗi được gọi là chuỗi b Ghi chú. Trong ví dụ trước, #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)38 là một chuỗi và #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)39 là một mảng byte. Nhưng nếu bạn in cả hai biến, sự khác biệt duy nhất có thể nhìn thấy là #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)39 có tiền tố #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)81 trước giá trị của nó - #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)82. Do đó, tên của loại mảng byte đó - chuỗi b 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 thức được sử dụng để băm trong BCrypt là #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)83. 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ạo muối theo cách thủ công, nhưng chắc chắn bạn nên sử dụng phương pháp #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)84 để thay thế. Đó là một phương pháp BCrypt được tạo riêng để tạo muối theo kiểu bảo mật bằng mật mã Ghi chú. Tốc độ tính toán thích ứng trong BCrypt đạt được bằng cách thiết lập một số lần lặp cần thiết để tạo muối. Giá trị đó được truyền dưới dạng đối số của phương thức #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)84. Giá trị mặc định là 12, nghĩa là BCrypt sử dụng 212 (4096) lần lặp lại để tạo muối. Bằng cách tăng giá trị của đối số đó, bạn tăng số lần lặp lại được sử dụng để tạo ra muối và bằng cách mở rộng, thời gian cần thiết để tính hàm băm Bây giờ, #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)86 đang lưu trữ phiên bản băm của mật khẩu #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)38. #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)86 sẽ trông hơi giống với salt = bcrypt.gensalt()8 Không giống lắm với mật khẩu ban đầu, phải không? Ghi chú. Phương pháp #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)90 được thiết kế để xác thực mật khẩu băm. Nó băm mật khẩu đầu vào mới, thêm muối mà nó tự động theo dõi, sau đó so sánh kết quả Hãy kiểm tra xem văn bản bằng chữ #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)93 có phải là mật khẩu hợp lệ cho #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)86 mới mà chúng tôi 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 hình minh họa sau đây để hiểu cách BCrypt xây dựng hàm băm được tạo Hình minh họa này hiển thị hàm băm của mật khẩu, #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)95, do đó, nó minh họa hàm băm từ phần trước Như chúng ta đã thảo luận trước đây, mỗi khi bạn gọi phương thức #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)84, nó sẽ tạo ra một mảng byte có kích thước cố định mới (được biểu thị bằng một chuỗi b). Trong ví dụ này, phương pháp #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)84 tạo ra đầu ra được đánh dấu là #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)98 trong hình minh họa. Hãy phân tách phần #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)98 và giải thích từng tiểu mục riêng lẻ #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)98 có ba tiểu mục được chia bởi dấu hiệu import bcrypt11
Sau đó, BCrypt gắn #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)98 cùng với giá trị băm của import bcrypt15 và do đó tạo ra #!/usr/bin/python import bcrypt passwd = b's$cret12' salt = bcrypt.gensalt() hashed = bcrypt.hashpw(passwd, salt) print(salt) print(hashed)86 cuối cùng của import bcrypt15 Ghi chú. Giá trị băm của import bcrypt15 (hoặc bất kỳ mật khẩu nào khác) đề cập đến mã hóa cơ số 64 của 23 byte đầu tiên của hàm băm 24 byte. Nó được đại diện bởi 31 ký tự Sự kết luậnSau khi đọc bài viết này, bạn sẽ hiểu rõ về cách sử dụng BCrypt để băm mật khẩu trước khi lưu trữ vào cơ sở dữ liệu. Để đưa 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 Bạn có thể Unhash một hàm băm không?Bạn không thể "xóa" hoặc "xóa" mật khẩu . Bạn không thể "đảo ngược" hoặc "đảo ngược" MD5, SHA256, bcrypt, SHA1 hoặc các hàm băm tương tự, có muối hoặc không có muối. Bạn (thường) không thể "giải mã" mật khẩu, "giải mã" mật khẩu băm hoặc băm mật khẩu "đảo ngược" hoặc "sắp xếp lại". Không có thứ gọi là "giải mã băm".
Hexdigest là gì?hexdigest(). Trả về dữ liệu được mã hóa ở định dạng thập lục phân . |