Mã hóa thư viện python

Trong hướng dẫn này, bạn sẽ học cách mã hóa và giải mã dữ liệu, e. g. một chuỗi văn bản sử dụng thư viện mật mã trong Python

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

Có liên quan

  • Khái niệm cơ bản về mật mã

Trong ví dụ này, 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ể được sử dụng để giải mã

Thư viện mật mã mà chúng tôi sử dụng ở đây được xây dựng dựa trên thuật toán AES

Mã hóa dữ liệu trong Python

Đầu tiên, chúng ta cần cài đặt thư viện mật mã

pip3 install cryptography

Từ thư viện mật mã, chúng tôi cần nhập

from cryptography.fernet import Fernet

def generate_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)
0 và bắt đầu tạo khóa - khóa này cần thiết để mã hóa/giải mã đối xứng

Tạo khóa

Để tạo khóa, chúng tôi gọi phương thức

from cryptography.fernet import Fernet

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

from cryptography.fernet import Fernet

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

Chúng ta chỉ cần thực hiện phương thức trên một lần để tạo khóa

Ghi chú. Bạn cần giữ khóa này ở nơi an toàn. Nếu mất khóa, bạn sẽ không thể giải mã dữ liệu đã được mã hóa bằng khóa này.

Nạp chìa khóa

Khi chúng tôi đã tạo khóa, chúng tôi cần tải khóa trong phương thức của mình để mã hóa dữ liệu

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

Mã hóa tin nhắn

Bây giờ, chúng tôi đã sẵn sàng để mã hóa một tin nhắn. Đây là một quá trình ba bước

  • 1 - mã hóa tin nhắn
  • 2 - khởi tạo lớp Fernet
  • 3 - chuyển tin nhắn đã mã hóa sang phương thức
    from cryptography.fernet import Fernet
    
    def generate_key():
        """
        Generates a key and save it into a file
        """
        key = Fernet.generate_key()
        with open("secret.key", "wb") as key_file:
            key_file.write(key)
    
    2

mã hóa tin nhắn

message = "message I want to encrypt".encode()

khởi tạo lớp Fernet

f = Fernet(key)

mã hóa tin nhắn

________số 8

Ví dụ về mã đầy đủ

Dưới đây là một ví dụ hoạt động đầy đủ về mã hóa tin nhắn trong python

from cryptography.fernet import Fernet

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

def load_key():
    """
    Load the previously generated key
    """
    return open("secret.key", "rb").read()

def encrypt_message(message):
    """
    Encrypts a message
    """
    key = load_key()
    encoded_message = message.encode()
    f = Fernet(key)
    encrypted_message = f.encrypt(encoded_message)

    print(encrypted_message)

if __name__ == "__main__":
    encrypt_message("encrypt this message")

đầu ra

from cryptography.fernet import Fernet

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

Giải mã dữ liệu bằng Python

Để giải mã tin nhắn, chúng ta chỉ cần gọi phương thức

from cryptography.fernet import Fernet

def generate_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)
3 từ thư viện
from cryptography.fernet import Fernet

def generate_key():
    """
    Generates a key and save it into a file
    """
    key = Fernet.generate_key()
    with open("secret.key", "wb") as key_file:
        key_file.write(key)
0. Hãy nhớ rằng, chúng tôi cũng cần tải khóa vì khóa cần thiết để giải mã tin nhắn

Vui lòng sử dụng Python để mã hóa tệp với AES. Chúng tôi sẽ viết một số mã python để mã hóa tệp trên đĩa bằng AES và sau đó giải mã tệp để truy xuất tệp văn bản gốc ban đầu của chúng tôi. Chúng tôi sẽ sử dụng Python 3. 8. 10 cho ví dụ này

AES (Tiêu chuẩn mã hóa nâng cao)   . Tiêu chuẩn được thành lập bởi Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ (NIST) năm 2001. ban đầu được gọi là Rijndael và là một thuật toán khối đối xứng để mã hóa hoặc giải mã dữ liệu. Tiêu chuẩn được thành lập bởi U. S. Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) năm 2001

AES có kích thước khối cố định là 128 bit (16 byte) và có ba độ dài chính khác nhau. 128, 192 hoặc 256 bit

Chúng tôi sẽ sử dụng 3 thư viện trong ví dụ này. Hai trong số chúng tôi có thể yêu cầu cài đặt mà chúng tôi có thể làm như sau

from cryptography.fernet import Fernet

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

-module -module khác của hệ điều hành sẽ được tích hợp vào Python 3. Bây giờ, hãy viết mã của chúng tôi

from cryptography.fernet import Fernet

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

Hãy giải thích những gì đang xảy ra ở đây

  1. Chúng tôi nhập thư viện của chúng tôi
  2. You will have to standard is a file call is infile. docx. Đây sẽ là một Word tài liệu trong trường hợp này (hoặc bất kỳ tệp nào được ưa thích) với văn bản trong đó chúng ta có thể xác minh trước và sau quá trình mã hóa/giải mã. Hãy chắc chắn rằng nó tồn tại trong cùng một thư mục như bản Python này
  3. Chúng tôi xác định chức năng đầu tiên của chúng tôi Der_key_and_iv (). Hàm này chấp nhận mật khẩu, muối, key_length và iv_length. Mật khẩu đã được xác định là người dùng, SALT thêm bảo vệ bổ sung vào mật khẩu, key_lengm là độ dài của khóa mã hóa tính toán bằng byte và IV_LENGTH là độ dài trong byte khởi động của chúng tôi. Vectơ khởi tạo là một chuỗi các byte không thể đoán trước được đối với các mã khóa mã hóa. Nó miễn phí là kích thước khối (16 byte trong trường hợp này) và nó chắc chắn rằng các bản mã hóa riêng biệt được tạo ra ngay cả khi một bản rõ ràng được mã hóa nhiều lần trong những dịp khác nhau có cùng một khóa. Chế độ mã hóa mà chúng tôi đang sử dụng (mode_cbc) để mã hóa tệp của chúng tôi yêu cầu IV. Lưu ý rằng chúng tôi đã sử dụng thuật toán MD5 để tạo từ khóa khá mạnh. DRIVE_KEY_AND_IV () sẽ trả về 2 giá trị. key and IV (vectơ khởi tạo). Cả hai sẽ được sử dụng để tạo mã mật mà chúng tôi sẽ sử dụng để mã hóa tệp. yêu cầu iv. Lưu ý rằng chúng tôi đã sử dụng thuật toán MD5 để tạo khóa hợp lý mạnh. Derive_key_and_iv() sẽ trả về 2 giá trị. khóa và iv (vectơ khởi tạo). Cả hai sẽ được sử dụng để tạo mật mã mà chúng tôi sẽ sử dụng để mã hóa tệp.
  4. Chúng tôi xác định mã hóa hàm thứ hai của chúng tôi (). Hàm này chấp nhận 4 tham số. in_file, out_file, password và key_length. In_file là tệp rõ ràng mà chúng tôi sẽ mã hóa (một tài liệu từ trong trường hợp này), out_file sẽ là một tệp được mã hóa không thể đọc được bởi bất kỳ ai không có mật khẩu, mật khẩu đã được xác định có giá . mã hóa() . Hàm này chấp nhận 4 tham số. in_file, out_file, mật khẩu và key_length. In_file là tệp văn bản gốc mà chúng tôi sẽ mã hóa (Tài liệu Word trong trường hợp này), out_file sẽ là tệp được mã hóa mà bất kỳ ai không có mật khẩu đều không thể đọc được, mật khẩu do người dùng xác định và key_length .
    • Trong chức năng này, chúng tôi gọi hàm dera_key_and_iv () sẽ trả về khóa và IV mà chúng tôi sẽ sử dụng tương tự với chế độ để tạo mã mật
    • Chế độ chúng tôi đang sử dụng ở đây được gọi là Mode_CBC hoặc mã hóa chuỗi khối. Chế độ hoạt động này được phát minh vào những năm 1970 và hoạt động theo cách của Xoring, từng khối được xác định rõ ràng với khối mã hóa trước đó trước khi được mã hóa. The value code is an object code CBCMODE_CBC or Ciphertext Block Chaining. Phương thức hoạt động này được phát minh vào những năm 1970 và hoạt động bằng cách “XORing” từng khối bản rõ với khối bản mã trước đó trước khi được mã hóa. Mật mã giá trị là một đối tượng mật mã CBC
    • Hãy nhớ lại rằng XOR có nghĩa là độc quyền của người Viking hoặc là một hoạt động hợp lý là đúng khi và chỉ khi các đối số của nó khác nhau, tức là một là đúng và cái kia là sai
    • in_file was read from disk and being codeized in the blocks or blocks are multiples of size blocks code. Khối cuối cùng được đệm trước khi mã hóa nếu nó không có đủ chiều dài. Tệp được mã hóa out_file được ghi vào đĩa trong các khối được mã hóa bằng mã của chúng tôi
    • Out_file sẽ không thể đọc được của con người vì nó đã bị mã hóa
  5. Chúng tôi xác định chức năng thứ ba của chúng tôi giải mã (). Hàm này sẽ chấp nhận 4 tham số. in_file, out_file, password và key_length. Hàm này làm điều tương tự như mã hóa () ngoại trừ ngược lại. In_file sẽ là tệp được mã hóa trước đó và tệp out_file với tệp đã được giải mã mà chúng tôi có thể đọc. giải mã() . Chức năng này sẽ chấp nhận 4 tham số. in_file, out_file, mật khẩu và key_length. Chức năng này thực hiện tương tự như mã hóa () ngoại trừ ngược lại. in_file sẽ là tệp được mã hóa trước đó và out_file là tệp được giải mã mà chúng ta có thể đọc được.
  6. Mật khẩu tôi xác định ở đây là rất quan trọng. Trong thực tế, mật khẩu của bạn nên là một thứ gì đó phức tạp hơn và không dễ đoán. Chúng tôi đã sử dụng một cái đơn giản cho ví dụ này
  7. Chúng tôi sử dụng một câu lệnh để mở tệp văn bản gốc để mã hóa và chúng tôi làm tương tự để giải mã nó

Khi mã thực thi, chúng tôi sẽ nhận được 2 tệp mới trên đĩa trong cùng thư mục với tệp lệnh của chúng tôi bên ngoài tệp tin. docx

  1. tệp ngoài. docx - tệp này là mã hóa. Điều này không thể đọc được. tệp được mã hóa. Điều này sẽ không thể đọc được.
  2. outfile_decrypted. docx - Tệp này là DecryptedFile. Tệp này phải giống với tệp infile. docx gốc và tất cả các nội dung phải giống nhau và có thể đọc được. tệp đã được giải mã . Tệp này phải giống với tệp gốc. docx và tất cả nội dung phải giống nhau và có thể đọc được.

À chính nó đấy. Chúng tôi đã mã hóa thành công và giải mã một tập tin trong Python. Lời cảnh báo mặc dù, đây chỉ là một ví dụ. Trong thực tế, bạn hoàn toàn nên sử dụng phương tiện mạnh mẽ và mạnh mẽ hơn để mã hóa dữ liệu của bạn, cùng với mật khẩu mạnh mẽ hơn. Use this code has an your own body. Điều này chỉ dành cho mục đích của diễn đàn. ví dụ . Trên thực tế, bạn hoàn toàn nên sử dụng các phương tiện mạnh mẽ và mạnh mẽ hơn để mã hóa dữ liệu của mình, cùng với mật khẩu mạnh hơn. Bạn tự chịu rủi ro khi sử dụng mã này. Đây chỉ là mục đích trình diễn.

Thank vì đã đọc. Kiểm tra hướng dẫn mã hóa hai của chúng tôi ở đây. 👌👌👌

Tôi thích chia sẻ, giáo dục và hỗ trợ các nhà phát triển. Tôi có hơn 14 năm kinh nghiệm trong đó. Hiện đang chuyển từ quản trị hệ thống sang DevOps. Độc giả khao khát, trí tuệ và mộng tưởng. Nhập tự do, đi một cách an toàn và để quay lại một cái gì đó hạnh phúc mà bạn mang lại