C # рдореЗрдВ RC4 рдХрд╛ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

RC4

рдкрд░рд┐рдЪрдп



рдПрдХ рд╕рдордп рдореЗрдВ рдореИрдВрдиреЗ рд░рдиреЗрдЯ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдкреНрд░рд╕рд┐рджреНрдз MMORPG рдЦреЗрд▓рд╛ рдерд╛ред рдЙрд╕ рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрдж рд╣реА рдЧреЗрдордкреНрд▓реЗ рдиреЗ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реАрдЦрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА рдХрд┐ рдЦреЗрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЧреИрдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдХреБрдЯрд┐рд▓ рдмреЙрдЯ рдерд╛ рдЬреЛ C # рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдореЙрдмреНрд╕ рдХреЛ рд╣рд░рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдЬрд▓реНрджреА рд╕реЗ рдирд┐рд░реНрдмрд╛рдз рд╣реЛ рдЧрдпрд╛ред рдЙрд╕ рд╕рдордп рддрдХ, рдореИрдВ рд╣реИрдХрд┐рдВрдЧ рдЧреЗрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдордВрдЪ рдкрд░ рдЖрдпрд╛ рдФрд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдХ рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд╛ рд╡рд┐рд╖рдп рдЬрд┐рд╕рдиреЗ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдЧреЗрдо рдХреЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реБрдИ рдФрд░ рдореИрдВрдиреЗ рдЙрдирдХреА рдЙрдкрд▓рдмреНрдзрд┐ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



Wireshark рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рдореБрдЭреЗ рдХрдИ рдбрдВрдк рдорд┐рд▓реЗ рдФрд░, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдЧреВрдВрдЧрд╛ рдерд╛ред рдпрд╣ рдЕрдм рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛ред рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЕрдиреБрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдкреЗрд╢реЗрд╡рд░ (рд╡рд┐рд╖рдп рд▓реЗрдЦрдХ) рдХреА рд╕рд▓рд╛рд╣ рд▓реЗрдиреЗ рдФрд░ рдЙрд╕реЗ рдПрдХ рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдкреВрдЫрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ RC4 рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреЗрдо рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛ рднреА рд╕рдВрдкреАрдбрд╝рд┐рдд рд╣реИ (рдЙрд╕ рд╕рдордп рдореЗрдВ рдЕрдзрд┐рдХ)ред рджрд┐рд╢рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рдереА рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ C # рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред







RC4 рдУрд╡рд░рд╡реНрдпреВ



рддреЛ, RC4 рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЦреБрд▓реЗ (рдЕрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб) тАЛтАЛрдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдХреБрдВрдЬреА рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдореЗрдВ рд╡рд░реНрдг рдХреА рд╕реНрдерд┐рддрд┐ред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



рдпрд╣ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореИрд╕рд╛рдЪреБрд╕реЗрдЯреНрд╕ рдЗрдВрд╕реНрдЯреАрдЯреНрдпреВрдЯ рдСрдл рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рдХреЗ рдкреНрд░реЛрдлреЗрд╕рд░, рд░реЛрдирд╛рд▓реНрдб рд░рд┐рд╡реЗрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо RC2, RC5, RC6, RSA рдФрд░ рд╣реИрд╢ MD2-MD6 рдХреА рд▓рд╛рдЗрди рдЬреИрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рднреА рджреЗрддреЗ рд╣реИрдВред



рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреНрдЮрд╛рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдирдИ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ RC4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдРрд╕реА рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг WEP, SSL, TLS рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ MMORPG рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред



рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо



рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА рд▓реЛрдЧ рд╕рдордЭреЗрдВ рдХрд┐ рдЖрд░рд╕реА 4 рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред



рддреЛ, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрдЧреАред рдпрд╣ рдХреЛрдИ рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ: рдЖрд╡рд╛рдЬ, рдЫрд╡рд┐, рдкрд╛рдаред рдмреЗрд╢рдХ, рд╕реВрдЪрдирд╛ рдПрдХ рдзрд╛рд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд▓рдВрдмреА рд╕рд░рдгреА рдирд╣реАрдВ рддреЛ рдПрдХ рдзрд╛рд░рд╛ рдХреНрдпрд╛ рд╣реИ?

рдХреБрдВрдЬреА рд░рд╣рд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреНрдпрд╛ рд╣реИ? рдХреБрдВрдЬреА рднреА рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред RC4 рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП, рдпрд╣ 8 рд╕реЗ 2048 рдмрд┐рдЯреНрд╕ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ 40 - 256 рдмрд┐рдЯреНрд╕ рдХреА рд░реЗрдВрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмреНрд▓реЙрдХ рдПрди рдХреЗ рдЖрдХрд╛рд░ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо n = 8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рднреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рд╣рдо n = 16 рд▓реЗрддреЗ рд╣реИрдВред рдлрд┐рд░ рдПрдХ рдХрджрдо рдореЗрдВ 2 рдмрд╛рдЗрдЯреНрд╕ рддреБрд░рдВрдд рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред



рд╕реНрдЯреНрд░реАрдо рд╕рд┐рдлрд░ рдХреЗ рд▓рд┐рдП рддрд╛рдХрдд рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЖрджрд░реНрд╢ рд╡рд┐рдХрд▓реНрдк рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЖрдХрд╛рд░ рд╣реИред рдлрд┐рд░, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рдмрд┐рдЯ рдХреЛ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП modulo-2 рдпреЛрдЧ (XOR) рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдВрдЬреА рдмрд┐рдЯ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕реА рдСрдкрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рд┐рджреНрдзрд╛рдВрдд

рдмрд╢рд░реНрддреЗ рдХрд┐ рдХреБрдВрдЬреА рдмрд┐рдЯ рдЕрдиреБрдХреНрд░рдо рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдЕрд╡рдзрд┐ рди рд╣реЛ, рд╕рд┐рдлрд░ рдХреЛ рдХреНрд░реИрдХ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд▓рдВрдмреА рдХреБрдВрдЬреА рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдВрдЬреА рдзрд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рдЕрдкрдиреА рдХреБрдВрдЬреА рдХреЛ рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп) рдФрд░ XOR рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред



рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реА # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рдХрдХреНрд╖рд╛ "RC4" рдмрдирд╛рдПрдБ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рджрд╕реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ:

byte [] S = new byte [256];

int x = 0;

int y = 0;








рдореБрдЦреНрдп рдзрд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд┐рдлрд░ рдПрдХ рдЫрд┐рдкреА рд╣реБрдИ рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:

- 0x00 рд╕реЗ 0xFF (рд╕рд░рдгреА рдПрд╕) рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдмрд╛рдЗрдЯ рд╡рд╛рд▓реЗ рдПрдХ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди ред

- рдХрд╛рдЙрдВрдЯрд░ рдЪрд░ x рдФрд░ yред



рдХреБрдВрдЬреА рд╕рджрд┐рд╢-рдХреНрд░рдо-рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рдЖрд░рдВрдн рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдВрдЬреА-рдирд┐рд░реНрдзрд╛рд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

private void init( byte [] key)

{

int keyLength = key.Length;



for ( int i = 0; i < 256; i++)

{

S[i] = ( byte )i;

}



int j = 0;

for ( int i = 0; i < 256; i++)

{

j = (j + S[i] + key[i % keyLength]) % 256;

S.Swap(i, j);

}

}






рдХреЛрдб рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрд╡реИрдк рд╡рд┐рдзрд┐ (рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕рд░рдгреА рдХреЗ рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрд╡реИрдк рдХрд░реЗрдВ) рд╕рд░рдгреА рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдорд╛рдирдХ рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреА рд╣реИ:

static class SwapExt

{

public static void Swap( this T[] array, int index1, int index2)

{

T temp = array[index1];

array[index1] = array[index2];

array[index2] = temp;

}

}








рдХреБрдВрдЬреА рдЬреНрдЮрд╛рдд рд╣реЛрдиреЗ рдкрд░ рдЗрдирдХреНрд░рд┐рдкреНрд╢рди рд╡рд┐рдзрд┐ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди / рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЗрд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

public RC4( byte [] key)

{

init(key);

}








рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдПрдХ рдЫрджреНрдо-рд░реИрдВрдбрдо рдЬреЗрдирд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЬрдирд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рд╡рд┐рдзрд┐ рдХреБрдВрдЬреА рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдЧрд▓реЗ рдмрд╛рдЗрдЯ рдХреЛ рдереВрдХ рджреЗрдЧреА, рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ xor'om рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

private byte keyItem()

{

x = (x + 1) % 256;

y = (y + S[x]) % 256;



S.Swap(x, y);



return S[(S[x] + S[y]) % 256];

}








рдЕрдм рд╕рдмрд╕реЗ рд╕рд░рд▓ рдмрдЪрд╛ рд╣реИ! рдЕрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рд░рдгреА / рд╕реНрдЯреНрд░реАрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдВрдЬреА рдмрд╛рдЗрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ xor (^) рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

public byte [] Encode( byte [] dataB, int size)

{

byte [] data = dataB.Take(size).ToArray();



byte [] cipher = new byte [data.Length];



for ( int m = 0; m < data.Length; m++)

{

cipher[m] = ( byte )(data[m] ^ keyItem());

}



return cipher;

}








рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ:

public byte [] Decode( byte [] dataB, int size)

{

return Encode(dataB, size);

}








рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

byte [] key = ASCIIEncoding.ASCII.GetBytes( "Key" );



RC4 encoder = new RC4(key);

string testString = "Plaintext" ;

byte [] testBytes = ASCIIEncoding.ASCII.GetBytes(testString);

byte [] result = encoder.Encode(testBytes, testBytes.Length);



RC4 decoder = new RC4(key);

byte [] decryptedBytes = decoder.Decode(result, result.Length);

string decryptedString = ASCIIEncoding.ASCII.GetString(decryptedBytes);








рдФрд░ рдпрд╣рд╛рдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

RC4 рдкрд░рд┐рдгрд╛рдо



рдпрд╛рддрд╛рдпрд╛рдд рдХреЛ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ, рд╣рдо рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреИрдХреЗрдЯ рдХреЗ рдХрд░реАрдм рдПрдХ рдХрджрдо рд╣реИрдВред



рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдХреНрд░реИрдХрд┐рдВрдЧ рдкреНрд░рддрд┐рд░реЛрдз рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЬрдЯрд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рд╕рд▓рд╛рд╣ рдФрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдорд┐рддреНрд░ рд╡реЛрд░реНрдЯ рдХреЛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред



рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ:

SourceForge - RC4.cs



All Articles