[An toàn bảo mật thông tin] Hướng dẫn viết ứng dụng mã hóa Caesar trên C# bằng 2 cách

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)

caesar
Mã hóa Caesar với khóa k = 3

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 ạ ^^

Một suy nghĩ 10 thoughts on “[An toàn bảo mật thông tin] Hướng dẫn viết ứng dụng mã hóa Caesar trên C# bằng 2 cách

  1. 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í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ích

Bình luận về bài viết này