Mã hóa mật mã Affine bằng Python

Ma Hoa Mat Ma Affine Bang Python



Chủ đề Nội dung:

  1. Giới thiệu
  2. Kiến thức tiên quyết
  3. Phương trình mật mã Affine
  4. Mã hóa mật mã Affine bằng Python
  5. Bằng chứng của khái niệm
  6. Phần kết luận
  7. Câu hỏi thường gặp (FAQ)

Mật mã Affine đại diện cho một loại mật mã thay thế cụ thể, thuộc danh mục mật mã dùng một bảng chữ cái. Không giống như mật mã Caesar nổi tiếng hơn, dịch chuyển mỗi chữ cái trong văn bản gốc theo ba vị trí cố định, mật mã Affine sử dụng hai khóa (a và b). Việc lựa chọn các phím cần phải được xem xét đặc biệt.

Kiến thức tiên quyết

Để hiểu sâu về chủ đề hôm nay, bạn phải hiểu các khái niệm sau:







  • Ước chung lớn nhất (GCD) và số nguyên tố cùng nhau
  • Số học mô-đun

Những khái niệm đó đã được giải thích chi tiết trong bài viết trước có tựa đề “Phương pháp tiếp cận toán học mật mã Affine”.



Phương trình mật mã Affine

Hãy bắt đầu với công thức mã hóa mật mã Affine:



E(x) = (a.x + b) mod m
Trước) Biểu thị Mã hóa chỉ mục theo thứ tự chữ cái x
Một Giá trị chỉ mục của khóa đầu tiên “đặc biệt”
x Giá trị chỉ mục của chữ cái đơn giản
b Giá trị chỉ mục của khóa thứ hai (giá trị dịch chuyển bổ sung)
mod tôi Các phép toán modulo của tổng số bảng chữ cái là 26


Hình ảnh thay thế & chú thích : Phương trình mật mã Affine





Ví dụ: chúng tôi muốn mã hóa bản rõ “BIMANDO” bằng khóa 7 và 13. Sử dụng chỉ mục bảng sau, trước tiên chúng tôi chuyển đổi bản rõ thành số tương ứng:


Hình ảnh thay thế & chú thích : Đánh số chỉ mục



Bản rõ “BIMANDO” được chuyển đổi thành số chỉ mục thành “1 8 12 0 13 3 14”.


Hình ảnh thay thế & chú thích : Chuyển đổi bản rõ thành giá trị đánh số chỉ mục

Sau đó, chúng ta áp dụng phép tính phương trình và kết quả được hiển thị như sau:


Hình ảnh thay thế & chú thích : Mật mã Affine

Vì vậy, bản rõ “BIMANDO” được mã hóa bằng mật mã Affine với khóa 7 và 13 dẫn đến “URTNAIH”.

Mã hóa mật mã Affine bằng Python

Bây giờ, giả sử chúng ta muốn gửi một tin nhắn bí mật có chứa nhiều đoạn văn. Thực hiện mã hóa mật mã Affine bằng quy trình thủ công tốn rất nhiều công sức, thời gian và khả năng tính toán sai rất cao phải không? Vì vậy, chúng ta cần một chương trình tự động hóa quá trình mã hóa Affine Cipher. Sau đây là quy trình từng bước để tạo chương trình Python:

1. Nhập các thư viện cần thiết
Chương trình của chúng tôi bắt đầu bằng cách nhập các mô-đun cần thiết như argparse, string và os để phân tích cú pháp đối số dòng lệnh, thao tác chuỗi và chức năng liên quan đến hệ điều hành, tương ứng.

nhập khẩu phân tích cú pháp
nhập khẩu sợi dây
nhập khẩu Bạn

2. Xác định ánh xạ bảng chữ cái
Sau đó, chúng ta định nghĩa bảng chữ cái là một chuỗi các chữ cái tiếng Anh viết thường. Điều này được sử dụng để ánh xạ các ký tự trong quá trình mã hóa sau này.

bảng chữ cái = sợi dây . ascii_chữ thường

3. Chức năng mã hóa mật mã Affine
Đây là chức năng cốt lõi của chương trình của chúng tôi. Nó lấy văn bản đầu vào và hai khóa “a” và “b” rồi áp dụng mã hóa mật mã Affine cho văn bản, giữ nguyên cấu trúc của văn bản.

chắc chắn affine_cipher_encryption ( chữ , Một , b ) :
văn bản được mã hóa = ''
ký tự TRONG chữ:
nếu như char. thấp hơn ( ) TRONG bảng chữ cái:
nếu như char. bữa tối ( ) :
văn bản được mã hóa + = chr ( ( ( Một * ( từ ( char. thấp hơn ( ) ) - 97 ) + b ) % 26 ) + 65 )
khác :
văn bản được mã hóa + = chr ( ( ( Một * ( từ ( ký tự ) - 97 ) + b ) % 26 ) + 97 )
khác :

4. Kiểm tra chính có điều kiện
Trong mã khối này, hãy kiểm tra xem nó có được thực thi như chương trình chính hay không. Nó thiết lập trình phân tích cú pháp đối số với các mô tả cho tập lệnh và các đối số của nó. Đối số bắt buộc chỉ là đường dẫn của tệp văn bản đầu vào. Khi chúng tôi không chỉ định đường dẫn đầu ra, chúng tôi muốn nó đặt mặc định cho tên tệp đầu vào có thêm “_encrypted” vào đó. Đối với đối số “keys”, chúng tôi muốn nó được định dạng thành “a,b”. Nhưng nếu chúng ta đặt thì mặc định là 5 và 8.

nếu như __tên__ == '__chủ yếu__' :
người phân tích cú pháp = argparse. Trình phân tích đối số ( Sự miêu tả = 'Mã hóa mật mã Affine từ một tệp văn bản' )
người phân tích cú pháp . add_argument ( 'tập tin đầu vào' , giúp đỡ = 'Đường dẫn đến tệp văn bản đầu vào' )
người phân tích cú pháp . add_argument ( '-k' , '--phím' , kiểu = str , mặc định = '5,8' , giúp đỡ = 'Các khóa của mật mã Affine ở định dạng 'a,b'' )
lập luận = người phân tích cú pháp . phân tích_args ( )

Một , b = bản đồ ( int , tranh luận. phím . tách ra ( ',' ) )

với mở ( tranh luận. tập tin đầu vào , 'r' ) BẰNG tài liệu :
chữ = tài liệu . đọc ( )

# Trích xuất tên tệp từ đường dẫn tệp đầu vào
tên_file đầu vào , sự mở rộng = Bạn . con đường . chia nhỏ ( tranh luận. tập tin đầu vào )
mặc định_output_file = tên_file đầu vào + '_được mã hóa' + phần mở rộng

# Mã hóa văn bản bằng mật mã affine
văn bản được mã hóa = affine_cipher_encryption ( chữ , Một , b )

# Viết văn bản được mã hóa vào một tệp mới
với mở ( mặc định_output_file , 'TRONG' ) BẰNG tài liệu :
tài liệu . viết ( văn bản được mã hóa )

Cuối cùng, sau khi thực hiện xong chức năng mã hóa, chương trình của chúng ta sẽ lưu đầu ra có cùng phần mở rộng tệp với tệp đầu vào.

Bây giờ hãy lưu nó vào “affine_cipher.py”. Bây giờ, hãy chạy chương trình bằng cách gõ lệnh sau:

python affine_cipher. py -h

Nếu bạn không tìm thấy lỗi nào, kết quả đầu ra sẽ giống như hình ảnh sau:


Hình ảnh thay thế & chú thích : Chương trình Python mã hóa Affine

Bằng chứng của khái niệm

Chúng tôi có một tin nhắn bí mật có tên “message.txt” sau đây và chúng tôi muốn thông báo tin nhắn đó cho các thành viên của mình:


Hình ảnh thay thế & chú thích : Văn bản thô

Vì vậy, chúng tôi sử dụng chương trình mà chúng tôi đã tạo trước khi muốn mã hóa tin nhắn này bằng mật mã Affine với khóa 3 và 7. Lệnh như sau:

python affine_cipher. py tin nhắn. txt -k 3 , 7


Hình ảnh thay thế & chú thích : Chương trình Python mã hóa Affine

Với tốc độ chớp mắt, tin nhắn mã hóa sẽ được tạo thành công và lưu vào “message_encrypted.txt”. Hãy kiểm tra xem tin nhắn trông như thế nào:


Hình ảnh thay thế & chú thích : Bản mã Affine

Như bạn có thể thấy, tin nhắn bị xáo trộn. Chỉ những thành viên của chúng tôi biết phương pháp mật mã và khóa của nó mới có thể giải mã được tin nhắn.

Hãy thử nó

Tải xuống mã nguồn chương trình này trên trang GitHub của chúng tôi tại https://github.com/bimando/Affine-Cipher .

Phần kết luận

Tóm lại, phương pháp mã hóa mật mã Affine, một dạng mật mã thay thế dùng một bảng chữ cái, cung cấp tính bảo mật nâng cao thông qua việc sử dụng hai khóa, đòi hỏi phải xem xét cẩn thận trong quá trình chọn khóa. Hiểu các khái niệm như Ước số chung lớn nhất (GCD), số nguyên tố cùng nhau và số học mô-đun là điều cần thiết để nắm bắt được sự phức tạp của mật mã Affine.

Phương trình mật mã Affine, E(x) = (a.x + b) mod m, đóng vai trò là công cụ cơ bản để mã hóa trong đó “a” và “b” đại diện cho các khóa và “x” tượng trưng cho chỉ mục của chữ cái trong văn bản gốc. Việc triển khai chương trình Python tự động cho quy trình mã hóa mật mã Affine đã được chứng minh là hợp lý hóa các tác vụ mã hóa quy mô lớn một cách hiệu quả. Chương trình kết hợp các chức năng chính bao gồm nhập thư viện, ánh xạ bảng chữ cái, chức năng mã hóa và phân tích đối số dòng lệnh cho đường dẫn đầu vào và đầu ra. Đáng chú ý, tập lệnh cho phép cài đặt mặc định cho khóa và tên tệp đầu ra để tạo điều kiện thuận lợi cho quá trình mã hóa liền mạch.

Câu hỏi thường gặp (FAQ)

Câu hỏi 1: Mật mã Affine là gì và nó khác với mật mã Caesar như thế nào?

Câu trả lời 1: Mật mã Affine là một loại mật mã thay thế dùng một bảng chữ cái sử dụng hai khóa “a” và “b” để mã hóa. Ngược lại, mật mã Caesar sử dụng sự dịch chuyển cố định ba vị trí cho mỗi chữ cái trong bản rõ.

Q2. Các điều kiện tiên quyết để hiểu được mật mã Affine là gì?

Câu trả lời 2: Để hiểu rõ về mật mã Affine, điều quan trọng là phải nắm được các khái niệm như Ước chung lớn nhất (GCD), số nguyên tố cùng nhau và số học mô-đun.

Câu hỏi 3: Làm cách nào tôi có thể mã hóa tin nhắn bằng mật mã Affine trong Python?

Câu trả lời 3: Để tự động hóa quy trình mã hóa mật mã Affine, bạn có thể sử dụng chương trình Python được nêu trong bài viết. Chương trình mã hóa hiệu quả các đầu vào văn bản quy mô lớn, đơn giản hóa quy trình mã hóa. Bài viết cung cấp hướng dẫn từng bước về cách nhập thư viện, xác định ánh xạ bảng chữ cái, tạo hàm mã hóa và phân tích cú pháp các đối số dòng lệnh cho đường dẫn đầu vào và đầu ra.