Mật mã caesar

 - 

Giới thiệu

Hệ thống mật mã cổ xưa (những nhiều loại mật mã được phát minh cùng vận dụng trong thời kỳ chi phí đồ vật tính) có nhiều. Nhưng tựu tầm thường lại rất có thể chia thành 2 dạng lớn: mật mã chuyển vị và mật mã sửa chữa.

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

Mật mã chuyển vị là các loại mật mã nhưng mà những kí trường đoản cú trong bạn dạng rõ sẽ tiến hành hân oán vị theo một phương thức làm sao đó nhằm tạo nên phiên bản mã. lấy ví dụ điển hình là giải pháp mã hóa nhưng bạn ta cần sử dụng một mảnh vải vóc dài quấn hình xoắn ốc xung quanh một tkhô giòn hình tròn trụ, người tạo thành mã đã viết thông báo lên vải theo chiều dọc của tkhô giòn hình tròn trụ rồi trải mhình họa vải vóc ra phát âm theo hướng dài mhình ảnh vải sẽ tiến hành bản mã. Cách mã hóa này hay lộ diện sinh hoạt đều trò đùa đi tìm mật tlỗi vào bên ngôi trường. Hệ thống mã hóa này yếu ớt cùng không nhiều vươn lên là thể yêu cầu tôi sẽ không trình diễn tại chỗ này.

Mật mã sửa chữa thay thế là một số loại mật mã nhưng mà từng kí tự trong bạn dạng rõ được nỗ lực bởi một kí tự vào bản mã theo một nguyên tắc nhất mực. Thể loại này có rất nhiều biến chuyển thể, với trong các bài bác tiếp sau họ đã trải qua một vài một số loại mã thay thế thông dụng nhất: mã Caesar, mã Affine, mã thay thế sửa chữa dễ dàng và đơn giản, mã Vigenere, … Trước hết và dễ dàng và đơn giản độc nhất vô nhị là mã Caesar.

Hệ mã Caesar, giỏi mã di chuyển (Shift cipher) là hệ mật mã thay thế sửa chữa đơn giản dễ dàng duy nhất và được biết tới từ vô cùng nhanh chóng. Mã Caesar được đặt tên theo vị hoàng đế J. Caesar thời đế quốc La Mã.

Tại phía trên tôi sử dụng bảng chữ cái Tiếng Anh bao gồm 26 vần âm A -> Z để minch họa.

Mã Caesar triển khai chuyển dời từng ký kết trường đoản cú vào bạn dạng rõ lên k bước để tạo nên bạn dạng mã.

Để giải thuật, ta tiến hành ngược chở lại bằng cách di chuyển từng kí từ bỏ của phiên bản mã đi lùi k bước.

Sơ trang bị hệ mật mã chuyển dời được khái niệm như sau:

S = (Phường, C, K, E, D)

Trong đóPhường = C = K = Z26,những hàm lập mã và giải thuật được đến bởi:

E(p, k) = (p + k) thủ thuật 26

D(c, k) = (c - k) hack 26

Ví dụ: Với phiên bản rõ HENGAPNHAUVAOCHIEUTHUBAY, gửi dãy ký tự đó thành hàng số tương xứng ta được:

x =7 4 13 6 0 15 13 7 0 20 21 0 14 2 7 8 4 trăng tròn 19 7 trăng tròn 1 0 24

Nếu cần sử dụng thuật tân oán lập mật mã với k = 14, ta được phiên bản mã là:

y = 21 18 1 20 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 ký kết tự thường thì ta được phiên bản mật mã là: VSBUODBVOIJOCQVWSIHVIPOM.

Xem thêm:

Thám mã

Thám mã đối với mã Caesar khá đối kháng trả, khóa k đề xuất giữ kín chỉ tất cả 26 năng lực xảy ra bắt buộc ta dễ dãi dùng thuật tân oán Brute-force để tìm thấy phiên bản rõ ban đầu.

Code

def 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 + LETTERS else: translated = translated + symbol return translatedmessage = "HENGAPNHAUVAOCHIEUTHUBAY"cipher = caesar_cipher(message, "ENCRYPT", 13)print("Plain text: " + message)print("Cipher text: " + cipher)Tại phía trên tôi viết hàm caesar_cipher(message, mode, key). Hàm này có tác dụng cả 2 tính năng mã hóa với giải thuật tùy thuộc vào mode = "ENCRYPT" tốt mode = "DECRYPT".

Kết quả:


*

Để thám mã 1 phiên bản mã đến trước, tôi viết hàm caesar_crack(cipher), hàm này vẫn in ra tất cả những plain text rất có thể cùng 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 kết quả ta vẫn thấy key = 13 và message = HOMNAYTROIDEPQUA đó là bạn dạng rõ đề xuất tìm kiếm.

Lời kết

Bởi vậy họ đang đọc với biết cách mã hóa, thám mã đối với hệ mã chuyển dời Caesar.

Tiếp theo bọn họ đã qua 1 hệ mật mã phổ cập khác: Mã Affine.

Dành mang lại gọi giả:

Trước Lúc sang bài xích tiếp theo sau, mời phát âm trả gọi bàiKiểm tra một quãng văn uống bạn dạng bao gồm phải Tiếng Anh hay là không. Sau kia làm cho bài bác tập sau: Áp dụng hàm isEnglish() có vào module detectEnglish() để viết lại hàm caesar_crack() làm thế nào để cho hàm trả về luôn hiệu quả phiên bản rõ lúc đầu mà ko cần in ra tất cả các trường thích hợp.