Mã hóa-giải mã python github

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. 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

pip install hashlib
pip install pycryptodomex

-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 hashlib import md5
from Cryptodome.Cipher import AES
from os import urandom

def derive_key_and_iv[password, salt, key_length, iv_length]: #derive key and IV from password and salt.
    d = d_i = b''
    while len[d] < key_length + iv_length:
        d_i = md5[d_i + str.encode[password] + salt].digest[] #obtain the md5 hash value
        d += d_i
    return d[:key_length], d[key_length:key_length+iv_length]

def encrypt[in_file, out_file, password, key_length=32]:
    bs = AES.block_size #16 bytes
    salt = urandom[bs] #return a string of random bytes
    key, iv = derive_key_and_iv[password, salt, key_length, bs]
    cipher = AES.new[key, AES.MODE_CBC, iv]
    out_file.write[salt]
    finished = False

    while not finished:
        chunk = in_file.read[1024 * bs] 
        if len[chunk] == 0 or len[chunk] % bs != 0:#final block/chunk is padded before encryption
            padding_length = [bs - len[chunk] % bs] or bs
            chunk += str.encode[padding_length * chr[padding_length]]
            finished = True
        out_file.write[cipher.encrypt[chunk]]

def decrypt[in_file, out_file, password, key_length=32]:
    bs = AES.block_size
    salt = in_file.read[bs]
    key, iv = derive_key_and_iv[password, salt, key_length, bs]
    cipher = AES.new[key, AES.MODE_CBC, iv]
    next_chunk = ''
    finished = False
    while not finished:
        chunk, next_chunk = next_chunk, cipher.decrypt[in_file.read[1024 * bs]]
        if len[next_chunk] == 0:
            padding_length = chunk[-1]
            chunk = chunk[:-padding_length]
            finished = True 
        out_file.write[bytes[x for x in chunk]] 


password = '12345' #shouldn't be something this simple

with open['infile.docx', 'rb'] as in_file, open['outfile.docx', 'wb'] as out_file:
    encrypt[in_file, out_file, password]

with open['outfile.docx', 'rb'] as in_file, open['outfile_decrypted.docx', 'wb'] as out_file:
    decrypt[in_file, out_file, password]

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 một 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. 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 . 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. Chế độ 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à đối tượng mật mã CBCMODE_CBC hoặc Chuỗi khối bản mã. Chế độ 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. 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ã trên 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 tin được mã hóa. Điều này sẽ 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. giải mã tập tin. 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. 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. thí 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. Sử dụng mã này có nguy cơ của riêng bạn. Đây chỉ là mục đích trình diễ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

Chủ Đề