Mã hoá và giải mã Caesar cho tiếng Việt có dấu

Mọi người cho mình hỏi Mã hoá và giãi mã Ceasar như thế nào nếu đầu vào là tiếng việt có dấu

thì thay vì xài A-Za-z xài cái bảng này thôi

aAàÀảẢãÃáÁạẠăĂằẰẳẲẵẴắẮặẶâÂầẦẩẨẫẪấẤậẬbBcCdDđĐeEèÈẻẺẽẼéÉẹẸêÊềỀểỂễỄếẾệỆ
fFgGhHiIìÌỉỈĩĨíÍịỊjJkKlLmMnNoOòÒỏỎõÕóÓọỌôÔồỒổỔỗỖốỐộỘơƠờỜởỞỡỠớỚợỢpPqQrRsStTu
UùÙủỦũŨúÚụỤưƯừỪửỬữỮứỨựỰvVwWxXyYỳỲỷỶỹỸýÝỵỴzZ

map a \to 0, à \to1, ả \to 2 \dots :triumph:

1 Like

Tạo key như trên ntn vậy bạn, gõ tay hay code ntn vậy

code là

all_vn_chars = 'aAàÀảẢãÃáÁạẠăĂằẰẳẲẵẴắẮặẶâÂầẦẩẨẫẪấẤậẬbBcCdDđĐeEèÈẻẺẽẼéÉẹẸêÊềỀểỂễỄếẾệỆfFgGhHiIìÌỉỈĩĨíÍịỊjJkKlLmMnNoOòÒỏỎõÕóÓọỌôÔồỒổỔỗỖốỐộỘơƠờỜởỞỡỠớỚợỢpPqQrRsStTuUùÙủỦũŨúÚụỤưƯừỪửỬữỮứỨựỰvVwWxXyYỳỲỷỶỹỸýÝỵỴzZ'
vn_lowercase_char_to_int = {ch: i for i, ch in enumerate(all_vn_chars[::2])}
vn_uppercase_char_to_int = {ch: i for i, ch in enumerate(all_vn_chars[1::2])}

mã Ceasar hình như ko có in hoa in thường gì nhỉ :hocho:

Ý tôi là làm sao để có dc all_char_vn ấy b, gõ tay thủ công á

copy paste thôi chứ sao :clown_face:

à toy tìm ở đây này: https://vietunicode.sourceforge.net/charset/vietalphabet.html

2 Likes

giảng viên tôi bắt mã hoá caesar, affine tiếng việt, dùng unicode mà nó cũng ko theo thứ tự nữa

Convert string sang bytes rồi xử lí mã hoá. Khỏi lo tập kí tự là gì luôn

1 Like

là như thế nào nhỉ, t ko rõ lắm

Ví dụ cho đoạn text sau: Mã Hoá và Giải Mã
Convert sang mảng bytes với mã hóa utf-8 thì sẽ được mảng các số nguyên từ 0-255 như sau:
[77, 195, 163, 32, 72, 111, 195, 161, 32, 118, 195, 160, 32, 71, 105, 225, 186, 163, 105, 32, 77, 195, 163]
Thực hiện mã hóa Ceasar cho từng phần tử trong mảng bytes đó và lưu lại hoặc truyền đi đâu đó. Ở đầu nhận thực hiện ngược lại là ra chuỗi ban đầu thôi. Lúc này cho dù chuỗi ban đầu dùng tập kí tự là gì cũng không còn quan trọng nữa.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?