Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Phá mã Caesar bằng thống kê chi-bình phương

    Mật mã Caesar mã hóa bằng cách dịch mỗi chữ cái bản rõ đi kkk vị trí trong bảng chữ cái (0≤k≤250 \le k \le 250≤k≤25, kkk là khóa). Khi không biết khóa, ta có thể phá mã tự động bằng phân tích tần suất: với mỗi khóa ứng viên kkk, giải mã bản mã bằng cách dịch ngược kkk vị trí, rồi so sánh tần suất chữ cái của bản rõ ứng viên với bảng tần suất chuẩn của tiếng Anh bằng thống kê chi-bình phương:

    χ2(k)=∑i=AZ(Oi−Ei)2Ei\chi^2(k) = \sum_{i=A}^{Z} \frac{(O_i - E_i)^2}{E_i}χ2(k)=∑i=AZ​Ei​(Oi​−Ei​)2​

    trong đó OiO_iOi​ là số lần xuất hiện chữ cái iii trong bản rõ ứng viên (giải mã với khóa kkk), Ei=pi×NE_i = p_i \times NEi​=pi​×N với pip_ipi​ là tần suất chuẩn (đơn vị: tỉ lệ, lấy %\%% chia 100) của chữ cái iii trong tiếng Anh (bảng bên dưới), NNN là tổng số chữ cái trong bản mã. Khóa được chọn là khóa k∗k^*k∗ có χ2(k)\chi^2(k)χ2(k) nhỏ nhất; nếu có nhiều khóa cùng đạt giá trị nhỏ nhất, chọn khóa kkk nhỏ nhất trong số đó.

    Bảng tần suất chuẩn của các chữ cái tiếng Anh (%):

    Chữ Tần suất (%) Chữ Tần suất (%)
    A 8.167 N 6.749
    B 1.492 O 7.507
    C 2.782 P 1.929
    D 4.253 Q 0.095
    E 12.702 R 5.987
    F 2.228 S 6.327
    G 2.015 T 9.056
    H 6.094 U 2.758
    I 6.966 V 0.978
    J 0.153 W 2.360
    K 0.772 X 0.150
    L 4.025 Y 1.974
    M 2.406 Z 0.074

    Ví dụ: với bản mã YMJVZNHPGWTBSKTCOZRUXTAJWYMJQFEDITL (mã hóa từ câu THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG với khóa k=5k=5k=5), thuật toán trên tìm được khóa k∗=5k^*=5k∗=5 và bản rõ tương ứng chính là THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG.

    • Định dạng đầu vào:

      Một dòng duy nhất là bản mã CCC, chỉ gồm các chữ in hoa A…ZA \ldots ZA…Z (không có khoảng trắng hay ký tự khác), độ dài từ 1 đến 2000.

    • Định dạng đầu ra:

      In ra 2 dòng:

      • Dòng 1: khóa k∗k^*k∗ tìm được (một số nguyên từ 0 đến 25).
      • Dòng 2: bản rõ giải mã tương ứng với khóa k∗k^*k∗ (chuỗi in hoa cùng độ dài với CCC).

    Ví dụ:

    Đầu vào:

    KHOOR

    Đầu ra:

    14
    WTAAD
    

    Đầu vào:

    A

    Đầu ra:

    22
    E
    

    Đang tải editor...