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] Kasiski Examination - Ước lượng độ dài khóa

    Phương pháp Kasiski Examination dùng để ước lượng độ dài khóa của mật mã Vigenère, dựa trên quan sát: nếu một cụm ký tự trong bản rõ trùng lặp và khoảng cách giữa hai lần xuất hiện là bội số của độ dài khóa, thì cụm ký tự tương ứng trong bản mã cũng sẽ trùng lặp.

    Cụ thể, thực hiện các bước sau trên bản mã:

    1. Chuẩn hóa bản mã: chỉ giữ chữ cái A…ZA \ldots ZA…Z, viết hoa, được chuỗi SSS độ dài NNN.
    2. Với mỗi vị trí iii từ 000 đến N−3N-3N−3 (đánh số từ 0), xét trigram (chuỗi con độ dài 3) S[i…i+2]S[i \ldots i+2]S[i…i+2].
    3. Với mỗi giá trị trigram xuất hiện tại từ 2 vị trí trở lên, xét các khoảng cách giữa các lần xuất hiện liên tiếp của trigram đó (vị trí xuất hiện sau trừ vị trí xuất hiện ngay trước, theo thứ tự vị trí tăng dần) — không xét khoảng cách giữa các lần xuất hiện không liền kề nhau.
    4. Gộp tất cả các khoảng cách thu được từ mọi trigram (có thể có giá trị trùng nhau) thành một tập hợp (đa tập) các khoảng cách. Tính g=gcd⁡g = \gcdg=gcd của toàn bộ các khoảng cách đó.

    Nếu không tồn tại trigram nào lặp lại (tập khoảng cách rỗng), in ra undefined. Ngược lại, in ra giá trị ggg — đây chính là ước lượng độ dài khóa theo phương pháp Kasiski.

    Ví dụ: với bản mã ABCXYZABCPQRABC, trigram ABC xuất hiện tại các vị trí 0,6,120, 6, 120,6,12. Các khoảng cách liên tiếp là 6−0=66-0=66−0=6 và 12−6=612-6=612−6=6. Không trigram nào khác lặp lại. Vậy g=gcd⁡(6,6)=6g = \gcd(6,6) = 6g=gcd(6,6)=6.

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

      Một dòng duy nhất là bản mã (chuỗi in hoa A…ZA \ldots ZA…Z), độ dài từ 1 đến 3000.

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

      In ra giá trị ggg (số nguyên) nếu tồn tại trigram lặp lại, ngược lại in undefined.

    Ví dụ:

    Đầu vào:

    AB

    Đầu ra:

    undefined
    

    Đầu vào:

    ABCDEFGHIJK

    Đầu ra:

    undefined
    

    Đang tải editor...