Giải mã caesar
Giới thiệuHệ thống mật mã truyền thống (các nhiều loại mật mã được phát minh và vận dụng trong thời kỳ tiền lắp thêm tính) gồm rất nhiều. Tuy vậy tựu chung lại sở hữu thể tạo thành 2 dạng lớn: mật mã đưa vị với mật mã cụ thế. Bạn đang xem: Giải mã caesar Bạn vẫn xem: Mật mã caesar Mật mã đưa vị là một số loại mật mã mà các kí tự trong bạn dạng rõ sẽ được hoán vị theo một phương pháp nào kia để chế tạo nên phiên bản mã. Ví dụ điển hình nổi bật là giải pháp mã hóa mà fan ta sử dụng một miếng vải dài quấn hình xoắn ốc quanh một thanh hình trụ, người tạo mã vẫn viết tin tức lên vải vóc theo chiều dọc củ của thanh hình tròn trụ rồi trải miếng vải ra hiểu theo chiều dài mảnh vải vẫn được phiên bản mã. Biện pháp mã hóa này thường xuất hiện thêm ở các trò chơi đi kiếm mật thư trong bên trường. Khối hệ thống mã hóa này yếu cùng ít thay đổi thể đề nghị tôi đang không trình diễn ở đây. Mật mã thay thế sửa chữa là loại mật mã mà lại mỗi kí trường đoản cú trong bạn dạng rõ được thay bởi một kí từ bỏ trong bạn dạng mã theo một quy tắc tốt nhất định. Thể một số loại này có không ít biến thể, và trong các bài tiếp theo bọn họ sẽ đi qua một số trong những loại mã cụ thế phổ cập nhất: mã Caesar, mã Affine, mã sửa chữa đơn giản, mã Vigenere, Đầu tiên và dễ dàng và đơn giản nhất là mã Caesar. Hệ mã Caesar, xuất xắc mã di chuyển (Shift cipher) là hệ mật mã nạm thế đơn giản và dễ dàng nhất và được biết đến từ rất sớm. Mã Caesar được đặt tên theo vị nhà vua J. Caesar thời đế quốc La Mã. Ở đây tôi dùng bảng chữ cái Tiếng Anh bao gồm 26 vần âm A -> Z để minh họa. Mã Caesar triển khai chuyển dịch từng cam kết tự trong bạn dạng rõ lên k bước để tạo ra ra bản mã. Để giải mã, ta thực hiện ngược lại bằng cách chuyển dịch từng kí trường đoản cú của bản mã lùi về k bước. Sơ đồ vật hệ mật mã di chuyển được có mang như sau: S = (P, C, K, E, D) Trong đóP = C = K = Z26,các hàm lập mã và giải mã được đến bởi: E(p, k) = (p + k) thủ thuật 26 D(c, k) = (c - k) hack 26 Ví dụ: Với bản rõ HENGAPNHAUVAOCHIEUTHUBAY, chuyển dãy ký tự kia thành hàng số khớp ứng ta được: x =7 4 13 6 0 15 13 7 0 đôi mươi 21 0 14 2 7 8 4 20 19 7 20 1 0 24 Nếu dùng thuật toán lập mật mã cùng với k = 14, ta được phiên bản mã là: y = 21 18 1 đôi mươi 14 3 1 21 14 8 9 14 2 16 21 22 18 8 7 21 8 15 14 12 Chuyển thành dạng cam kết tự thường thì ta được bản mật mã là: VSBUODBVOIJOCQVWSIHVIPOM. Thám mãThám mã đối với mã Caesar khá đơn giả, khóa k bắt buộc giữ kín đáo chỉ tất cả 26 kĩ năng xảy ra đề nghị ta tiện lợi dùng thuật toán Brute-force để tìm ra phiên bản rõ ban đầu. Codedef caesar_cipher(message, mode, key): LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" message = message.upper() translated = "" for symbol in message: if symbol in LETTERS: num = LETTERS.find(symbol) if mode.upper() == "ENCRYPT": num = (num + key) % 26 elif mode.upper() == "DECRYPT": num = (num - key) % 26 translated = translated + LETTERSelse: translated = translated + symbol return translatedmessage = "HENGAPNHAUVAOCHIEUTHUBAY"cipher = caesar_cipher(message, "ENCRYPT", 13)print("Plain text: " + message)print("Cipher text: " + cipher)Ở phía trên tôi viết hàm caesar_cipher(message, mode, key). Hàm này làm cả 2 chức năng mã hóa và lời giải tùy vào mode = "ENCRYPT" tốt mode = "DECRYPT". Kết quả: ![]() Để thám mã 1 bạn dạng mã mang lại trước, tôi viết hàm caesar_crack(cipher), hàm này đang in ra toàn bộ các plain text hoàn toàn có thể với key chạy tự 0 -> 25. def caesar_crack(cipher): for key in range(0, 26): message = caesar_cipher(cipher, "DECRYPT", key) print("key = {0:Kết quả: ![]() Nhìn vào tác dụng ta đã thấy key = 13 với message = HOMNAYTROIDEPQUA thiết yếu là phiên bản rõ yêu cầu tìm. Lời kếtNhư vậy họ đã hiểu và biết cách mã hóa, thám mã đối với hệ mã vận động và di chuyển Caesar. Tiếp theo chúng ta sẽ qua 1 hệ mật mã thông dụng khác: Mã Affine. Dành mang đến đọc giả: Trước lúc sang bài xích tiếp theo, mời hiểu giả gọi bàiKiểm tra một quãng văn bạn dạng có nên Tiếng Anh tốt không. Sau đó làm bài tập sau: Áp dụng hàm isEnglish() bao gồm trong module detectEnglish() để viết lại hàm caesar_crack() làm sao để cho hàm trả về luôn kết quả bạn dạng rõ lúc đầu mà không phải in ra tất cả các trường hợp. |