Hướng dẫn how to hide password in python - cách ẩn mật khẩu trong python

Tôi đã có một tập lệnh Python đang tạo kết nối ODBC. Kết nối ODBC được tạo bằng chuỗi kết nối. Trong chuỗi kết nối này, tôi phải bao gồm tên người dùng và mật khẩu cho kết nối này.

Có một cách dễ dàng để che khuất mật khẩu này trong tệp [chỉ không ai có thể đọc mật khẩu khi tôi chỉnh sửa tệp]?

DREFTYMAC

30.5K26 Huy hiệu vàng116 Huy hiệu bạc179 Huy hiệu đồng26 gold badges116 silver badges179 bronze badges

Đã hỏi ngày 1 tháng 10 năm 2008 lúc 14:37Oct 1, 2008 at 14:37

Bernhardruschbernhardruschbernhardrusch

11.5K12 Huy hiệu vàng47 Huy hiệu bạc58 Huy hiệu đồng12 gold badges47 silver badges58 bronze badges

2

Mã hóa Base64 nằm trong thư viện tiêu chuẩn và sẽ thực hiện để ngăn chặn những người lướt vai:

>>> import base64
>>>  print[base64.b64encode["password".encode["utf-8"]]]
cGFzc3dvcmQ=
>>> print[base64.b64decode["cGFzc3dvcmQ="].decode["utf-8"]]
password

Đã trả lời ngày 1 tháng 10 năm 2008 lúc 14:43Oct 1, 2008 at 14:43

David Webbdavid WebbDavid Webb

188K57 Huy hiệu vàng309 Huy hiệu bạc298 Huy hiệu Đồng57 gold badges309 silver badges298 bronze badges

13

Đây là một phương pháp đơn giản:

  1. Tạo một mô -đun Python - Hãy gọi nó là peekaboo.py.
  2. Trong peekaboo.py, bao gồm cả mật khẩu và bất kỳ mã nào cần mật khẩu đó
  3. Tạo một phiên bản biên dịch - peekaboo.pyc - bằng cách nhập mô -đun này [thông qua Lệnh Python, v.v.].
  4. Bây giờ, xóa peekaboo.py.
  5. Bây giờ bạn có thể vui vẻ nhập peekaboo chỉ dựa vào peekaboo.pyc. Vì peekaboo.pyc được biên dịch byte, nó không thể đọc được cho người dùng thông thường.

Điều này sẽ an toàn hơn một chút so với giải mã Base64 - mặc dù nó dễ bị tổn thương bởi bộ phân hủy PY_TO_PYC.

DJV

14,5K7 Huy hiệu vàng 50 Huy hiệu bạc71 Huy hiệu đồng7 gold badges50 silver badges71 bronze badges

Đã trả lời ngày 2 tháng 4 năm 2014 lúc 19:45Apr 2, 2014 at 19:45

6

Douglas F Shearer là giải pháp thường được phê duyệt trong UNIX khi bạn cần chỉ định mật khẩu để đăng nhập từ xa. Bạn thêm tùy chọn--password-from-file để chỉ định đường dẫn và đọc bản rõ từ một tệp. Tệp sau đó có thể nằm trong khu vực riêng của người dùng được bảo vệ bởi hệ điều hành. Nó cũng cho phép người dùng khác nhau tự động nhận tệp riêng của họ.
You add a --password-from-file option to specify the path and read plaintext from a file.
The file can then be in the user's own area protected by the operating system. It also allows different users to automatically pick up their own own file.

Đối với mật khẩu mà người dùng của tập lệnh không được phép biết - bạn có thể chạy tập lệnh với quyền được chọn và có tệp mật khẩu thuộc sở hữu của người dùng gốc/quản trị viên đó.

Đã trả lời ngày 1 tháng 10 năm 2008 lúc 15:34Oct 1, 2008 at 15:34

Martin Beckettmartin BeckettMartin Beckett

93.6K28 Huy hiệu vàng185 Huy hiệu bạc259 Huy hiệu đồng28 gold badges185 silver badges259 bronze badges

5

Nếu bạn đang làm việc trên một hệ thống UNIX, hãy tận dụng mô -đun NETRC trong thư viện Python tiêu chuẩn. Nó đọc mật khẩu từ một tệp văn bản riêng [.Netrc], có định dạng được phân chia ở đây.

Đây là một ví dụ sử dụng nhỏ:

import netrc

# Define which host in the .netrc file to use
HOST = 'mailcluster.loopia.se'

# Read from the .netrc file in your home directory
secrets = netrc.netrc[]
username, account, password = secrets.authenticators[ HOST ]

print username, password

Đã trả lời ngày 23 tháng 6 năm 2011 lúc 9:17Jun 23, 2011 at 9:17

Jonasbergjonasbergjonasberg

1.7652 huy hiệu vàng13 Huy hiệu bạc13 Huy hiệu đồng2 gold badges13 silver badges13 bronze badges

Làm thế nào về việc nhập tên người dùng và mật khẩu từ một tệp bên ngoài vào tập lệnh? Bằng cách đó ngay cả khi ai đó giữ tập lệnh, họ sẽ không tự động nhận mật khẩu.

Đã trả lời ngày 1 tháng 10 năm 2008 lúc 15:28Oct 1, 2008 at 15:28

Giải pháp tốt nhất, giả sử tên người dùng và mật khẩu không thể được cung cấp trong thời gian chạy của người dùng, có lẽ là một tệp nguồn riêng biệt chỉ chứa khởi tạo biến cho tên người dùng và mật khẩu được nhập vào mã chính của bạn. Tệp này sẽ chỉ cần chỉnh sửa khi thông tin đăng nhập thay đổi. Mặt khác, nếu bạn chỉ lo lắng về những người lướt vai với ký ức trung bình, mã hóa cơ sở 64 có lẽ là giải pháp dễ nhất. ROT13 quá dễ để giải mã thủ công, không nhạy cảm với trường hợp và giữ lại quá nhiều ý nghĩa trong trạng thái được mã hóa. Mã hóa mật khẩu và ID người dùng của bạn bên ngoài tập lệnh Python. Có anh ấy giải mã tập lệnh trong thời gian chạy để sử dụng.

Đưa ra thông tin đăng nhập kịch bản cho các nhiệm vụ tự động luôn là một đề xuất rủi ro. Tập lệnh của bạn nên có thông tin đăng nhập riêng và tài khoản mà nó sử dụng sẽ không có quyền truy cập nào ngoài chính xác những gì cần thiết. Ít nhất là mật khẩu nên dài và khá ngẫu nhiên.

Đã trả lời ngày 1 tháng 10 năm 2008 lúc 16:09Oct 1, 2008 at 16:09

tduehrtduehrtduehr

3411 Huy hiệu bạc3 Huy hiệu đồng1 silver badge3 bronze badges

2

Base64 là cách để đi cho nhu cầu đơn giản của bạn. Không cần nhập bất cứ thứ gì:

>>> 'your string'.encode['base64']
'eW91ciBzdHJpbmc=\n'
>>> _.decode['base64']
'your string'

Đã trả lời ngày 1 tháng 10 năm 2008 lúc 22:26Oct 1, 2008 at 22:26

Tzottzottzot

89,7K29 Huy hiệu vàng138 Huy hiệu bạc201 Huy hiệu đồng29 gold badges138 silver badges201 bronze badges

6

Một cách mà tôi đã làm điều này như sau:

Tại vỏ Python:

>>> from cryptography.fernet import Fernet
>>> key = Fernet.generate_key[]
>>> print[key]
b'B8XBLJDiroM3N2nCBuUlzPL06AmfV4XkPJ5OKsPZbC4='
>>> cipher = Fernet[key]
>>> password = "thepassword".encode['utf-8']
>>> token = cipher.encrypt[password]
>>> print[token]
b'gAAAAABe_TUP82q1zMR9SZw1LpawRLHjgNLdUOmW31RApwASzeo4qWSZ52ZBYpSrb1kUeXNFoX0tyhe7kWuudNs2Iy7vUwaY7Q=='

Sau đó, tạo một mô -đun với mã sau:

from cryptography.fernet import Fernet

# you store the key and the token
key = b'B8XBLJDiroM3N2nCBuUlzPL06AmfV4XkPJ5OKsPZbC4='
token = b'gAAAAABe_TUP82q1zMR9SZw1LpawRLHjgNLdUOmW31RApwASzeo4qWSZ52ZBYpSrb1kUeXNFoX0tyhe7kWuudNs2Iy7vUwaY7Q=='

# create a cipher and decrypt when you need your password
cipher = Fernet[key]

mypassword = cipher.decrypt[token].decode['utf-8']

Khi bạn đã thực hiện việc này, bạn có thể nhập MyPassword trực tiếp hoặc bạn có thể nhập mã thông báo và mật mã để giải mã khi cần thiết.

Rõ ràng, có một số thiếu sót cho phương pháp này. Nếu ai đó có cả mã thông báo và khóa [như họ sẽ làm nếu họ có tập lệnh], họ có thể giải mã dễ dàng. Tuy nhiên, nó không bị che giấu và nếu bạn biên dịch mã [với một cái gì đó như Nuitka], ít nhất mật khẩu của bạn sẽ không xuất hiện dưới dạng văn bản đơn giản trong trình chỉnh sửa hex.

Đã trả lời ngày 2 tháng 7 năm 2020 lúc 1:27Jul 2, 2020 at 1:27

Dr_Z2ADr_Z2ADr_Z2A

591 Huy hiệu bạc7 Huy hiệu đồng1 silver badge7 bronze badges

1

Đối với obfuscation Python3 bằng cách sử dụng

>>> 'your string'.encode['base64']
'eW91ciBzdHJpbmc=\n'
>>> _.decode['base64']
'your string'
0 được thực hiện khác nhau:python3 obfuscation using
>>> 'your string'.encode['base64']
'eW91ciBzdHJpbmc=\n'
>>> _.decode['base64']
'your string'
0 is done differently:

import base64
base64.b64encode[b'PasswordStringAsStreamOfBytes']

kết quả là

b'UGFzc3dvcmRTdHJpbmdBc1N0cmVhbU9mQnl0ZXM='

Lưu ý biểu diễn chuỗi không chính thức, chuỗi thực tế là trong báo giá

và giải mã trở lại chuỗi ban đầu

base64.b64decode[b'UGFzc3dvcmRTdHJpbmdBc1N0cmVhbU9mQnl0ZXM=']
b'PasswordStringAsStreamOfBytes'

Để sử dụng kết quả này trong đó các đối tượng chuỗi được yêu cầu, đối tượng byte có thể được dịch

repr = base64.b64decode[b'UGFzc3dvcmRTdHJpbmdBc1N0cmVhbU9mQnl0ZXM=']
secret = repr.decode['utf-8']
print[secret]

Để biết thêm thông tin về cách Python3 xử lý byte [và chuỗi phù hợp], vui lòng xem tài liệu chính thức.

gre_gor

6.2999 Huy hiệu vàng43 Huy hiệu bạc 50 Huy hiệu Đồng9 gold badges43 silver badges50 bronze badges

Đã trả lời ngày 3 tháng 4 năm 2019 lúc 1:40Apr 3, 2019 at 1:40

Jitterjitterjitter

4247 Huy hiệu bạc15 Huy hiệu Đồng7 silver badges15 bronze badges

2

Đây là một vấn đề khá phổ biến. Thường là điều tốt nhất bạn có thể làm là

A] Tạo một số loại chức năng mật mã ceasar để mã hóa/giải mã [chỉ không rot13] hoặc

B] Phương thức ưa thích là sử dụng khóa mã hóa, trong tầm với của chương trình của bạn, mã hóa/giải mã mật khẩu. Trong đó bạn có thể sử dụng bảo vệ tệp để bảo vệ truy cập khóa.

Dọc theo những dòng đó nếu ứng dụng của bạn chạy dưới dạng dịch vụ/daemon [như máy chủ web], bạn có thể đặt khóa của mình vào kho khóa được bảo vệ bằng mật khẩu với đầu vào mật khẩu như một phần của khởi động dịch vụ. Sẽ cần một quản trị viên để khởi động lại ứng dụng của bạn, nhưng bạn sẽ có sự giả vờ thực sự tốt cho mật khẩu cấu hình của mình.

Mikhail_Sam

9.89611 huy hiệu vàng59 Huy hiệu bạc90 Huy hiệu đồng11 gold badges59 silver badges90 bronze badges

Đã trả lời ngày 1 tháng 10 năm 2008 lúc 16:19Oct 1, 2008 at 16:19

Hệ điều hành của bạn có thể cung cấp các cơ sở để mã hóa dữ liệu một cách an toàn. Chẳng hạn, trên Windows có DPAPI [API bảo vệ dữ liệu]. Tại sao không yêu cầu người dùng cho thông tin đăng nhập của họ ngay lần đầu tiên bạn chạy sau đó làm cho chúng đi được mã hóa cho các lần chạy tiếp theo?

Đã trả lời ngày 1 tháng 10 năm 2008 lúc 15:22Oct 1, 2008 at 15:22

Đây là đoạn trích của tôi cho những điều như vậy. Về cơ bản, bạn nhập hoặc sao chép chức năng vào mã của bạn. GetCredentials sẽ tạo tệp được mã hóa nếu nó không tồn tại và trả về từ điển và UpdateCredential sẽ cập nhật.

import os

def getCredentials[]:
    import base64

    splitter='

Bài Viết Liên Quan

Chủ Đề