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] Sinh dòng khóa RC4

    RC4 là một mã dòng cổ điển gồm hai giai đoạn: khởi tạo hoán vị KSA (Key-Scheduling Algorithm) và sinh dòng khóa PRGA (Pseudo-Random Generation Algorithm), hoạt động trên mảng trạng thái SSS gồm 256 phần tử {0,…,255}\{0,\ldots,255\}{0,…,255}.

    KSA: khởi tạo S[i]=iS[i] = iS[i]=i với i=0,…,255i = 0,\ldots,255i=0,…,255; đặt j=0j=0j=0; với iii từ 000 đến 255255255: j←(j+S[i]+K[i mod ∣K∣]) mod 256j \leftarrow (j + S[i] + K[i \bmod |K|]) \bmod 256j←(j+S[i]+K[imod∣K∣])mod256, sau đó hoán đổi S[i]S[i]S[i] và S[j]S[j]S[j] (với KKK là khóa, biểu diễn bằng mảng byte).

    PRGA: đặt i=0,j=0i=0, j=0i=0,j=0; để sinh mỗi byte dòng khóa: i←(i+1) mod 256i \leftarrow (i+1)\bmod 256i←(i+1)mod256; j←(j+S[i]) mod 256j \leftarrow (j+S[i])\bmod 256j←(j+S[i])mod256; hoán đổi S[i]S[i]S[i] và S[j]S[j]S[j]; byte dòng khóa là S[(S[i]+S[j]) mod 256]S[(S[i]+S[j])\bmod 256]S[(S[i]+S[j])mod256].

    Cho khóa KKK (dạng hex) và số nguyên nnn, hãy in ra nnn byte đầu tiên của dòng khóa RC4, dạng hex in hoa.

    Ví dụ: khóa hex 4b6579 (chuỗi ASCII "Key"), n=9n=9n=9 cho dòng khóa EB9F7781B734CA72A7 (đây là ví dụ kinh điển được dùng để kiểm chứng cài đặt RC4).

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

      Một dòng duy nhất gồm hai giá trị cách nhau bởi khoảng trắng: chuỗi hex của khóa KKK (số chữ số hex chẵn, độ dài khóa từ 1 đến 256 byte) và số nguyên nnn (0≤n≤5000 \le n \le 5000≤n≤500).

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

      In ra một dòng là nnn byte dòng khóa dạng hex in hoa, nối liền nhau (độ dài 2n2n2n ký tự). Nếu n=0n=0n=0, in ra dòng trống.

    Ví dụ:

    Đầu vào:

    4b6579 0
    

    Đầu ra:

    
    

    Đầu vào:

    4b6579 9
    

    Đầu ra:

    EB9F7781B734CA72A7
    

    Đang tải editor...