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 LFSR

    Áp dụng thanh ghi dịch phản hồi tuyến tính (LFSR) Fibonacci độ dài LLL (định nghĩa như bài "Sinh dãy bit từ LFSR": trạng thái LLL bit ở vị trí 1,…,L1,\ldots,L1,…,L; bit phản hồi mới là XOR các bit tại vị trí tap của trạng thái hiện tại; dịch trái, chèn bit phản hồi vào vị trí cuối) làm bộ sinh dòng khóa cho một mã dòng nhị phân.

    Cho bản rõ PPP (dạng hex, biểu diễn ∣P∣|P|∣P∣ byte, có thể rỗng), cần sinh ra 8×∣P∣8 \times |P|8×∣P∣ bit dòng khóa liên tiếp từ LFSR (bit đầu ra ở mỗi bước là bit tại vị trí 1 như đã định nghĩa). Đóng gói các bit này thành byte theo thứ tự MSB trước (8 bit liên tiếp đầu tiên tạo thành byte dòng khóa đầu tiên, bit sinh ra trước là bit cao nhất của byte).

    Bản mã CCC = XOR từng byte của PPP với byte dòng khóa tương ứng cùng vị trí.

    Hãy in ra bản mã CCC dạng hex in hoa.

    Ví dụ: P=P = P= 48656c6c6f (chuỗi "Hello"), L=4L=4L=4, seed=1000, tap={4,1}=\{4,1\}={4,1}: dòng khóa 40 bit đầu là 1000111101011001000111101011001000111101, đóng gói thành các byte 8F 59 1E B2 3D, XOR với 48 65 6C 6C 6F cho bản mã C73C72DE52.

    • Định dạng đầu vào:
      • Dòng 1: chuỗi hex của bản rõ PPP (có thể là dòng trống nếu PPP rỗng; số chữ số hex chẵn, tối đa 4000 ký tự hex).
      • Dòng 2: số nguyên LLL (1≤L≤321 \le L \le 321≤L≤32).
      • Dòng 3: chuỗi seed gồm đúng LLL ký tự 0/1.
      • Dòng 4: số nguyên kkk (1≤k≤L1 \le k \le L1≤k≤L).
      • Dòng 5: kkk số nguyên phân biệt trong [1,L][1, L][1,L] — các vị trí tap.
    • Định dạng đầu ra:

      In ra một dòng là bản mã CCC dạng hex in hoa, cùng độ dài (số chữ số hex) với PPP. Nếu PPP rỗng, in ra dòng trống.

    Ví dụ:

    Đầu vào:

    48656c6c6f
    4
    1000
    2
    4 1
    

    Đầu ra:

    C73C72DE52
    

    Đầu vào:

    
    4
    1000
    2
    4 1
    

    Đầu ra:

    
    

    Đang tải editor...