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] Thám mã Vigenère bằng phân tích tần suất

    Giả sử đã biết (hoặc ước lượng được từ bước Kasiski) độ dài khóa LLL của một bản mã Vigenère CCC. Một kỹ thuật thám mã tiếp theo là phân tích tần suất theo từng cột: chia các ký tự của CCC thành LLL cột, cột thứ jjj (0≤j<L0 \le j < L0≤j<L) gồm các ký tự ở vị trí j,j+L,j+2L,…j, j+L, j+2L, \dotsj,j+L,j+2L,… (vị trí đánh số từ 0). Trong tiếng Anh, chữ cái E là chữ xuất hiện phổ biến nhất; bài toán này giả định (đơn giản hóa) rằng chữ cái xuất hiện nhiều nhất trong mỗi cột của bản mã tương ứng với chữ E trong bản rõ ở cùng cột đó.

    Cho bản mã CCC (chữ in hoa A-Z, không khoảng trắng) và độ dài khóa LLL (1≤L≤∣C∣1 \le L \le |C|1≤L≤∣C∣). Với mỗi cột jjj từ 000 đến L−1L-1L−1:

    • Đếm tần suất xuất hiện của từng chữ cái A-Z trong cột đó.
    • Xác định chữ cái MjM_jMj​ có tần suất cao nhất; nếu có nhiều chữ cùng đạt tần suất cao nhất, chọn chữ có thứ tự bảng chữ cái nhỏ nhất (gần A nhất).
    • Đánh số các chữ cái A=0, ..., Z=25 và E=4. Ký tự khóa của cột jjj là Kj=(Mj−4) mod 26K_j = (M_j - 4) \bmod 26Kj​=(Mj​−4)mod26 (dịch chuyển sao cho MjM_jMj​ giải mã đúng ra chữ E).

    Sau khi xác định được khóa K=K0K1…KL−1K = K_0 K_1 \dots K_{L-1}K=K0​K1​…KL−1​, hãy giải mã toàn bộ CCC bằng khóa này theo công thức Vigenère chuẩn (khóa lặp tuần hoàn theo chu kỳ LLL).

    Ví dụ: C=C=C= XYZXYZXYZ, L=3L=3L=3. Cột 0 toàn chữ X → M0=M_0=M0​=X (chỉ số 23), K0=(23−4) mod 26=19K_0=(23-4)\bmod26=19K0​=(23−4)mod26=19 → chữ T. Tương tự cột 1 toàn Y → K1=K_1=K1​=U; cột 2 toàn Z → K2=K_2=K2​=V. Khóa tìm được là TUV. Giải mã: mỗi ký tự trừ đi khóa tương ứng của cột đều cho kết quả E, vậy bản rõ là EEEEEEEEE.

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

      Dòng 1: chuỗi bản mã CCC (1≤∣C∣≤20001 \le |C| \le 20001≤∣C∣≤2000), chỉ gồm chữ in hoa A-Z. Dòng 2: số nguyên LLL (1≤L≤∣C∣1 \le L \le |C|1≤L≤∣C∣) — độ dài khóa.

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

      Dòng 1: chuỗi khóa KKK tìm được (LLL chữ in hoa A-Z). Dòng 2: chuỗi bản rõ giải mã được (cùng độ dài với CCC).

    Ví dụ:

    Đầu vào:

    XYZXYZXYZ
    3
    

    Đầu ra:

    TUV
    EEEEEEEEE
    

    Đầu vào:

    AAAAA
    1
    

    Đầu ra:

    W
    EEEEE
    

    Đang tải editor...