Problem hidden
This problem was hidden by Editorial Board member probably because it has incorrect language version or invalid test data, or description of the problem is not clear.

TAARR040 - Thuật toán lập lịch khóa của hệ mật RC4

Mật mã gồm 2 nhóm lớn là mật mã đối xứng và mật mã khóa công khai. Mật mã đối xứng lại được phân thành mã khối và mã dòng. Thành phần quan trọng hàng đầu trong mật mã là khóa mật mã. Trong mật mã đối xứng, khóa mật mã là một chuỗi byte ngẫu nhiên K có độ dài khác nhau, tùy thuộc vào từng thuật toán mật mã.
Trong quá trình hoạt động của hệ mật, trước khi dữ liệu được mã hóa, có một pha làm việc gọi là “lập lịch khóa” (Key Scheduling), trong đó, khóa K sẽ được biến đổi để thu được một (hoặc một bộ) khóa K’.
RC4 là một thuật toán mã dòng mà hiện nay (https://en.wikipedia.org/wiki/RC4) vẫn được sử dụng khá phổ biến. Trong RC4, khóa K là một dãy byte có độ dài tùy chọn từ 8-256 byte. Thuật toán lập lịch khóa trong RC4 sẽ biến đổi khóa K thành K’ có độ dài cố định 256 byte như sau:
1. Khởi tạo một mảng S gồm 256 phần tử. Phần tử thứ i nhận giá trị là i.
2. Xáo trộn mảng S theo giá trị của khóa K:

j:=0;
for i from 0 to 255 
     j:=(j+S[i]+key[i  mod  keylength]) mod 256; 
     swap(S[i], S[j]);
endfor;

Trạng thái cuối cùng của mảng S thu được chính là khóa K'.

Input

Dòng 1: klen - kích thước khóa K, tính bằng byte, 8 <= klen <= 256
Dòng 2: Khóa K gồm klen byte ngẫu nhiên được cho ở dạng số hexa, cách nhau bởi dấu cách.

Output

Kết quả lập lịch khóa RC4 ứng với khóa K gồm 256 byte, mỗi dòng gồm 16 byte, mỗi byte được in ở dạng số hexa với đủ 2 digit.

Example

Input:
20
5b 55 dc 15 6f 04 49 9a ba d4 07 1b 4a 2a 34 4a d9 69 f5 ca 

Output:
5b b1 12 0e a6 45 72 13 e3 24 a3 ac 73 60 27 29 
fa a1 5c d8 4c 70 05 41 22 5d d1 a0 8b 09 9c 01 
9f 2d c8 20 9d 8f ae 90 66 63 84 8d af c2 ed 61 
6d 40 00 1d 04 86 2c 8a 82 74 2b 58 c0 21 d2 bc 
6b b0 06 ee 51 23 48 b4 89 4d 4e 6e ea 5a 8c 0f 
49 d7 62 ba 7d 53 88 f2 7a 44 14 6c 83 99 1c f8 
67 df 94 11 15 cf 43 30 96 a4 ca cd 3c de fe f1 
ab 3f a5 37 b2 d0 0b 18 3e 46 bf 64 1e e9 e7 3d 
1f dc ce 79 16 56 9e f5 d9 6f aa ad c5 a8 42 91 
10 0a 2e b9 fc e1 71 32 98 e5 cc 33 d3 38 b7 08 
c6 8e f9 c3 e2 da fb 5e bb d6 c7 2f 54 c1 a9 f0 
e0 76 26 dd ef 57 7c ff a7 50 28 03 80 55 17 f3 
fd 7b 81 52 b6 36 7e 07 e8 be 35 d4 b3 31 c9 eb 
1b 97 3b 92 4b 77 78 ec 9a 85 2a f4 b8 75 5f 4f 
b5 cb bd d5 02 db 68 59 f7 c4 93 a2 87 0d e4 7f 
19 3a 6a 9b e6 4a 65 69 95 25 34 1a f6 47 0c 39 

Added by:Nguyễn Tuấn Anh
Date:2017-10-13
Time limit:1s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:C

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.