Hướng dẫn how to encrypt a file using python - cách mã hóa tệp bằng python

& nbsp; · 11 phút Đọc · Cập nhật tháng 7 năm 2022 · Hacking đạo đức · 11 min read · Updated jul 2022 · Ethical Hacking

Tiết lộ: Bài đăng này có thể chứa các liên kết liên kết, có nghĩa là khi bạn nhấp vào liên kết và mua hàng, chúng tôi nhận được hoa hồng.: This post may contain affiliate links, meaning when you click the links and make a purchase, we receive a commission.

Mã hóa là quá trình mã hóa một phần thông tin theo cách mà chỉ các bên được ủy quyền mới có thể truy cập vào nó. Nó cực kỳ quan trọng vì nó cho phép bạn bảo vệ dữ liệu một cách an toàn mà bạn không muốn bất cứ ai nhìn thấy hoặc truy cập.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng Python để mã hóa các tệp hoặc bất kỳ đối tượng byte nào (cũng là đối tượng chuỗi) bằng thư viện mật mã.

Chúng tôi sẽ sử dụng mã hóa đối xứng, có nghĩa là cùng một khóa mà chúng tôi sử dụng để mã hóa dữ liệu, cũng có thể sử dụng để giải mã. Có rất nhiều thuật toán mã hóa ngoài kia. Thư viện chúng tôi sẽ sử dụng được xây dựng trên thuật toán AES.

Lưu ý: Điều quan trọng là phải hiểu sự khác biệt giữa mã hóa và & NBSP; Các thuật toán băm. Trong & nbsp; mã hóa, bạn có thể truy xuất dữ liệu gốc khi bạn có khóa, trong đó & nbsp; các hàm băm, bạn không thể; Đó là lý do tại sao chúng được gọi là mã hóa một chiều.

Mục lục:

  • Tạo khóa
  • Mã hóa văn bản
  • Mã hóa tệp
  • Mã hóa tệp bằng mật khẩu

Liên quan: & nbsp; làm thế nào để trích xuất và giải mã cookie chrome trong Python. How to Extract and Decrypt Chrome Cookies in Python.

Hãy bắt đầu bằng cách cài đặt

def load_key():
    """
    Loads the key from the current directory named `key.key`
    """
    return open("key.key", "rb").read()
1:

pip3 install cryptography

Mở tệp Python mới và bắt đầu:

from cryptography.fernet import Fernet

Tạo khóa

Mã hóa văn bản

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)

Mã hóa tệp

Mã hóa tệp bằng mật khẩu

def load_key():
    """
    Loads the key from the current directory named `key.key`
    """
    return open("key.key", "rb").read()

Mã hóa văn bản

Mã hóa tệp

Mã hóa tệp bằng mật khẩu

# generate and write a new key
write_key()

Liên quan: & nbsp; làm thế nào để trích xuất và giải mã cookie chrome trong Python.

# load the previously generated key
key = load_key()

Hãy bắt đầu bằng cách cài đặt

def load_key():
    """
    Loads the key from the current directory named `key.key`
    """
    return open("key.key", "rb").read()
1:

message = "some secret message".encode()

Mở tệp Python mới và bắt đầu:

# initialize the Fernet class
f = Fernet(key)

Fernet là một triển khai mật mã được xác thực đối xứng; Hãy bắt đầu bằng cách tạo khóa đó và ghi nó vào một tệp:

# encrypt the message
encrypted = f.encrypt(message)

Hàm

def load_key():
    """
    Loads the key from the current directory named `key.key`
    """
    return open("key.key", "rb").read()
2 tạo ra một khóa Fernet mới, bạn thực sự cần phải giữ điều này ở một nơi an toàn. Nếu bạn mất khóa, bạn sẽ không còn có thể giải mã dữ liệu được mã hóa bằng khóa này.

Vì khóa này là duy nhất, chúng tôi sẽ không tạo khóa mỗi khi chúng tôi mã hóa bất cứ thứ gì, vì vậy chúng tôi cần một chức năng để tải khóa đó cho chúng tôi:

# print how it looks
print(encrypted)

Output:

from cryptography.fernet import Fernet
0

Bây giờ chúng ta đã biết cách tạo, lưu và tải khóa, hãy bắt đầu bằng cách mã hóa các đối tượng chuỗi, chỉ để làm cho bạn quen thuộc với nó trước.

from cryptography.fernet import Fernet
1
from cryptography.fernet import Fernet
2

Tạo và ghi khóa vào một tệp:

Hãy tải chìa khóa đó:

Một số tin nhắn: How to Encrypt and Decrypt PDF Files in Python.

Mã hóa tệp

Mã hóa tệp bằng mật khẩu

from cryptography.fernet import Fernet
3

Liên quan: & nbsp; làm thế nào để trích xuất và giải mã cookie chrome trong Python.

from cryptography.fernet import Fernet
4

Hãy bắt đầu bằng cách cài đặt

def load_key():
    """
    Loads the key from the current directory named `key.key`
    """
    return open("key.key", "rb").read()
1:

from cryptography.fernet import Fernet
5

Mở tệp Python mới và bắt đầu:

from cryptography.fernet import Fernet
6

Fernet là một triển khai mật mã được xác thực đối xứng; Hãy bắt đầu bằng cách tạo khóa đó và ghi nó vào một tệp:

from cryptography.fernet import Fernet
7

Hàm

def load_key():
    """
    Loads the key from the current directory named `key.key`
    """
    return open("key.key", "rb").read()
2 tạo ra một khóa Fernet mới, bạn thực sự cần phải giữ điều này ở một nơi an toàn. Nếu bạn mất khóa, bạn sẽ không còn có thể giải mã dữ liệu được mã hóa bằng khóa này.

Hướng dẫn how to encrypt a file using python - cách mã hóa tệp bằng python

Vì khóa này là duy nhất, chúng tôi sẽ không tạo khóa mỗi khi chúng tôi mã hóa bất cứ thứ gì, vì vậy chúng tôi cần một chức năng để tải khóa đó cho chúng tôi:

from cryptography.fernet import Fernet
8

Bây giờ chúng ta đã biết cách tạo, lưu và tải khóa, hãy bắt đầu bằng cách mã hóa các đối tượng chuỗi, chỉ để làm cho bạn quen thuộc với nó trước.

Tạo và ghi khóa vào một tệp:

from cryptography.fernet import Fernet
9

Hãy tải chìa khóa đó:

Một số tin nhắn:

Mã hóa tệp bằng mật khẩu

Liên quan: & nbsp; làm thế nào để trích xuất và giải mã cookie chrome trong Python.

Hãy bắt đầu bằng cách cài đặt

def load_key():
    """
    Loads the key from the current directory named `key.key`
    """
    return open("key.key", "rb").read()
1:

Mở tệp Python mới và bắt đầu:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
0

Đầu tiên, các hàm dẫn xuất chính cần các bit ngẫu nhiên được thêm vào mật khẩu trước khi nó được băm; Những bit này được gọi là muối, giúp tăng cường an ninh và bảo vệ chống lại các cuộc tấn công từ điển và vũ phu. Chúng ta hãy tạo một hàm để tạo ra mô -đun

# generate and write a new key
write_key()
6:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
1

Chúng tôi có một hướng dẫn về việc tạo dữ liệu ngẫu nhiên. Làm cho & nbsp; chắc chắn sẽ kiểm tra xem bạn không chắc chắn về ô trên.

Tiếp theo, hãy tạo một chức năng để lấy phím từ mật khẩu và muối:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
2

Chúng tôi khởi tạo thuật toán Scrypt bằng cách truyền:

  • # generate and write a new key
    write_key()
    7.
  • # generate and write a new key
    write_key()
    8 mong muốn của khóa (32 trong trường hợp này).
  • # generate and write a new key
    write_key()
    9: Tham số chi phí CPU/bộ nhớ, phải lớn hơn 1 và là công suất 2.
  • # load the previously generated key
    key = load_key()
    0: Tham số kích thước khối.
  • # load the previously generated key
    key = load_key()
    1: Tham số song song.

Như đã đề cập trong tài liệu,

# generate and write a new key
write_key()
9,
# load the previously generated key
key = load_key()
0 và
# load the previously generated key
key = load_key()
1 có thể điều chỉnh chi phí tính toán và bộ nhớ của thuật toán Scrypt. RFC 7914 khuyến nghị các giá trị là
# load the previously generated key
key = load_key()
5,
# load the previously generated key
key = load_key()
6, trong đó giấy Scrypt ban đầu cho thấy
# generate and write a new key
write_key()
9 nên có giá trị tối thiểu là
# load the previously generated key
key = load_key()
8 cho đăng nhập tương tác hoặc
# load the previously generated key
key = load_key()
9 cho các tệp nhạy hơn; Bạn có thể kiểm tra tài liệu để biết thêm thông tin.

Tiếp theo, chúng tôi tạo ra một chức năng để tải muối được tạo trước đó:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
3

Bây giờ chúng ta có các hàm tạo muối và các hàm dẫn xuất khóa, hãy tạo chức năng cốt lõi tạo khóa từ mật khẩu:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
4

Hàm trên chấp nhận các đối số sau:

  • message = "some secret message".encode()
    0: Chuỗi mật khẩu để tạo khóa từ.
  • message = "some secret message".encode()
    1: Một số nguyên biểu thị kích thước của muối để tạo ra.
  • message = "some secret message".encode()
    2: Một boolean cho biết liệu chúng ta có tải muối được tạo ra trước đó hay không.
  • message = "some secret message".encode()
    3: Một boolean để cho biết liệu chúng ta có lưu muối được tạo ra hay không.

Sau khi chúng tôi tải hoặc tạo muối mới, chúng tôi lấy phím từ mật khẩu bằng hàm

message = "some secret message".encode()
4 của chúng tôi và cuối cùng, trả lại khóa dưới dạng văn bản được mã hóa cơ sở64.

Bây giờ chúng ta có thể sử dụng cùng một hàm

# generate and write a new key
write_key()
2 mà chúng ta đã xác định trước đó:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
5

Đối với chức năng

# generate and write a new key
write_key()
1, chúng tôi thêm một khối Except đơn giản để xử lý ngoại lệ khi mật khẩu sai:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
6

Đáng kinh ngạc! Hãy sử dụng

message = "some secret message".encode()
7 để chúng ta có thể chuyển các đối số từ dòng lệnh:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
7

Hãy kiểm tra tập lệnh của chúng tôi bằng cách mã hóa

# generate and write a new key
write_key()
4 như trước đây:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
8

Bạn sẽ được nhắc nhập mật khẩu,

message = "some secret message".encode()
9 ẩn các ký tự bạn gõ, vì vậy nó an toàn hơn. Bạn cũng sẽ nhận thấy rằng tệp
# initialize the Fernet class
f = Fernet(key)
0 được tạo.You'll also notice that the
# initialize the Fernet class
f = Fernet(key)
0 file is generated.

Nếu bạn mở tệp mục tiêu

# generate and write a new key
write_key()
4, bạn sẽ thấy nó được mã hóa. Bây giờ chúng ta hãy cố gắng giải mã nó bằng mật khẩu sai:

def write_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
9

# generate and write a new key
write_key()
4 vẫn còn như vậy. Hãy truyền mật khẩu chính xác được sử dụng trong mã hóa:

def load_key():
    """
    Loads the key from the current directory named `key.key`
    """
    return open("key.key", "rb").read()
0

Kinh ngạc! Bạn sẽ thấy rằng

# generate and write a new key
write_key()
4 đã trở lại dạng ban đầu.

Lưu ý rằng nếu bạn tạo ra một loại muối khác (bằng cách truyền

# initialize the Fernet class
f = Fernet(key)
4 hoặc
# initialize the Fernet class
f = Fernet(key)
5)) trong khi giải mã, ngay cả khi đó là mật khẩu chính xác, bạn sẽ không thể khôi phục tệp như một loại muối mới sẽ được tạo để không vượt qua
# initialize the Fernet class
f = Fernet(key)
4 hoặc
# initialize the Fernet class
f = Fernet(key)
5 khi giải mã.

Sự kết luận

Kiểm tra tài liệu chính thức của Cryptography để biết thêm chi tiết và hướng dẫn.

Lưu ý rằng bạn cần cẩn thận với các tệp lớn, vì tệp sẽ cần hoàn toàn trên bộ nhớ để phù hợp để mã hóa. Bạn cần xem xét sử dụng một số phương pháp phân tách dữ liệu hoặc nén tệp cho các tệp lớn!

Dưới đây là mã đầy đủ cho cả hai kỹ thuật được sử dụng trong hướng dẫn này.

Bạn có thể xây dựng một ransomware bằng mã này. Bạn có thể kiểm tra hack đạo đức của chúng tôi với ebook Python để xây dựng nó cùng với 23 công cụ hack khác!

Đọc thêm: & nbsp; Cách tải xuống tất cả các hình ảnh từ một trang web trong Python.: How to Download All Images from a Web Page in Python.

Happy Coding ♥

Xem đầy đủ mã


Cũng đọc


Hướng dẫn how to encrypt a file using python - cách mã hóa tệp bằng python


Bảng bình luận