Xin chào, đây là bài viết đầu trong loạt bài hướng dẫn môn an toàn bảo mật thông tin của mình. Ở bài này, mình sẽ hướng dẫn bạn phân tích và viết ứng dụng mã hóa bằng C#
Phân tích
Về thuật toán mã hóa Caesar, bạn có thể đọc thêm ở đây. Hiểu đơn giản thuật toán sẽ thay thế các chữ cái bằng cách dịch nó đi k vị trí trong bảng chữ cái.
Bảng chữ cái tiếng anh có 26 chữ cái, vì vậy số phép thay thế sẽ là 26 (tính cả trường hợp giữ nguyên)
Thiết kế giải thuật
Mã ASCII ‘A’ = 65, ‘Z’ = 90, ‘a’ = 97, ‘z’ = 122
Mỗi kí tự sẽ dịch k vị trí (k là khóa), đến Z sẽ trở về A. Do vậy ta sẽ dùng phép chia dư để lấy ra vị trí sau khi dịch chuyển:
int vitri = (ascii + k) % 26 // ascii là mã ascii của kí tự
Có 2 cách để tính được mã Caear của kí tự:
Cách 1: Lưu mảng char các kí tự từ A đến Z, duyệt ra vị trí = kí tự hiện tại + k, lấy kí tự mảngchar[vị trí]
char[] arrChar = {'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' } int vitri = (ascii + k) % 26 // ascii là mã ascii của kí tự char kituSauMaHoa = arrChar[vitri];
Cách 2: Tính toán trực tiếp dựa vào mã ASCII
public char changeDigit(char digit, int k) { int ascii = (int)digit; char result; if (ascii >= 65 && ascii <= 90) { ascii = (ascii + k - 65) % 26 + 65; result = (char)ascii; return result; } else if (ascii >= 97 && ascii <= 122) { ascii = (ascii + k - 97) % 26 + 97; result = (char)ascii; return result; } else { return digit; } }
2 cách tương tự nhau. Cách 1 nếu trường hợp mã hóa file lớn thì có lẽ performent sẽ tốt hơn :))
Giải mã
Giải mã giống như bạn mã hóa với khóa k = 26 – k vậy. nên code giải mã đơn giản
Video code sẽ có sớm @@. Đợt này bận
Source code
Do bị mất laptop nên tớ mất hết code mấy phần này. Đi làm vài năm cũng quên khuấy đi mất @@. Vì thế nên tớ hiện ko còn source code.
Bạn nào code lại có thể comment share code bên dưới, tớ sẽ update lên bài viết để cho mọi người cùng tham khảo ạ ^^
anh ơi cho em xin đoạn code với tại em mới đầu đang tìm hiểu môn này em cảm ơn anh nhiu
ThíchThích
zzz. Đợt này tớ hơi bận nên ko vào blog nên ko biết bạn nhắn
ThíchThích
Cũng cho em xin code với, tại đang tập mà gõ không được
cảm ơn anh
qawe1981@gmail.com
ThíchThích
cho mình xin sou nhé thiennt20191@gmail.com
Thank!!!
ThíchThích
Để tớ tìm lại xem sao 😀
ThíchThích
Bài viết về mã Caesar của bạn rất hữu ích. Có thể cho mình xin phần source code đầy đủ của phần này được không ạ. Cảm ơn bạn nhiều. Gmail của mình là: strymapkeyload@gmail.com
ThíchThích
Để tớ mò lại coi còn ko 😀
ThíchThích
Bài viết về mã Caesar của bạn rất hữu ích. Có thể cho mình xin phần source code đầy đủ của phần này được không ạ. Cảm ơn bạn nhiều. Gmail của mình là:leminhcong.sdcm@gmail.com
ThíchThích
Cảm ơn bạn đã quan tâm tới bài viết.
Bài này tớ viết lâu rùi, mà lại bị mất laptop nên cũng ko còn code nữa :((
Chắc hôm nào tớ viết lại rồi update lại bài viết. Cũng nhiều bạn hỏi :((
Thông cảm cho tớ nha.
ThíchThích
Có thể cho mình xin phần source code đầy đủ của phần này được không ạ. Cảm ơn bạn nhiều. Gmail của mình là: nguyenhieu1971999@gmail.com
ThíchThích