Tập tin mã hóa python aes 256

“Hãy tin vào tiềm năng vô hạn của bạn. Hạn chế duy nhất của bạn là những hạn chế bạn đặt ra cho chính mình. ” - Roy T. Bennett, Ánh sáng trong trái tim

nội dung

1. Giới thiệu

Pycrypto là một mô-đun python cung cấp các dịch vụ mật mã. Pycrypto hơi giống với JCE [Phần mở rộng mật mã Java] cho Java. Theo kinh nghiệm của chúng tôi, JCE mở rộng và đầy đủ hơn, đồng thời tài liệu về JCE cũng đầy đủ hơn. Điều đó đang được nói, pycrypto là một mô-đun khá tốt bao gồm nhiều khía cạnh của mật mã

Trong bài viết này, chúng tôi điều tra việc sử dụng triển khai AES của pycrypto để mã hóa và giải mã tệp

[Ghi chú. Chúng tôi cũng đã đề cập đến mã hóa và giải mã tệp AES trong java trước đây. ]

2. Tạo khóa

Mã hóa AES cần một khóa mạnh. Khóa càng mạnh, mã hóa của bạn càng mạnh. Đây có lẽ là liên kết yếu nhất trong chuỗi. Bằng cách mạnh mẽ, chúng tôi có nghĩa là không dễ đoán và có đủ entropy [hoặc tính ngẫu nhiên an toàn]

Điều đó đang được nói, để trình diễn mã hóa AES, chúng tôi tạo một khóa ngẫu nhiên bằng cách sử dụng sơ đồ khá đơn giản. Không sao chép và sử dụng sơ đồ tạo khóa này trong mã sản xuất

Mã hóa AES cần khóa 16 byte

key = ''.join[chr[random.randint[0, 0xFF]] for i in range[16]]
print 'key', [x for x in key]
# prints
key ['+', 'Y', '\xd1', '\x9d', '\xa0', '\xb5', '\x02', '\xbf', ';', '\x15', '\xef', '\xd5', '}', '\t', ']', '9']

3. Vector khởi tạo

Ngoài khóa, AES cũng cần một vectơ khởi tạo. Vectơ khởi tạo này được tạo với mọi mã hóa và mục đích của nó là tạo ra các dữ liệu được mã hóa khác nhau để kẻ tấn công không thể sử dụng phân tích mật mã để suy ra dữ liệu chính hoặc dữ liệu thông báo

Cần có một vectơ khởi tạo 16 byte được tạo như sau

iv = ''.join[[chr[random.randint[0, 0xFF]] for i in range[16]]]

Vectơ khởi tạo phải được truyền đến người nhận để giải mã thích hợp, nhưng không cần giữ bí mật. Nó được đóng gói vào tệp đầu ra ngay từ đầu [sau 8 byte kích thước tệp gốc], vì vậy người nhận có thể đọc nó trước khi giải mã dữ liệu thực

4. Mã hóa bằng AES

Bây giờ chúng ta tạo mật mã AES và sử dụng nó để mã hóa một chuỗi [hoặc một tập hợp các byte; dữ liệu không cần chỉ là văn bản]

Mật mã AES được tạo trong đó mỗi khối được "xâu chuỗi" với khối trước đó trong luồng. [Bạn không cần biết chi tiết chính xác trừ khi bạn quan tâm. Tất cả những gì bạn cần biết là – sử dụng chế độ CBC]

Ngoài ra, để mã hóa AES bằng pycrypto, bạn cần đảm bảo rằng dữ liệu có độ dài là bội số của 16 byte. Đệm bộ đệm nếu không và bao gồm kích thước của dữ liệu ở đầu đầu ra, để người nhận có thể giải mã đúng cách

aes = AES.new[key, AES.MODE_CBC, iv]
data = 'hello world 1234' # 

Chủ Đề