Mật mã vigenere

      17

Một thời gian trước, tôi đang viết một bài bác đăng về phong thái thực hiện Caesar Shift Cipher bằng Python thả . Bây giờ tôi đang không ngừng mở rộng chủ thể này bằng cách tiến hành Mật mã Vigenère.

Bạn đang xem: Mật mã vigenere

Mật mã Vigenère

Mật mã Vigenère được phát minh sáng tạo vào thời điểm năm 1553 vị Giovan Battista Bellaso bạn Ý nhưng bây giờ được đặt theo thương hiệu một biện pháp sai trái của bạn Pháp Blaise de Vigenère. Nó không biến thành lỗi cho đến năm 1863 mặc dù thời nay nó vô cùng không an toàn cùng hiện chỉ hữu ích như một bài bác tập xây dựng thú vui. Nếu bạn muốn đọc cục bộ, hãy xem nội dung bài viết trên Wikipedia

Vấn đề cùng với Mật mã Caesar Shift là mỗi chữ cái luôn được viết theo và một giải pháp, bởi vậy, ví dụ: ví như E, vần âm thông dụng độc nhất vô nhị, luôn luôn được đặt bên dưới dạng S thì đối chiếu tần số đơn giản đang bật mí sự dịch chuyển nếu khách hàng gồm một quãng dài hợp lý và phải chăng văn bản được mã hóa.

Vigenère Cipher phức tạp hơn tại đoạn một vần âm hoàn toàn có thể được mã hóa nhỏng ngẫu nhiên chữ cái nào không giống tùy thuộc vào vị trí của nó vào bạn dạng rõ. Nó thậm chí hoàn toàn có thể được mã hóa nlỗi chủ yếu nó nhưng mà bộ máy Enigma danh tiếng trong Thế chiến 2 của Đức tất yêu làm được, cung ứng cho Đồng minch một cách để bẻ khóa mã.

Các quy trình của cả quy chính sách với lời giải phần đông tương quan tới sự việc áp dụng một bảng các chữ cái, được biết đến cùng với tên thường gọi khác là Quảng trường Vigenère, Bảng Vigenère của Tabula Recta, trông giống như gắng này.


*

Để sinh sản một chuỗi văn uống bạn dạng, bạn phải một từ khóa. Đây rất có thể là bất cứ máy gì nhưng lphát minh là yêu cầu có độ lâu năm hợp lí. Đối cùng với ví dụ này, tôi vẫn áp dụng “ Trí tưởng tượng đặc biệt rộng kiến ​​thức. ”Dưới dạng văn uống bạn dạng cụ thể và“ dàn nhạc ”có tác dụng từ bỏ khóa.

Bản rõ được loại bỏ tất cả những ký kết từ bỏ ko kể những chữ az và AZ, kế tiếp được chuyển thành chữ hoa. Từ khóa sau đó được lặp lại nhằm tạo thành một chuỗi có thuộc độ lâu năm cùng với phiên bản rõ. Sử dụng các ví dụ được nhắc, điều này hỗ trợ cho chúng tôi phiên bản rõ và từ khóa sau:

TRÍ TƯỞNG TƯỢNG QUAN TRỌNG HƠN KIẾN THỨC

ORCHESTRAORCHESTRAORCHESTRAORCHESTRAORC

Mỗi cam kết từ trong bản rõ hiện giờ có một ký kết trường đoản cú khớp ứng trong tự khóa. Nếu họ tìm thấy vần âm rõ ràng dọc từ đầu Tabula Recta, vần âm từ bỏ khóa dọc theo phía bên trái, vần âm khu vực gặp mặt nhau của cột và mặt hàng được thực hiện nhằm tạo ra phiên phiên bản ví dụ của vần âm ví dụ.

Ví dụ: chữ cái trước tiên của bản rõ là I cùng vần âm từ khóa của chính nó là O, cùng bọn chúng cắt nhau trên W. Chữ I sản phẩm công nghệ hai được ghnghiền với E, vì thế được kết hợp với thương hiệu M. Toàn cỗ bản rõ được ký kết hiệu là:

WDCNMFTKICEKZQGKVIAGQYXSGKTVRPRRGPCERXG

Để giải mã văn uống bạn dạng, bọn họ chỉ việc đảo ngược thừa trình: chuyển mang đến sản phẩm mang lại trường đoản cú khóa khớp ứng, tìm kiếm tìm dọc nhằm tra cứu ký tự bao gồm vết, tiếp đến rước ký kết tự sinh hoạt tiêu đề của cột kia.

Ngoài ra còn tồn tại một cách thức đại số để mã hóa / lời giải với Vigenère Cipher nhưng mà ko buộc phải Tabula Recta. Nó sử dụng bảng vần âm dựa trên 0 nhằm ánh xạ số nguyên ổn, vì vậy A = 0, B = 1, v.v., một quan niệm dễ hiểu so với ngẫu nhiên lập trình viên nào!

Công thức mang lại kỷ điều khoản là:

enciphered index = (plaintext index + keywords index) hack 26

Đối với vần âm đầu tiên của ví dụ I = 8 cùng O = 14 nên:

enciphered index = (8 + 14) thủ thuật 26 = 22 = W

Giải mã đại số áp dụng công thức:

deciphered index = (enciphered index — từ khóa index) thủ thuật 26

vì chưng thế:

enciphered index = (22–14) hack 26 = 8 = I

Quy tắc / giải mã thực tiễn hoàn toàn có thể được tiến hành chỉ trong một cái mã cho dù bạn đang áp dụng bảng giỏi đại số, vị vậy tôi đã triển khai cả nhì phương thức mà lại chúng ta có thể demo bằng cách dấn xét / vứt ghi crúc các dòng liên quan.

Kế hoạch dự án

Tôi vẫn thực hiện Vigenère Cipher dưới dạng một tờ với hai cách tiến hành, một thủ tục nhằm giải thuật và một cách tiến hành nhằm giải thuật. Bản rõ, văn uống bạn dạng được kết hợp cùng từ bỏ khóa vẫn là các đối số của phương thức bắt buộc lớp vẫn không có tâm trạng xung quanh Tabula Recta sẽ tiến hành tạo nên vào __init__.

Cũng nlỗi những cách tiến hành, chúng tôi đang buộc phải một vài ba hàm ứng dụng cho các tác vụ sau:

Tạo Tabula Recta Xử lý bản rõ bằng phương pháp sa thải bất kỳ trang bị gì không giống không tính các vần âm với biến đổi thành chữ hoa Tạo trường đoản cú khóa bằng chiều nhiều năm của bạn dạng rõ bằng phương pháp tái diễn trường đoản cú khóa cửa hàng

Dự án này bao gồm hai tệp Pythanh mảnh sau mà chúng ta có thể mang tự kho lưu trữ Github .

Xem thêm: Chim Bồ Câu Gà Banh, Bồ Câu Xòe Mỹ, Nhật Xòe, Bồ Câu Xòe Mỹ

vigenerecipher.py vigenerecipherchạy thử.py

Trước không còn hãy để ý rằng Cửa Hàng chúng tôi nhập khẩu re(Regex).

Trong __init__chúng tôi chỉ đơn giản hotline __create_tabula_recta.

Bản __create_tabula_rectathân hàm này hơi cực nhọc gọi bởi khi bọn họ điền các hàng, bọn họ nên thêm 1 khoảng bù mỗi lần, tiếp nối đang tăng ngày một nhiều lên. Mỗi Khi điều đó được thực hiện, họ đề xuất soát sổ xem nó sẽ chạy ra cuối bảng vần âm chưa. Nếu vậy bọn họ chỉ cần trừ đi 26 nhằm quay trở lại đầu.

Tiếp theo là enciphercách thức mà lại trước nhất đem một phiên bạn dạng sẽ cách xử lý của bạn dạng rõ cùng một phiên phiên bản lặp lại của trường đoản cú khóa, sau đó tạo thành một danh sách trống cho các vần âm được kết hợp.

Sau đó, Cửa Hàng chúng tôi tái diễn các ký kết từ bỏ phiên bản rõ, tính chỉ số của nhị ký từ bỏ vào cặp bây chừ, trừ đi 65 từ bỏ mã ASCII. Sau đó tất cả hai cách triển khai của luật lệ thực tiễn, một bằng phương pháp sử dụng Tabula Recta với một bằng cách sử dụng đại số. Sau đó, Shop chúng tôi nối thêm cam kết từ được phối kết hợp và sau vòng lặp, hãy nối danh sách để tạo ra và trả về văn phiên bản được kết hợp bên dưới dạng một chuỗi.

Các decipherphương thức thao tác làm việc trong không ít theo cùng một phương pháp, với một lần tiếp nữa đưa về cho chính mình một sự lựa chọn của Tabula RECTA hoặc thực hiện đại số.

Các __process_plaintextchức năng áp dụng hết sức đơn giản và dễ dàng Regex nhằm thải trừ tất cả phần đông thứ trừ các chữ cái AZ. (Regex khiến óc tôi đau mà lại tôi vẫn rất có thể đọc được điều này!)

Cuối cùng, __get_keyword_repeatedhàm lặp lại tự khóa các lần giả dụ đề xuất nhằm tạo nên một chuỗi có thuộc độ dài cùng với bạn dạng rõ.

Vì vậy, bây chừ họ chỉ việc một chút mã để dùng demo.

Như vậy siêu đơn giản và dễ dàng, chỉ cần chế tạo ra một VigenereCipherđối tượng người sử dụng cùng gọi các cách làm của chính nó. Bây giờ chúng ta hãy chạy nó.

Xem thêm: Những Bài Hát Hay Nhất Của T Hay Nhất Của T, Những Ca Khúc Hay Không Phải Ai Cũng Biết Của T

python3.8 main.py

Đầu ra là:


*

Hãy nhớ là cả nguyên tắc với giải thuật được thực hiện theo hai phương pháp nên chúng ta cũng có thể thử cả nhì cùng với một ít comment / bỏ chú giải sinh sống đầy đủ địa chỉ tương thích.


Chuyên mục: Tin Tức