Code mã hóa caesar

     

Khái niệm mã hóa tài liệu và giải mã

Mã hóa dữ liệu là tiến trình che dấu dữ liệu thật (plaintext), tức thị chuyển dữ liệu thật thành dữ liệu không có chân thành và ý nghĩa hoặc có chân thành và ý nghĩa khác xa với dữ liệu thật. Quá trình đó gọi là mã hóa (encrytion). Kết quả của các bước gọi là bạn dạng mã (ciphertext). Từ bỏ “encrytion” được tạo thành từ “cryptography” (mật mã) bắt đầu từ tiếng Hi Lạp cổ điển “Kryptos” (Che dấu) với từ “graphia” (viết). Các bước mã hóa tài liệu có núm được thực hiện bằng phương pháp hoán vị tài liệu thật hoặc sửa chữa thay thế chúng bằng dữ liệu khác.

Bạn đang xem: Code mã hóa caesar

Tiến trình ngược với quy trình mã hóa có nghĩa là chuyển từ bản mã thành dữ liệu ban sơ gọi là giải mã.

Hệ mã Caesar

Trong mật mã học, mật mã Caesar (Xê da), có cách gọi khác là mật mã dịch chuyển, là một trong những mật mã đơn giản dễ dàng và được nghe biết nhiều nhất. Hệ mã Caesar là 1 trong những hệ mã hóa thay thế sửa chữa đơn âm, thao tác trên bẳng chữ cái tiếng Anh 26 cam kết tự. Đó là một trong những dạng của mật mã cố kỉnh thế, trong những số đó mỗi ký kết tự trong văn phiên bản được thay thế sửa chữa bằng một ký tự giải pháp nó một đoạn trong bảng vần âm để sinh sản thành bạn dạng mã.

Ví dụ:

Đối với bảng mã giờ đồng hồ anh (ABCDEFGHI...), nếu như độ dịch là 3, A sẽ tiến hành thay bằng D, B sẽ tiến hành thay bằng E, ..., W vẫn thay bằng Z, X sẽ thay bằng A, Y vẫn thay bằng B với Z thay bằng C.Phương pháp chọn cái tên theo Caesar, vị hoàng đế đã sử dụng nó thường xuyên trong công việc.Không gian bạn dạng rõ phường là những từ rất cần phải mà hóa được chế tác từ bảng chữ cái A. Không gian phiên bản rỏ C là những từ đã được mã hóa.

Để mã hóa, fan ta tấn công số các chữ loại từ 0N-1 (N là tổng số thành phần của phiên bản chữ cái). Không gian khóa K=ZN. Với mỗi khóa K  K hàm mã hóa và giải thuật một ký tự bao gồm số thiết bị tự là I sẽ được biểu diễn như sau:

a. Mã hóa : EK(i) = (i+k) mod Nb. Giải thuật : DK(i) = (i-k) thủ thuật N

Trong đó:N = 26 trường hợp hệ mã Caesar áp dụng trên bảng vần âm tiếng Anh (nếu áp dụng trên bảng chữ cái khác thì N sẽ thay đổi).k : khớp ứng với số đồ vật tự chữ cái trong bảng mã (ví dụ : a = 0, b = 1 ....)

Xét lấy ví dụ sau:Cho bản rõ : TOIYEUVIETNAM Khóa k = 4

Tìm bản mã ? Theo phương pháp thay vào ta vẫn có kết quả sau.

Xem thêm: Du Lịch Nam Á Châu - Công Ty Cổ Phần Du Lịch Tm Quốc Tế Năm Châu

*

Vậy phiên bản mã là : YSMBYZWMIYREQ

Quá trình giải mã thì ngược lại với quy trình mã hóa.

Cài đặt

Mỗi ngôn ngữ khác nhau sẽ có cách setup khác nhau. Mình sẽ áp dụng Python để thiết đặt thuật toán:

Mặc định bạn có thể dụng bảng chữ cái Tiếng Anh tuy thế trong phần thiết đặt này. Để thực tiễn hơn. Mình sẽ áp dụng bảng mã tiếng Việt.

1. Bảng mã

key = "aáàạảãăắằặẳẵâấầậẩẫbcdđeéẹẻẽêếềệểễfghiíìịỉĩjklmnoóòọỏõôốồộổỗơớờợởỡpqrstuúùụủũưứừựửữvwxyýỳỵỷỹAÁÀẠẢÃĂẮẰẶẲẴÂẤẦẬẨẪBCDĐEÉẸẺẼÊẾỀỆỂỄFGHIÍÌỊỈĨJKLMNOÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠPQRSTUÚÙỤỦŨƯỨỪỰỬỮVWXYÝỲỴỶỸ0123456789`#$%^&*()"1. Hàm mã hóadef encrypt(self, n, plaintext): """Encrypt the string and return the ciphertext""" result = "" for l in plaintext: try: i = (self.key.index(l) + n) % len(self.key) result += self.key except ValueError: result += l return resultNếu sẽ đọc xong đống lý thuyết trên thì chắc chắn hẳn bạn sẽ không chạm mặt khó khăn gì trong đoạn code thiết đặt trên:

Mã hóa : EK(i) = (i+k) thủ thuật N

Trong đó:

self.key.index(l) : khớp ứng với in: tương xứng với khóa klen(self.key): tương xứng với độ dài của bản mã.2. Hàm giải mã

def decrypt(self, n, ciphertext): """Decrypt the string & return the plaintext""" result = "" for l in ciphertext: try: i = (self.key.index(l) - n) % len(self.key) result += self.key except ValueError: result += l return resultÁp dụng với công thực giải mã. Ta cũng trở nên viết được hàm tương tự.

3. Hotline hàm

def show_result(self, plaintext, n): """Generate a resulting cipher with elements shown""" encrypted = self.encrypt(n, plaintext) decrypted = self.decrypt(n, encrypted) print("Rotation: ", n) print("Plaintext: ", plaintext) print("Encrytped: ", encrypted) print("Decrytped: ", decrypted)

Tài liệu

Đến đây bài viết phần đầu về mã hóa cũng kết thúc. ước ao rằng anh chị em chớ gạch đã những quá. Và gửi ra hồ hết góp ý nhiều hơn nữa để em rất có thể vững vai trung phong trong quá trình khám phá các hệ mã hóa .

Mọi bạn nếu lười thiết đặt cũng rất có thể tham khảo liên kết github bài em đã làm sẵn. Chỉ câu hỏi kéo về và chạy https://github.com/tuanquanghpvn/cipher