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] Giải mã Vigenère giữ định dạng gốc

    Đây là bài toán ngược của phép mã hóa Vigenère giữ định dạng gốc: chỉ các ký tự chữ cái (A-Z, a-z) trong bản mã được giải mã, mọi ký tự không phải chữ cái (khoảng trắng, chữ số, dấu câu, ...) được giữ nguyên tại đúng vị trí và không tính vào dòng khóa. Chữ hoa/thường của ký tự đầu ra được giữ nguyên như ký tự đầu vào tại vị trí đó.

    Cho bản mã CCC và khóa KKK chỉ gồm chữ cái (không phân biệt hoa/thường, quy về chữ in hoa khi tính toán). Gọi b0,b1,…b_0, b_1, \dotsb0​,b1​,… là dãy các ký tự chữ cái của CCC theo đúng thứ tự xuất hiện. Ký tự chữ cái thứ jjj được giải mã bằng ký tự khóa Kj mod ∣K∣K_{j \bmod |K|}Kjmod∣K∣​ theo công thức Vigenère chuẩn (trừ theo giá trị không phân biệt hoa thường, rồi trả kết quả về đúng dạng hoa/thường của ký tự gốc trong bản mã). Các ký tự không phải chữ cái được chép nguyên vào đúng vị trí trong chuỗi kết quả.

    Ví dụ: C=C=C= Lxfopv ef Rnhr!, K=K=K= LEMON → bản rõ khôi phục được là Attack at Dawn!.

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

      Dòng 1: chuỗi bản mã CCC (1≤∣C∣≤20001 \le |C| \le 20001≤∣C∣≤2000) — có thể gồm chữ hoa, chữ thường, chữ số, dấu cách, dấu câu (dòng này có thể chứa khoảng trắng). Dòng 2: chuỗi khóa KKK (1≤∣K∣≤501 \le |K| \le 501≤∣K∣≤50), chỉ gồm chữ cái (hoa hoặc thường).

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

      Một dòng duy nhất: chuỗi bản rõ khôi phục được, cùng độ dài với CCC; các ký tự không phải chữ cái được giữ nguyên đúng vị trí; hoa/thường tại mỗi vị trí chữ cái được giữ giống như trong CCC.

    Ví dụ:

    Đầu vào:

    Lxfopv ef Rnhr!
    LEMON
    

    Đầu ra:

    Attack at Dawn!
    

    Đầu vào:

    a
    A
    

    Đầu ra:

    a
    

    Đang tải editor...