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
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óa
Mã 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ăm
Bă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 bcrypt
Bcrypt 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ẩu
Ví 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
Mật khẩu phải được lưu trữ trong cơ sở dữ liệu theo cách an toàn nhưng vẫn có thể quản lý được
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ó
Băm mật khẩu là một quy trình rẻ tiền, an toàn và tiêu chuẩn giúp giữ mật khẩu an toàn khỏi cả quản trị viên web và các tác nhân độc hại
Để 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
Trong hướng dẫn này, chúng tôi sẽ giải thích cách băm mật khẩu của bạn trong Python bằng BCrypt. Chúng tôi sẽ đề cập đến hàm băm là gì, cách so sánh hàm băm, cách thức hoạt động của "salting" và cách hàm băm thậm chí giúp mật khẩu an toàn
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
Khả năng dự đoán có thể dễ dàng khai thác
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
Hãy nhớ rằng việc thêm một ký tự vào cuối chuỗi trước khi băm sẽ thay đổi hoàn toàn hàm băm
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 BCrypt
Mô-đ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ú.
Để đảm bảo rằng tất cả các phụ thuộc bắt buộc đã đượ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 bạn chọn.
Đố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 BCrypt
Như 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
phiên bản bcrypt
Số nhận dạng thuật toán băm đặc biệt - trong trường hợp này làimport bcrypt
12 - phiên bản mới nhất của thuật toán BCrypt.số mũ
Đố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 biểu thị số lần lặp được sử dụng để tính toán một loại muối. Nếu không có đối số nào được truyền, giá trị mặc định là 12, do đó, 212 lần lặp được sử dụng để tính toán muối.muối được tạo
Mã hóa cơ số 64 của muối được tạo được biểu thị bằng 22 ký tự.
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ận
Sau 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