Làm cách nào để sử dụng mật khẩu trong Python?

Mã hóa là điều cần thiết vì nó cho phép bạn bảo vệ an toàn dữ liệu mà bạn không muốn người khác xem. Các doanh nghiệp sử dụng nó để bảo vệ bí mật kinh doanh, chính phủ sử dụng nó để bảo vệ thông tin bí mật và nhiều người sử dụng nó để bảo vệ thông tin cá nhân để tránh bị đánh cắp danh tính. Để giữ thông tin đăng nhập của người dùng trong cơ sở dữ liệu một cách an toàn, cần phải mã hóa mật khẩu. Bất kỳ ai có quyền truy cập vào cơ sở dữ liệu người dùng trên máy chủ của công ty (bao gồm cả tin tặc) có thể chỉ cần kiểm tra mọi mật khẩu được lưu trữ nếu mật khẩu không được mã hóa. Nếu không có mã hóa mật khẩu, ngay cả mật khẩu mạnh gồm 32 ký tự được tạo bằng trình tạo mật khẩu an toàn cũng vô nghĩa. Nếu mật khẩu của bạn được đọc trên máy chủ, bất kỳ ai cũng có thể sử dụng nó bằng cách sao chép và dán nó-bất kể mật khẩu đó dài hay khó

Trước khi lưu trữ mật khẩu của bạn trên máy chủ, quá trình mã hóa sẽ xáo trộn mật khẩu đó. Vì vậy, thay vì mật khẩu123, nếu ai đó hack máy chủ, họ sẽ tìm thấy một chuỗi ký tự và số ngẫu nhiên

Hiểu mã hóa mật khẩu

Để mô tả thành công mã hóa mật khẩu, trước tiên chúng ta phải hiểu ngôn ngữ. Một số khái niệm có thể mới, vì vậy đây là tóm tắt ngắn gọn về biệt ngữ mã hóa mật khẩu

  • Một chuỗi bit ngẫu nhiên được sử dụng để khóa và mở khóa mật khẩu. Bạn sẽ nhận được khóa riêng và khóa chung, mã hóa và giải mã dữ liệu theo nhiều cách khác nhau, nhưng chúng tôi sẽ không quá kỹ thuật với khóa
  • Chút ít. Trạng thái logic có thể có một trong hai giá trị, chẳng hạn như 1/0, đúng/sai, có/không hoặc bật/tắt
  • Khối (còn được gọi là mật mã khối). Một thuật toán xác định hoạt động trên các khối bit có độ dài cố định
  • hàm băm. Thuật toán mã hóa và giải mã mật khẩu bằng khóa. Hàm băm là một đoạn mã được thực thi bất cứ khi nào người dùng lưu mật khẩu hoặc đăng nhập vào ứng dụng
  • Hàm băm là thuật toán sử dụng khóa để mã hóa và giải mã mật khẩu. Khi ai đó lưu mật khẩu hoặc đăng nhập vào một ứng dụng, hàm băm chỉ đơn giản là một đoạn mã thực thi
  • Băm. Mật khẩu của bạn được thể hiện bằng một dãy số và ký tự ngẫu nhiên. Để xác thực, hàm băm sử dụng hàm băm của bạn thay vì mật khẩu thô
  • Muối là sự kết hợp của các chữ cái và số được thêm vào hàm băm

Hàm băm tạo ra phiên bản băm của mật khẩu mới và lưu nó trên máy chủ khi bạn lưu nó. Hàm băm tạo lại hàm băm mỗi khi bạn đăng nhập bằng mật khẩu của mình để xác định xem nó có khớp với mật khẩu đã lưu không. Thuật toán vượt qua xác thực và đăng nhập cho bạn nếu giá trị băm khớp

Ví dụ

  • mật khẩu ban đầu. [email được bảo vệ])RD
  • mật khẩu băm. 6AF1CE202340FE71BDB914AD5357E33A6982A63B

Mật khẩu băm đơn giản không chống hack, mặc dù chúng có vẻ ngoài. Thuật toán băm tạo ra một hàm băm riêng biệt cho mỗi mật khẩu, không phải cho mỗi người dùng. Do đó, nếu nhiều người dùng có cùng mật khẩu, Pa$$w0rd123, hàm băm sẽ giống hệt nhau. Các kỹ sư sử dụng mật khẩu muối để vượt qua lỗ hổng mã hóa này, đảm bảo rằng mỗi hàm băm là duy nhất ngay cả khi mật khẩu giống nhau

Mã hóa mật khẩu ẩn mật khẩu của người dùng, khiến chúng khó đoán hoặc giải mã. Đó là một bước quan trọng trong việc tạo phần mềm cơ sở người dùng an toàn. Bạn không thể bỏ qua bước này, cho dù bạn đang sử dụng Flask hay một khung Python nhẹ khác. Đây là nơi bcrypt hữu ích

Cách thức hoạt động của bcrypt

Niels Provos và David Mazières đã tạo thuật toán băm mật khẩu bcrypt, 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 của OpenBSD. Bcrypt có sẵn bằng C, C++, C#, Java, JavaScript, PHP, Python và nhiều ngôn ngữ lập trình khác. Bcrypt là một thư viện băm đa ngôn ngữ cung cấp mã hóa mật khẩu có một không hai. Theo mặc định, nó tạo thêm các ký tự ngẫu nhiên (muối) khi mã hóa chuỗi của bạn để cải thiện tính bảo mật cho mật khẩu của bạn. Bạn cũng có thể cho biết mình muốn thêm bao nhiêu ký tự bổ sung vào chuỗi đến dưới dạng tùy chọn. Thư viện bcrypt chỉ đọc mã byte, không đọc chuỗi thô. Để bắt đầu, bạn sẽ mã hóa một chuỗi mật khẩu đến trước khi chuyển nó cho bcrypt để được mã hóa. Mã hóa không giống như mã hóa. Nó chỉ đơn thuần đảm bảo rằng một văn bản có thể đọc được bằng máy trước khi bị che giấu bởi một kỹ thuật mã hóa

Mã hóa mật khẩu bằng Python với bcrypt

Python làm cho việc mã hóa mật khẩu bcrypt trở nên đơn giản. Chúng tôi sẽ tập trung vào cách đạt được nó mà không cần khuôn khổ. Tuy nhiên, nếu bạn hiểu cách lưu và đọc thông tin nhập của người dùng từ cơ sở dữ liệu, quy trình này sẽ tuân theo quy trình tương tự trong các khung

Mã số

<

Vì vậy, trong đoạn mã được viết ở trên, chúng tôi đã tạo hai lớp sẽ được sử dụng để mã hóa và giải mã chuỗi đầu vào đã chỉ định. Chúng tôi có các hàm khác nhau được tạo để mã hóa và giải mã các tham số chuỗi đã chỉ định là các giá trị đầu vào . trong hàm chính, chúng tôi đã tạo đối tượng của các lớp mã hóa và giải mã này và được gọi là Hàm này với sự trợ giúp của các đối tượng lớp tương ứng. người dùng được cung cấp phương pháp tiếp cận dựa trên menu, từ đó anh ta có thể chọn các thao tác khác nhau như mã hóa một chuỗi đầu vào cụ thể hoặc giải mã chuỗi đầu vào hoặc anh ta có thể chọn thoát khỏi quá trình thực thi mã hiện tại tùy thuộc vào lựa chọn được cung cấp bởi

Sau khi chạy thành công đoạn mã trên, bây giờ chúng ta hãy xem đầu ra được tạo bởi đoạn mã này

đầu ra

[email protected]:~$ python3 code.py 
Please choose one of the appropriate options::
1. To enter a string and print the resultant hashed string for it using bcrypt.
2. To enter a string and check if it matches with the hashed password or not using bcrypt.
3. To exit from the code execution.
1
>Enter the string that you want to convert to the hashed string::
mystrongpassword
The encrypted text or password is: b'$2b$16$mnqcnXcqeJedkgwmZ431JeLcvqo60BwHW/Fw6pVRG8iamUYWl7qYK'
Do you want to continue or exit the code execution?[y/n]
y
Please choose one of the appropriate options::
1. To enter a string and print the resultant hashed string for it using bcrypt.
2. To enter a string and check if it matches with the hashed password or not using bcrypt.
3. To exit from the code execution.
2
>Enter the string that you want to check against hashed string::
mystrongpassword
The entered string has matched successfully with the hashed password/string.
Do you want to continue or exit the code execution?[y/n]
y
Please choose one of the appropriate options::
1. To enter a string and print the resultant hashed string for it using bcrypt.
2. To enter a string and check if it matches with the hashed password or not using bcrypt.
3. To exit from the code execution.
1
>Enter the string that you want to convert to the hashed string::
newpassword
The encrypted text or password is: b'$2b$16$Uaer9zR3U5zbSmNsvZjsFOwlOXjWsLz0MaWNatZ/wptXW5/hwCsxK'
Do you want to continue or exit the code execution?[y/n]
y
Please choose one of the appropriate options::
1. To enter a string and print the resultant hashed string for it using bcrypt.
2. To enter a string and check if it matches with the hashed password or not using bcrypt.
3. To exit from the code execution.
2
>Enter the string that you want to check against hashed string::
NewPassword
The entered string has not matched with the hashed password/string.
Do you want to continue or exit the code execution?[y/n]
y
Please choose one of the appropriate options::
1. To enter a string and print the resultant hashed string for it using bcrypt.
2. To enter a string and check if it matches with the hashed password or not using bcrypt.
3. To exit from the code execution.
1
>Enter the string that you want to convert to the hashed string::
salted_string
The encrypted text or password is: b'$2b$16$jEyiUoWtN.TCnKlVDeEXxO9VJz4mWzEGr/ZifkjHCTy.PWnvm8Txy'
Do you want to continue or exit the code execution?[y/n]
y
Please choose one of the appropriate options::
1. To enter a string and print the resultant hashed string for it using bcrypt.
2. To enter a string and check if it matches with the hashed password or not using bcrypt.
3. To exit from the code execution.
2
>Enter the string that you want to check against hashed string::
salted_string
The entered string has matched successfully with the hashed password/string.
Do you want to continue or exit the code execution?[y/n]
n

Như chúng ta có thể thấy rằng sau khi chạy thành công đoạn mã trên, người dùng được nhắc với ba tùy chọn được liệt kê là tùy chọn đầu tiên để nhập chuỗi và in chuỗi băm kết quả cho nó, tùy chọn thứ hai là tùy chọn giải mã chuỗi đầu vào . chúng tôi đã cung cấp các đầu vào khác nhau cho cả chức năng mã hóa cũng như giải mã được gọi và đã xác minh kết quả của cả hai chức năng mã hóa và giải mã này bằng cách in các chuỗi được mã hóa và giải mã khác nhau. và cuối cùng, người dùng đã thoát khỏi việc thực thi mã bằng cách chọn tùy chọn số 3

Ưu điểm của mã hóa

Mọi người đều lo ngại về việc di chuyển dữ liệu nhạy cảm lên đám mây vì nhiều công ty tin rằng đám mây không an toàn như trung tâm dữ liệu của chính họ. Người bên ngoài có thể truy cập dữ liệu khi nó ở trên đám mây, nhưng dữ liệu từ khách hàng và đối thủ cạnh tranh được lưu trữ ở cùng một vị trí. Các công ty yêu cầu lợi ích của đám mây do khả năng chi trả và tính linh hoạt to lớn của nó. Tính năng này bao gồm khả năng khởi động hoặc ngừng hoạt động máy chủ khi nhu cầu thị trường thay đổi. Vậy, nếu nhà cung cấp dịch vụ yêu cầu rời đi thì sao?

Nếu dữ liệu được mã hóa và cả hai khóa được sử dụng để mã hóa đều có mặt, các nhà cung cấp dịch vụ sẽ có thể truy cập dữ liệu đó. Để giải quyết vấn đề này, nên thực hiện mã hóa dữ liệu trên đám mây và giữ các khóa mã hóa ở phía người dùng. Bất kể giải pháp bảo mật khóa cơ bản như thế nào, một số công ty nhất định từ chối xử lý các khóa mã hóa. Họ có những lo ngại về sao lưu, định giá và khắc phục thảm họa

Thẻ thanh toán được sử dụng cho nhiều giao dịch khác nhau và thẻ cũng như dữ liệu liên quan phải được bảo vệ. Đa số chủ thẻ ý thức được rằng thông tin và dữ liệu cá nhân của họ được an toàn và bảo mật. Do đó, mã hóa là một trong những chiến lược hiệu quả nhất của PCI DSS (Tiêu chuẩn bảo mật dữ liệu ngành thẻ thanh toán)

Nếu vi phạm dữ liệu xảy ra và thông tin cá nhân bị xóa, các cá nhân bị ảnh hưởng phải được liên hệ. Nếu dữ liệu bị chặn là an toàn và các khóa bảo mật không bị hỏng, bất kỳ khu vực tài phán nào cũng có thông báo công khai với điều khoản bến cảng an toàn. Do đó, trong trường hợp xảy ra vi phạm, việc triển khai mã hóa và bảo vệ khóa kỹ lưỡng có thể tiết kiệm rất nhiều tiền

Nhiều tổ chức hiện cung cấp văn phòng ảo như một phần của dịch vụ internet của họ, những dịch vụ này không được bảo vệ bởi chính sự tồn tại của họ. Cướp máy và lưu trữ là một mối nguy hiểm rất thực tế. Trên máy chủ của nhiều công ty này là dữ liệu bí mật không an toàn. Các biện pháp bảo vệ mã hóa dữ liệu chống sửa đổi dữ liệu hoặc phá hủy ngoài ý muốn và các công nghệ bảo mật ngày nay đã mở rộng các khả năng

Chỉ xem xét việc cung cấp các khóa mật mã cho dữ liệu từ xa trong giờ làm việc, khiến mã trở nên vô dụng nếu mất điện

Hơn nữa, không giống như mã hóa tệp hoặc thư mục, Mã hóa Toàn bộ Đĩa (FDE) mã hóa dữ liệu trong khi nó được lưu trữ trên đĩa cứng. Nói cách khác, quy trình mã hóa được thực hiện tự động. Do đó, việc mã hóa các tệp hoặc thư mục dễ dàng hơn nhiều, nhưng bạn phải chọn các tệp hoặc thư mục mà bạn muốn mã hóa theo cách thủ công

Một số nhược điểm của mã hóa

  • Khóa mã hóa dữ liệu. Không còn nghi ngờ gì nữa, mã hóa dữ liệu là một nỗ lực to lớn đối với một chuyên gia CNTT. Càng có nhiều khóa mã hóa dữ liệu, các quản trị viên CNTT càng khó theo dõi tất cả chúng. Bạn hủy dữ liệu được kết nối với mã hóa nếu bạn mất chìa khóa để mã hóa
  • Chi phí. Mã hóa dữ liệu có thể khá tốn kém vì các hệ thống luôn cập nhật dữ liệu phải có năng lực và cải tiến để thực hiện việc này. Việc giảm hoạt động của hệ thống có thể gặp nguy hiểm nếu bạn không có hệ thống có khả năng
  • Yêu cầu phi thực tế. Nếu một công ty không nắm bắt được một số ràng buộc do công nghệ mã hóa dữ liệu áp đặt, thì có thể đặt ra các quy tắc và nguyên tắc quá mức, khiến việc mã hóa bảo mật dữ liệu gặp rủi ro
  • khả năng tương thích. Tích hợp các công nghệ mã hóa dữ liệu với các chương trình hiện tại có thể khó khăn. Điều này có thể có ảnh hưởng tiêu cực đến hoạt động bình thường của hệ thống
  • Phục hồi dữ liệu phức tạp. Việc khôi phục dữ liệu trên các ổ đĩa rất phức tạp với mã hóa toàn bộ đĩa, giống như với tất cả các loại mã hóa khác. Xem xét điều này. mã hóa sẽ là vô nghĩa nếu dữ liệu được mã hóa có thể được khôi phục dễ dàng. Do đó, việc khôi phục dữ liệu cho tệp PST, chẳng hạn như khôi phục tệp đơn lẻ, là một thách thức
  • Máy tính đang chạy chậm. Hơn nữa, khi mã hóa toàn bộ đĩa được sử dụng, tất cả các đĩa đều được mã hóa. Trong tình huống này, bạn phải sử dụng mã xác minh để giải mã đĩa bất cứ khi nào bạn cố đọc thông tin của đĩa. Rõ ràng, quy trình này sẽ khiến máy của bạn chạy chậm lại

Do đó, trong bài viết này, chúng ta đã thấy cách chúng ta có thể sử dụng thư viện bcrypt do Python cung cấp làm mô-đun để mã hóa và giải mã chuỗi đầu vào.

Làm cách nào để sử dụng mật khẩu trong tập lệnh Python?

Nhắc mật khẩu . Bạn cần hỏi người dùng mật khẩu. Bạn có thể sử dụng input() , nhưng điều đó sẽ hiển thị mật khẩu trong thiết bị đầu cuối, để tránh điều đó, bạn nên sử dụng getpass thay thế. nhập người dùng getpass = getpass .

Làm cách nào để lưu trữ tên người dùng và mật khẩu trong Python?

Bạn có thể lưu trữ tên người dùng/mật khẩu trên hai dòng đầu tiên của tệp văn bản thuần túy , sau đó sử dụng python để đọc khi bạn cần. Nếu tệp văn bản nằm trong thư mục kho lưu trữ, bạn nên sửa đổi. gitignore để đảm bảo nó không bị kiểm soát nguồn theo dõi.