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

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 bcrypt
0

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 bcrypt
2

hashed = bcrypt.hashpw[passwd, salt]

Giá trị băm được tạo bằng hàm

import bcrypt
3, 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ố 8

Một mật khẩu được kiểm tra với chức năng

import bcrypt
4

#!/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 bcrypt
5 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 bcrypt
1 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 bcrypt
1 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 bcrypt
3,
#!/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 bcrypt
1

Để 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 bcrypt
5

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 bcrypt
11

  • 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 bcrypt
15 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 bcrypt
15

Ghi chú. Giá trị băm của

import bcrypt
15 [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

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 .

Chủ Đề