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ã Affine cipher chưa biết khóa

    Mã Affine là dạng tổng quát hóa của mã Caesar: mỗi chữ cái bản rõ (chỉ số ppp, A=0,...,Z=25) được mã hóa bằng công thức c=(a⋅p+b) mod 26c = (a \cdot p + b) \bmod 26c=(a⋅p+b)mod26, với khóa gồm hai số nguyên (a,b)(a, b)(a,b), 0≤b≤250 \le b \le 250≤b≤25 và aaa phải nguyên tố cùng nhau với 262626 (tức gcd⁡(a,26)=1\gcd(a, 26) = 1gcd(a,26)=1) để phép mã hóa khả nghịch. Có đúng 121212 giá trị aaa hợp lệ trong khoảng [1,25][1, 25][1,25]: {1,3,5,7,9,11,15,17,19,21,23,25}\{1,3,5,7,9,11,15,17,19,21,23,25\}{1,3,5,7,9,11,15,17,19,21,23,25}.

    Công thức giải mã: p=a−1(c−b) mod 26p = a^{-1} (c - b) \bmod 26p=a−1(c−b)mod26, trong đó a−1a^{-1}a−1 là nghịch đảo modulo 262626 của aaa.

    Bạn thu được một bản mã Affine nhưng không biết cặp khóa (a,b)(a, b)(a,b) đã dùng. Biết rằng flag gốc luôn bắt đầu bằng CTF{ và kết thúc bằng }. Vì chỉ có 12×26=31212 \times 26 = 31212×26=312 khả năng khóa, hãy vét cạn (brute-force) toàn bộ để tìm ra cặp khóa đúng và khôi phục flag. Ký tự không phải chữ in hoa A-Z (số, {, }, _, khoảng trắng) giữ nguyên qua cả mã hóa lẫn giải mã.

    Ví dụ: với bản mã LKU{F}, cặp khóa đúng là (a,b)=(3,5)(a,b)=(3,5)(a,b)=(3,5) và flag giải mã được là CTF{A}.

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

      Một dòng duy nhất: chuỗi bản mã, gồm chữ in hoa A-Z, chữ số, dấu {, }, _ và khoảng trắng.

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

      In ra một dòng duy nhất là flag đã giải mã được (dạng CTF{...}).

    Ví dụ:

    Đầu vào:

    SZH{IHHWVC_SWFRCP}

    Đầu ra:

    CTF{AFFINE_CIPHER}
    

    Đầu vào:

    RGM{DMMHQF_KDZHRZ}

    Đầu ra:

    CTF{AFFINE_BASICS}
    

    Đang tải editor...