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] Tấn công vét cạn Caesar bằng từ khóa đã biết (crib dragging)

    Vì mật mã Caesar chỉ có tối đa 26 khóa có thể (k=0,1,…,25k = 0, 1, \ldots, 25k=0,1,…,25), một cách phá mã đơn giản là thử vét cạn (brute-force) tất cả các khóa. Nếu kẻ tấn công biết trước một cụm từ khóa (gọi là crib) chắc chắn xuất hiện đâu đó trong bản rõ, họ có thể thử từng khóa kkk để giải mã toàn bộ bản mã, rồi kiểm tra xem cụm từ đó có xuất hiện như một xâu con của bản rõ vừa giải hay không.

    Cho xâu bản mã CCC (chỉ gồm chữ in hoa A-Z, không chứa khoảng trắng) và một cụm từ khóa WWW (chỉ gồm chữ in hoa A-Z) được biết chắc chắn xuất hiện là xâu con liên tiếp trong bản rõ, hãy tìm khóa kkk nhỏ nhất trong khoảng [0,25][0, 25][0,25] sao cho khi giải mã CCC với khóa kkk, cụm từ WWW xuất hiện là xâu con của bản rõ thu được. Nếu không tồn tại khóa nào thỏa mãn, in ra "IMPOSSIBLE".

    Ví dụ: C=C = C= "DWWDFNDWGDZQ", W=W = W= "ATTACK". Thử k=3k=3k=3: giải mã được "ATTACKATDAWN", chứa "ATTACK" ⇒\Rightarrow⇒ đáp án là k=3k=3k=3 và bản rõ "ATTACKATDAWN".

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

      Dòng 1: xâu bản mã CCC chỉ gồm chữ in hoa A-Z, độ dài từ 111 đến 200020002000. Dòng 2: cụm từ khóa WWW chỉ gồm chữ in hoa A-Z, độ dài từ 111 đến 505050.

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

      Nếu tồn tại khóa thỏa mãn: in ra 2 dòng — dòng 1 là khóa kkk nhỏ nhất tìm được, dòng 2 là bản rõ đầy đủ tương ứng với khóa đó. Nếu không tồn tại khóa nào thỏa mãn: in ra đúng một dòng "IMPOSSIBLE" (không có dấu ngoặc kép).

    Ví dụ:

    Đầu vào:

    HELLO
    ABCDEFGHIJ

    Đầu ra:

    IMPOSSIBLE
    

    Đầu vào:

    DWWDFNDWGDZQ
    ATTACK

    Đầu ra:

    3
    ATTACKATDAWN
    

    Đang tải editor...