Submit | All submissions | Best solutions | Back to list |
TAARR041 - Mã hóa thông tin bằng RC4 |
Ở bài trước (Thuật toán lập lịch khóa của hệ mật RC4) ta đã xác định được khóa K' khi biết khóa K.
Sau khi xác định được K' (là trạng thái cuối cùng của mảng S sau khi kết thúc thuật toán lập lịch khóa) trong RC4 có một thuật toán sinh số ngẫu nhiên để từ K' sinh ra một dãy các byte ngẫu nhiên ki. Mỗi một byte ki sẽ được sử dụng để mã hóa một byte pi trong bản rõ bằng phép XOR: ci = pi XOR ki. Thuật toán sinh số ngẫu nhiên như sau.
i := 0 j := 0 while GeneratingOutput: i := (i + 1) mod 256 j := (j + S[i]) mod 256 swap values of S[i] and S[j] k := S[(S[i] + S[j]) mod 256] output k endwhile
Hãy sử dụng kết quả của bài trước để thực hiện mã hóa một thông điệp được thể hiện dưới dạng một dãy byte.
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.
Dòng 3: plen - kích thước bản rõ (plaintext), plen <= 2.000.000
Dòng 4: Bản rõ plaintext được cho ở dạng số hexa, cách nhau bởi dấu cách
Output
Dòng 1: Bản rõ ban đầu
Dòng 2: Bản mã tương ứng
Example
Input: 10 ce 2d 2b 51 2d a2 59 5e 80 7a 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f Output: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 08 2b 8d a7 d0 62 e9 4e f6 27 2b ca 9b c0 f0 8e cb 9c 8a ea 02 12 a6 96 70 66 0f 48 1a 10
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 |
hide comments
2018-08-31 19:50:50
Mọi người ơi. Sao mà em bị lỗi phân đoạn vậy nè ( Vi phạm bộ nhớ không cho phép ). Mã code đây ạ. https://ideone.com/l68Z5w |