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] Mã hóa luồng bằng khóa lặp XOR

    Một dạng mã dòng đơn giản mã hóa bản rõ bằng cách XOR từng byte với các byte của một khóa ngắn được lặp lại tuần hoàn cho đến hết bản rõ (tương tự nguyên lý của mã Vigenère nhưng thực hiện trên bit/byte thay vì chữ cái).

    Cho bản rõ PPP (chuỗi ký tự ASCII, có thể chứa khoảng trắng, có thể rỗng) và khóa KKK (chuỗi ASCII khác rỗng, độ dài ∣K∣≤∣P∣|K| \le |P|∣K∣≤∣P∣ có thể nhỏ hơn nhiều so với ∣P∣|P|∣P∣). Bản mã CCC được tính như sau, với PiP_iPi​, KiK_iKi​ là mã ASCII (0–255) của ký tự thứ iii (đánh số từ 0):

    Ci=Pi⊕Ki mod ∣K∣C_i = P_i \oplus K_{i \bmod |K|}Ci​=Pi​⊕Kimod∣K∣​

    Hãy in ra bản mã CCC dưới dạng chuỗi hex, mỗi byte biểu diễn bằng đúng 2 chữ số hex in hoa, nối liền nhau theo đúng thứ tự byte của bản rõ.

    Ví dụ: P=P = P= HELLO, K=K = K= KEY. Ta có H(0x48)⊕K(0x4B)=0x03, E⊕E=0x00, L(0x4C)⊕Y(0x59)=0x15, L⊕K=0x07, O(0x4F)⊕E(0x45)=0x0A. Kết quả: 030015070A.

    • Định dạng đầu vào:
      • Dòng 1: bản rõ PPP (có thể là dòng trống nếu bản rõ rỗng; 0≤∣P∣≤20000 \le |P| \le 20000≤∣P∣≤2000).
      • Dòng 2: khóa KKK (chuỗi ASCII khác rỗng, 1≤∣K∣≤1001 \le |K| \le 1001≤∣K∣≤100).
    • Định dạng đầu ra:

      In ra một dòng là bản mã CCC dưới dạng hex in hoa (độ dài 2∣P∣2|P|2∣P∣ ký tự). Nếu PPP rỗng, in ra dòng trống.

    Ví dụ:

    Đầu vào:

    
    KEY
    

    Đầu ra:

    
    

    Đầu vào:

    HELLO
    KEY
    

    Đầu ra:

    030015070A
    

    Đang tải editor...