Giả sử đã biết (hoặc ước lượng được từ bước Kasiski) độ dài khóa L của một bản mã Vigenère C. 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 C thành L cột, cột thứ j (0≤j<L) gồm các ký tự ở vị trí j,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ã C (chữ in hoa A-Z, không khoảng trắng) và độ dài khóa L (1≤L≤∣C∣). Với mỗi cột j từ 0 đến L−1:
Sau khi xác định được khóa K=K0K1…KL−1, hãy giải mã toàn bộ C 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ỳ L).
Ví dụ: C= XYZXYZXYZ, L=3. Cột 0 toàn chữ X → M0=X (chỉ số 23), K0=(23−4)mod26=19 → chữ T. Tương tự cột 1 toàn Y → K1=U; cột 2 toàn Z → 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.
Dòng 1: chuỗi bản mã C (1≤∣C∣≤2000), chỉ gồm chữ in hoa A-Z. Dòng 2: số nguyên L (1≤L≤∣C∣) — độ dài khóa.
Dòng 1: chuỗi khóa K tìm được (L chữ in hoa A-Z). Dòng 2: chuỗi bản rõ giải mã được (cùng độ dài với C).
Ví dụ:
Đầu vào:
XYZXYZXYZ
3
Đầu ra:
TUV
EEEEEEEEE
Đầu vào:
AAAAA
1
Đầu ra:
W
EEEEE
Đang tải editor...