Header Ads

Mã hóa Caesar


Trong mật mã học, mật mã Caesar, còn gọi là mật mã dịch chuyển (hoặc "Xây-da"), là một trong những mật mã đơn giản và được biết đến nhiều nhất.

Mật mã là một dạng của mật mã thay thế, trong đó mỗi ký tự trong văn bản được thay thế bằng một ký tự cách nó một đoạn trong bảng chữ cái sau khi dịch chuyển k đơn vị để tạo thành bản mã.
Phương pháp này được đặt theo tên Caesar - vị hoàng đế sử dụng phương pháp này thường xuyên trong công việc của mình.

Bảng chữ cái Tiếng Anh

Bảng chữ cái Tiếng Anh gồm 26 chữ cái như sau:

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


Phương pháp mã hóa

- Bước 1: Đưa tất cả 26 chữ cái Tiếng Anh vào trong một vòng tròn.
- Bước 2: Khởi tạo giá trị cho K (K - số lần dịch chuyển)
- Bước 3: Để mã hóa một chữ cái thì ta dịch chuyển nó K đơn vị theo chiều kim đồng hồ.
- Bước 4: Sau khi mã hóa, ta thu về được một đoạn chuỗi là chuỗi mã hóa của chuỗi ban đầu.

Note Những ký tự ngoài bảng chữ cái thì ta giữ nguyên chúng


Ví dụ

Với k = 3
Chuỗi ban đầu ta có: TIN HOC SOC TRANG
Chuỗi sau khi mã hóa: WLQ KRF VRF WUDQJ


Chương trình mẫu

Function caesar(c: char; k: byte) : char;
var tmp : byte;
Begin
   if (upcase(c) in ['A'..'Z']) then
      Begin
        tmp := ord(upcase(c)) + k;
        if (tmp > 90) then tmp := tmp - 26;
        exit(char(tmp));
      End
    else exit(c);
End;
Mã nguồn đầy đủ »

Note Trên là mã nguồn Pascal, trong bảng mã ASCII, 'A' trong mã tương ứng số thập phân là 65 và 'Z' là 90.


Phương pháp giải mã

- Bước 1: Đưa tất cả 26 chữ cái Tiếng Anh vào trong một vòng tròn.
- Bước 2: Xác định số K, thường là đã biết trước
- Bước 3: Để giải mã một chữ cái thì ta dịch chuyển nó K đơn vị ngược chiều kim đồng hồ.
- Bước 4: Sau khi giải mã, ta thu về được một đoạn chuỗi là chuỗi giải mã của chuỗi ban đầu.

Ví dụ

Chuỗi ban đầu ta có: WLQ KRF VRF WUDQJ
Chuỗi sau khi giải mã: TIN HOC SOC TRANG


Chương trình mẫu

Function giaima(c: char; k: byte) : char;
var tmp : byte;
Begin
   if (upcase(c) in ['A'..'Z']) then
      Begin
        tmp := ord(upcase(c)) - k;
        if (tmp < 65) then tmp := tmp + 26;
        exit(char(tmp));
      End
    else exit(c);
End;
Mã nguồn đầy đủ »

Tổng kết

Cũng như các mật mã thay thế dùng một bảng mã khác, mã Xê da dễ dàng bị phá vỡ và không đáp ứng được yêu cầu an toàn thông tin trong truyền thông.
Thường dạng mã hóa này thường dùng ở độ bảo mật không cao, dành cho các bạn tìm hiểu đi dự thi các cuộc thi vòng tỉnh hay viết các chương trình nhỏ không đòi hỏi về độ bảo mật.

Không có nhận xét nào

Được tạo bởi Blogger.