MẬT MÃ CAESAR

  -  
Những tiếng giảng đầy vai trung phong huyết của các thầy cô đã giúp các bạn học sinh xúc tiếp với lập trình sẵn một cách sâu sắc và tiện lợi hơn. Cụ nhưng, chúng ta không thể thành thạo kỹ năng mới nếu họ không code nữa, code mãi. Cũng chính vì vậy, hãy cùng STEAM for Vietnam tiếp tục tìm hiểu dự án “Mã hóa Caesar” rất là thú vị của doanh nghiệp Nguyễn Đức Hoàng (tài khoản là Hoangesc), học viên khóa CS 101 Summer 2021 nhé!



Mã hóa Caesar là gì?

Mã hoá là phương thức để biến thông tin (hình ảnh, văn bản) từ định dạng bình thường sang dạng thông tin mà họ không thể phát âm được nếu không có phương tiện giải mã. Đồng thời, mã hoá tất cả vai trò đặc biệt quan trọng trong thanh toán giao dịch điện tử để đảm bảo độ bảo mật, toàn vẹn của thông tin khi truyền bên trên mạng. Thông thường, mã hóa được áp dụng nhiều trong các ví năng lượng điện tử thân thuộc với chúng ta như Momo, Zalopay, Shopee Pay….Trái lại, lời giải là quá trình ngược của mã hoá, biến thông tin từ dạng được mã hoá về dạng thông tin ban đầu.

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

Mật mã Caesar là 1 trong dạng mật mã thế thế, trong các số ấy mỗi ký tự sống văn bản ban sơ sẽ được sửa chữa bằng một cam kết tự khác, bao gồm vị trí cách nó một khoảng xác định trong bảng chữ cái. Cũng tương tự các loại mật mã sửa chữa thay thế khác, mật mã Caesar rất dễ bị phá giải. Mặc dù nhiên đây là một việc hay để bọn họ áp dụng kỹ năng đã học về “vòng lặp” cùng “mảng” ở bài bác 3 của khoá CS 101. Thử tưởng tượng các bạn có nhu cầu kể một câu chuyện kín đáo cho người đồng bọn của mình. Để bảo mật mẩu truyện riêng tư không trở nên lộ ra ngoài, họ cần mã hóa câu chuyện và gửi cho chính mình mình kèm với phương thức giải mã. Biện pháp làm này rất là thú vị đề xuất không nào!

Người đã sáng tạo ra biện pháp mã hóa Caesar thú vị là vị nhà vua Julius Caesar. Chuyên môn này đang được trở nên tân tiến vào khoảng chừng năm 100 Trước Công nguyên. Nhà vua Caesar đã cần sử dụng nó nhằm gửi gần như mệnh lệnh quan trọng cho phần lớn tướng sĩ trên chiến trường. Vì đó, nếu lũ giặc tất cả bắt được người truyền tin thì cũng cấp thiết đọc và hiểu được văn bản của bức thư mã hóa đó. Kỹ năng và kiến thức này thiệt sự rất hữu dụng và được áp dụng cho tới ngày hôm nay.

*
Kiến thức lập trình:

Một số kiến thức chúng ta đã được học tập ở bài xích 3 của khoá CS 101 đang được áp dụng để xong xuôi chương trình mã hoá này:

Mảng và giải pháp lấy thành phần của mảng vào Python.Vòng lặp for cùng while trong Python.Câu lệnh input() nhằm nhập dữ liệu trong Python.Câu lệnh print() để in thông báo ra màn hình.Kiểu tài liệu boolean trong Python với so sánh ==.Bài toán:

Chúng ta sẽ thực hiện Thonny để thành lập một chương trình vừa góp mã hoá, vừa giúp giải thuật Caesar. Lịch trình sẽ cho tất cả những người dùng nhập một câu ý muốn mã hoá và số cam kết tự muốn di chuyển trong bảng vần âm (k). Số k dương sẽ dịch rời văn bản sang phải (theo thứ tự tự A sang Z). Số k âm sẽ dịch rời văn phiên bản sang trái (theo máy tự từ bỏ Z quý phái A).

Ví dụ 1:

Văn phiên bản gốc (Văn phiên bản chưa mã hóa): ABCDEF

Văn phiên bản mã hóa: CDEFGH

Trong lấy ví dụ như trên, những kí tự trong văn bạn dạng gốc được mã hóa bằng cách dịch sang buộc phải 2 kí tự. k=2.

GốcABCDEFXYZ
Mã hóaCDEFGHZAB

Vì được dịch sang cần 2 ký kết tự yêu cầu A được mã hóa thành C, B mã hóa thành D… Đặc biệt, Y được mã trở thành A, Z được mã hóa thành B, con quay lại các ký từ bỏ đầu tiên.

Ví dụ 2:

Văn bạn dạng gốc (Văn bản chưa mã hóa): ABCDEF

Văn bản mã hóa: YZABCD

Trong lấy ví dụ trên, những kí tự vào văn bản gốc được mã hóa bằng cách dịch lịch sự trái 2 kí tự. k=-2.

GốcABCDEFXYZ
Mã hóaYZABCDUVX

Vì được dịch sang trái 2 ký tự yêu cầu C được mã trở thành A, D mã biến thành B… Đặc biệt, A được mã biến thành Y, B được mã biến thành Z, tảo lại những ký tự cuối cùng.

Xem thêm: Cách Sử Dụng Điều Khiển Điều Hòa Panasonic Đúng Cách, Hướng Dẫn Sử Dụng Điều Khiển Điều Hòa Panasonic

Chúng ta rất có thể thấy rằng k âm là phương pháp giải mã cho mã hoá cùng với k dương và ngược lại.

Trước khi hợp tác vào lập trình, bạn có thể thử lịch trình để mã hoá và giải thuật Caesar: https://s4v.trinket.io/sites/caesar

Bắt tay vào lập trình thôi nào!!!

a. Thuật toán

Trước khi hợp tác vào viết code, bọn họ sẽ cùng lưu ý đến một thuật toán để giải quyết và xử lý bài toán này nhé. Bạn cũng có thể biểu diễn toàn bộ các ký tự vào bảng chữ cái bằng một mảng trong Python.

arr = <"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z">Mảng arr 26 phần tử. Với một cam kết tự bất kỳ, chúng ta cũng có thể tìm được địa điểm (index) i của nó vào mảng. Cho nên vì vậy khi dịch rời ký tự kia sang nên k kí tự, vị trí new sẽ là i + k. Nếu di chuyển ký tự đó sang trái k kí tự thì lúc đó k arr = <"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z">tiep = "y"while tiep == "y": tiep = input("Nhập y để tiếp tục hoặc n để thoát: ")Trong vòng lặp while, họ sẽ thực hiện câu lệnh input()để yêu cầu người tiêu dùng nhập câu đề xuất mã hóa cùng số cam kết tự muốn dịch chuyển. Chúng ta cần tạo đổi mới để lưu giữ chuỗi sau thời điểm được mã hoá:

plaintext = str(input("Bạn hãy nhập câu mong muốn mã hoá: ")).upper()jump = int(input("Bạn mong dịch lịch sự mấy ký kết tự? "))t = "" Để đối chọi giản, bọn họ sẽ thực hiện câu lệnh .upper() để in hoa tất cả các ký kết tự vào câu người tiêu dùng nhập vào. Code hoàn hảo sẽ là:

arr = <"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z">tiep = "y"while tiep == "y": plaintext = str(input("Bạn hãy nhập câu mong mã hoá: ")).upper() jump = int(input("Bạn mong mỏi dịch sang mấy ký kết tự? ")) t = "" tiep = input("Nhập y để liên tục hoặc n nhằm thoát: ") Bước 2: Xác định vị trí của ký kết tự vào mảng arr:

Một câu được biểu diễn bằng kiểu tài liệu chuỗi (string) trong Python. Chúng ta đã được học tập ở bài xích 3, một chuỗi là một trong những mảng mà phần tử là những ký tự trong chuỗi. Ví dụ: chuỗi “STEAM” là 1 mảng gồm 5 thành phần “S”, “T”, “E”, “A”, “M”. Như vậy để lấy các ký kết tự tự chuỗi, bạn có thể sử dụng vòng lặp for:

for character in plaintext: print(character)Chúng ta có thể sử dụng câu lệnh print để debug. Trong khoảng lặp for, để lấy ra vị trí của ký tự nghỉ ngơi trong mảng arr, bọn họ sử dụng thêm vòng lặp while với thay đổi i để lưu địa điểm của ký kết tự vào mảng. Biến hóa i bắt đầu từ bỏ 0 và sẽ được cập nhật trong vòng lặp để đi mang lại vị trí mới trong mảng arr. Họ sử dụng câu lệnh if để đánh giá xem phần tử ở địa chỉ i trong mảng arr gồm giống với cam kết tự trong chuỗi không. Nếu như giống, bọn họ sẽ break. Chúng ta vẫn có thể sử dụng câu lệnh print để debug:

i = 0while i Code hoàn chỉnh sẽ là:

arr = <"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z">tiep = "y"while tiep == "y": plaintext = str(input("Bạn hãy nhập câu mong mỏi mã hoá: ")).upper() jump = int(input("Bạn mong mỏi dịch sang trọng mấy cam kết tự? ")) t = "" for character in plaintext: i = 0 while i Bước 3: Mã hoá ký kết tự:

Sau khi xác minh được địa chỉ i của một cam kết tự vào chuỗi, bọn họ sẽ áp dụng công thức tìm địa điểm mới tại vị trí thuật toán để xác minh ký tự sau thời điểm mã hoá:

character_code = arrNgoài ra, họ sẽ thêm 1 trường hợp. Nếu ký kết tự là khoảng chừng trắng thì ký tự sau khoản thời gian mã hoá cũng trở nên là khoảng tầm trắng:

elif character == " ": character_code = " "Code hoàn chỉnh sẽ là:

arr = <"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z">tiep = "y"while tiep == "y": plaintext = str(input("Bạn hãy nhập câu ý muốn mã hoá: ")).upper() jump = int(input("Bạn mong dịch thanh lịch mấy ký kết tự? ")) t = "" for character in plaintext: i = 0 while i Bước 4: Kết nối các ký tự sau khoản thời gian mã hoá thành chuỗi:

Các ký kết tự vào chuỗi hoàn toàn có thể được xem như 1 chuỗi con. Để kết nối hai chuỗi thành một chuỗi, chúng ta sử dụng +:

t = t + character_codeỞ bước 1, họ đã áp dụng biến t để lưu câu sau khoản thời gian được mã hoá. Cuối cùng, bọn họ sẽ in ra câu sau khi được mã hoá:

print("Câu sau khi được mã hoá là: %s" % t)Chúng ta thực hiện %s nhằm thêm vào trong 1 biến có kiểu tài liệu chuỗi vào câu lệnh print. Dường như chúng ta đang thêm % cùng với tên biến.

5. Tada!!!

Như vậy, các bạn học sinh đã hoàn thành xong game giúp mã hoá và lời giải Caesar nhanh chóng rồi đấy. Tuy quy trình làm game ít nhiều khó khăn nhưng chắc chắn là thành quả của các bạn rất có lợi để vận dụng ngay trong cuộc sống. Chúng ta hoàn toàn rất có thể sử dụng chương trình này nhằm mã hoá ngay một câu đố cùng đem đến mọi tín đồ đau đầu giải mã.

Chương trình Python hoàn chỉnh của game sẽ là:

# -*- coding: utf-8 -*-arr = <"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z">tiep = "y"while tiep == "y": plaintext = str(input("Bạn hãy nhập câu ước ao mã hoá: ")).upper() jump = int(input("Bạn hy vọng dịch thanh lịch mấy ký kết tự? ")) t = "" for character in plaintext: i = 0 while i có không ít cách chúng ta có thể cải tiến trò chơi này. Chúng ta hãy nghĩ về một phương pháp nào đó chúng ta có thể loại vứt vòng lặp while sử dụng để trải qua các bộ phận trong mảng arr. Ko kể ra, các bạn cũng có thể cải tiến game bằng cách mã hoá cả chữ hoa và chữ thường, chứ không nhất thiết phải chuyển hết sang chữ hoa.

Không chỉ vậy, thầy Harry và thầy Đức bao gồm một nhắc nhở hữu ích cho chúng ta học sinh. Nếu họ còn nhớ trong bài Vui học cùng thầy cô 1, thầy Đức đã ra mắt cho bọn họ bảng mã ASCII. Vào bảng mã ASCII cũng có hai bảng chữ cái in hoa cùng in thường xuyên đấy. Bạn có thể chuyển một ký tự thanh lịch mã ASCII bằng câu lệnh ord() và chuyển từ mã ASCII về lại ký tự bởi câu lệnh chr(). Sau đó, chúng ta cũng có thể chuyển từ bỏ số trong bảng mã ASCII thành địa điểm của một phần tử trong mảng arr. Chúng ta hãy cùng thử nhé!

Một lưu ý nữa để cách tân game kia là bạn cũng có thể sử dụng phép toán % trong Python để tính số lần bọn họ đi hết mảng arr. Phép toán này giúp họ tìm số dư trong một phép chia. Ví dụ: 3 % 2 = 1.

Nhờ vận dụng ngay kỹ năng và kiến thức của bài xích 3 khoá CS 101, bạn Đức Hoàng đã tạo nên được trò chơi “Mã hóa Caesar” hết sức thú vị với thực tế. Các bạn học sinh cũng hãy thử hợp tác vào sáng tạo một game cho riêng mình nhé! Sau khi kết thúc game, các bạn có thể chia sẻ game của chính mình trên STEAMese Profile.

Xem thêm: 110 Phim Siêu Nhân Hay Nhất Ideas, Super Sentai Series

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi tức đầu tư 501(c)(3) được ra đời tại Hoa Kỳ với thiên chức thúc đẩy các vận động liên quan tới giáo dục và đào tạo STEAM (Science — Khoa học, technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và hoạt động và quản lý bởi đội hình tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp vắt giới.