рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ - рдореБрдЭреЗ рдПрдХ рдФрд░ рдбреЗрдмрд┐рдЯ рдХрд╛рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдерд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдПрдХ рдФрд░ рдкрд┐рди рдХреЛрдб рд░рдЦреЗрдВред рд╡реНрдпрд╛рдореЛрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЦреБрд▓реЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЦреЛрдЬреЛрдВ рдХреЗ рдмрд╛рдж рдореИрдВ рдПрдИрдПрд╕ рдорд╛рдирдХ рдкрд░ рдмрд╕ рдЧрдпрд╛ред рдореИрдВ рддреБрд░рдВрдд рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛, рдЪрдЯрд╛рдИ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдХреЗрд╡рд▓ рд╡рд╣реА рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬреЛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдереЛрдбрд╝рд╛ рд╕рд╛ рдкрд░рд┐рдЪрдп
рдПрдбрд╡рд╛рдВрд╕реНрдб рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕реНрдЯреИрдВрдбрд░реНрдб рд░рд┐рдЬреЗрдВрдбреЗрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо ([r Standardinda╦Рl]) рдХрд╛ рдЬрд╛рдирд╛-рдорд╛рдирд╛ рдирд╛рдо рд╣реИ, рдЬрд┐рд╕реЗ рдмреЗрд▓реНрдЬрд┐рдпрдо рдХреЗ рджреЛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд░ рдЬреЛрди рдбрд┐рдорди рдФрд░ рд╡рд┐рдВрд╕реЗрдВрдЯ рд░реЗрдореИрди рдиреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрд╡рд░реБрджреНрдз рдФрд░ рд╕рдордорд┐рдд рд╣реИред рдЕрдореЗрд░рд┐рдХреА рд╕рд░рдХрд╛рд░реА рдПрдЬреЗрдВрд╕рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ред рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреНрд░рд╢рдВрд╕рд┐рдд рд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕реБрд░рдХреНрд╖рд╛ рдПрдЬреЗрдВрд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ: SECRET рд╕реНрддрд░ рддрдХ, 128 рдмрд┐рдЯреНрд╕ рдХреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, TOP SECRET рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП 192 рдпрд╛ 256 рдмрд┐рдЯреНрд╕ рдХреА рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрдЪреНрдЪ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рддрд╛рдХрдд рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдЧрдгрд┐рдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИред
рдвреЗрд░ рд╕рд╛рд░рд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдкрдХреЗ рд╕рд┐рд░ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд╛рдмрд┐рдпрд╛рдБ рд░рдЦрдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдФрд░ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреБрдВрдЬреА рдХреА рд▓рдВрдмрд╛рдИ 128 рдмрд┐рдЯреНрд╕ рд╣реИ, рджреБрд░реНрдЧрдорддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдк 192/256 рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐
рдпрд╣рд╛рдВ рдХрд╣рд╛ рдЧрдпрд╛
рд╣реИ , рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд, рдПрдХ рд▓рдВрдмреА рдХреБрдВрдЬреА рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рдкрд┐рдЫрдбрд╝ рд╕рдХрддреА рд╣реИред
рд╣рдо рдХреБрдЫ рд╕рдВрдХреЗрддрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ:
- рд░рд╛рдЬреНрдп рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдЬрд┐рд╕реЗ 4 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдФрд░ рдПрдирдмреА рдХреЙрд▓рдо рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЖрдпрддрд╛рдХрд╛рд░ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рд╕реЗрд▓ рдореЗрдВ 1 рдмрд╛рдЗрдЯ рдХрд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ
- Nb рдЙрди рдХреЙрд▓рдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (32-рдмрд┐рдЯ рд╢рдмреНрдж) рд╣реИ рдЬреЛ рд╕реНрдЯреЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рдорд╛рдирдХ Nb = 4 рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рдпрдорд┐рдд
- 32-рдмрд┐рдЯ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдПрдирдХреЗ рдкреНрд░рдореБрдЦ рд▓рдВрдмрд╛рдИ рд╣реИред рдПрдИрдПрд╕ рдХреЗ рд▓рд┐рдП, рдПрдирдХреЗ = 4, 6, 8. рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рддрдп рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдирдХреЗ = 4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
- рдПрдирдЖрд░ - рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рджреМрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдкреНрд░рдореБрдЦ рд▓рдВрдмрд╛рдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, Nr = 10, 12 рдпрд╛ 14
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдЪрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд░рд╛рдЬреНрдп рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрддрдГ рдкрд░рд┐рдгрд╛рдо рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:
рд╕рдмрдмрд╛рдЗрдЯреНрд╕ (), ShiftRows (), рдорд┐рдХреНрд╕рдХреЙрд▓реАрдореЗрдВрдЯреНрд╕ () рдФрд░
AddRoundKey () ред рд╕рд╛рдорд╛рдиреНрдп рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд░рд╛рдЬреНрдп рд╕рд░рдгреА рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрдирдкреБрдЯ рдорд╛рди рд╕реЗ рднрд░ рдЬрд╛рддреА рд╣реИ
рд░рд╛рдЬреНрдп [r] [c] = рдЗрдирдкреБрдЯ [r + 4c], r = 0.1 ... 4; c = 0.1..Nb ред рд╡рд╣ рд╣реИ, рдХреЙрд▓рдо рдореЗрдВред рдПрдХ рдмрд╛рд░ рдореЗрдВ 16-рдмрд╛рдЗрдЯ рдмреНрд▓реЙрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкрд░рд┐рдорд┐рдд рдХреНрд╖реЗрддреНрд░ рдпрд╛
рдЧреИрд▓реЛрдЬрд╝ рдлреАрд▓реНрдб рдЬреАрдПрдл (2
8 ) рдХреЗ рддрддреНрд╡ рдорд╛рдирддреЗ рд╣реИрдВред рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдХреНрд╖реЗрддреНрд░ рддрддреНрд╡реЛрдВ рдпрд╛ рдЙрд╕рдХреА рд╢рдХреНрддрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдлрд╝реАрд▓реНрдб GF (2
8 ) рдХреЗ рддрддреНрд╡ рдЕрдзрд┐рдХрд╛рдВрд╢ 7 рдкрд░ рдбрд┐рдЧреНрд░реА рдХреЗ рдмрд╣реБрдкрдж рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдирдХреЗ рдЧреБрдгрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрд╣реБрдкрдж рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдЯ {1,1,1,0,0,1,1,1} рдПрдХ рдлрд╝реАрд▓реНрдб рддрддреНрд╡ 1x
7 + 1x
6 + 1x
5 + 0x
4 + 0x
3 + 0x
2 + 1x
1 + 1x
0 + 1x
7 + рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ 1x
6 + 1x
5 + x +1ред рдпрд╣ рддрдереНрдп рдХрд┐ рд╣рдо рдлреАрд▓реНрдб рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреЛрдбрд╝ рдФрд░ рдЧреБрдгрд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
SybButes ()
рдПрдХ рд░реВрдкрд╛рдВрддрд░рдг Sbox рд╕реНрдерд┐рд░ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИред рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдиреЛрдЯреЗрд╢рди рдореЗрдВ Sbox рддрддреНрд╡ рдорд╛рдиреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдлрд╝реАрд▓реНрдб GF (2
8 ) рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рддрд╛рд▓рд┐рдХрд╛ рд╕реНрд╡рдпрдВ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереА

рд░рд╛рдЬреНрдп рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХреЛ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдиреЛрдЯреЗрд╢рди рдореЗрдВ {xy} рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрдВрдХреНрддрд┐ x рдФрд░ рдХреЙрд▓рдо y рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдкрд░ рдПрдХ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, {6e} рдХреЛ {9f}, рдФрд░ {15} рдХреЛ {59} рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
ShiftRows ()
рд╕рд░рд▓ рдкрд░рд┐рд╡рд░реНрддрдиред рдпрд╣ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП 1 рддрддреНрд╡, рджреВрд╕рд░реА рдХреЗ рд▓рд┐рдП 2 рдФрд░ рддреАрд╕рд░реЗ рдХреЗ рд▓рд┐рдП 3 рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЪрдХреНрд░реАрдп рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдкрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рд╢реВрдиреНрдп рд░реЗрдЦрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдорд┐рдХреНрд╕рдХреЙрд▓реНрдпреВрдордиреНрд╕ ()
рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реНрдЯреЗрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЛ рдПрдХ рдмрд╣реБрдкрдж рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ GF (2
8 ) рдлрд╝реАрд▓реНрдб modulo x
4 + 1 рдореЗрдВ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд╣реБрдкрдж 3x
3 + x
2 + x + 2. рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред ред рдпрджрд┐ рдЖрдк рдорд╛рдирдХ рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рджреА рдЧрдИ рд╕рдордХрдХреНрд╖ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдЪрд┐рддреНрд░ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╕рдордп,
Ij рдХрд╛ рдорд╛рди рдкрд╣рд▓реЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ i-th рд░реЛ рдХреЗ рд╕рдВрдЧрдд рддрддреНрд╡реЛрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ j-th рдХреЙрд▓рдо рдХреЗ рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред

рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЬреЛрдбрд╝ рдФрд░ рдЧреБрдгрд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдореЛрдВ рдХреА рдЕрдХреНрд╖рдорддрд╛ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдирдП рдирд┐рдпрдо:
- рдЬреАрдПрдл (2 8 ) рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝ рдСрдкрд░реЗрд╢рди рдПрдХреНрд╕рдУрдЖрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
- {01} рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рд╕реЗ рдЧреБрдгрди рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ
- {02} рдЧреБрдгрд╛ рдЧреБрдгрд╛ рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдпрджрд┐ рдЧреБрдгрд╛ рдорд╛рди {80} рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдЗрд╕реЗ 1 рдмрд┐рдЯ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЧреБрдгрд╛ рдорд╛рди {80} рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ 1 рдмрд┐рдЯ рджреНрд╡рд╛рд░рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдорд╛рди {1b} рдХреЗ рд╕рд╛рде XOR рдСрдкрд░реЗрд╢рди рдХреЛ рд╢рд┐рдлреНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдорд╛рди {ff} рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдПрдХ рдмрд╛рдЗрдЯ рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреЛ {100} рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╢реЗрд╖ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдЕрдиреНрдп рд╕реНрдерд┐рд░рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдкрд┐рдЫрд▓реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпреЗ рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рддреАрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдРрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдЬреАрд╡рди рд╣реИрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗред
MixRolumns () ShiftRows () рдХреЗ рд╕рд╛рде рд╕рд┐рдлрд░ рдореЗрдВ рдкреНрд░рд╕рд╛рд░ рдЬреЛрдбрд╝реЗрдВред
AddRoundKey ()
рдкрд░рд┐рд╡рд░реНрддрди RoundKey рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХрд╛ рдПрдХ рдмрд┐рдЯрд╡реЗрдЕрд░ XOR рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред RoundKey рд╕реНрдЯреЗрдЯ рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИ, рдЬрд┐рд╕реЗ KeyExpansion () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рджреМрд░ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
KeyExpansion ()
рдпрд╣ рд╕рд╣рд╛рдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЧреЛрд▓ рдХреБрдВрдЬреА рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рддрд╛ рд╣реИ - KeyScheduleред KeySchedule Nb * (Nr + 1) рдХреЙрд▓рдо рдпрд╛ (Nr + 1) рдмреНрд▓реЙрдХ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рд▓рдВрдмреА рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдк рдЬрд┐рд╕ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╣рд▓реЗ рд░рд╛рдЙрдВрдб рдХреА рдХреЛ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИ
KeySchedule [r] [c] = SecretKey [r + 4c], r = 0.1 ... 4; c = 0,1..Nkред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ KeySchedule рдореЗрдВ рд╣рдореЗрдВ рдмрд╛рдЗрдЯ рджрд░реНрдЬ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЖрдЧреЗ рд╕рдВрдЪрд╛рд▓рди рд╕рдВрднрд╡ рд╣реЛред рдпрджрд┐ рдЖрдк рдЗрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрдо рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд╕рд┐рд░ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ KeyExpansion () рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рджрд╛ рдЗрдирдкреБрдЯ рд▓реЗрдЧрд╛ рдФрд░
ord()
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдкрд░рд┐рдгрд╛рдо Key Keychedule рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕реАрдорд╛рдПрдБ: 16 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдгреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдФрд░, рдЬрдм рд╕реЗ рд╣рдо рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
ord()
рд╡рд░реНрдг рдХреЗ
ord()
рдмрд╛рдЗрдирд░реА рдореЗрдВ 255 рдпрд╛ 11111111 рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рди рдирд╣реАрдВ рд▓реМрдЯрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЧрд▓рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд░реВрд╕реА рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдХреА рдорджрдж рд╕реЗ, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдПрдИрдПрд╕ -128: 4 рдХреЙрд▓рдо рдХреЗ 11 рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреАрд╕реНрдХреБрд▓реЗрдб рд▓реЗрдЖрдЙрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреНрдп рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреНрд░рдорд╢рдГ Nb рдХреЙрд▓рдо рдХреЗ (Nr + 1) рдмреНрд▓реЙрдХ рд╣реЛрдВрдЧреЗред рдЕрдм рд╣рдореЗрдВ рдЦрд╛рд▓реА рдЬрдЧрд╣реЛрдВ рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рд░рдВрддрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - Rcon - рдЬрд┐рд╕рдХрд╛ рдорд╛рди рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╣реИред

KeySchedule рд░реАрдлрд┐рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
- рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╣рдо рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реНрддрдВрдн рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреЙрд▓рдо 0, .., (Nk - 1) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреБрдкреНрдд рд╢рдмреНрдж рдХреЗ рдорд╛рдиреЛрдВ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдЖрдмрд╛рдж рд╣реИред рд╣рдо рд╕реНрддрдВрдн рд╕рдВрдЦреНрдпрд╛ Nk рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪреМрдереЗ рдХреЗ рд╕рд╛рде)
- рдпрджрд┐ рдХреЙрд▓рдо рд╕рдВрдЦреНрдпрд╛ W i , Nk (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд░ рдЪреМрдереЗ) рдореЗрдВ рдПрдХ рдмрд╣реБ рд╣реИ, рддреЛ рд╣рдо рдХреЙрд▓рдо W i-1 рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдПрдХ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдИрдВ рдУрд░ рдПрдХ рдЪрдХреНрд░реАрдп рдкрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдХреЙрд▓рдо рдХреЗ рд╕рднреА рдмрд╛рдЗрдЯреНрд╕ рдХреЛ Sbox рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрдк-рдмрд╛рдЗрдЯреНрд╕ () рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред ред рдЕрдЧрд▓рд╛, рд╕реНрддрдВрдн W i-Nk , рд╕рдВрд╢реЛрдзрд┐рдд W i-1 рдФрд░ рдХреЙрд▓рдо Rcon i / Nk-1 рдХреЗ рдмреАрдЪ XOR рдСрдкрд░реЗрд╢рди рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдХреЙрд▓рдо W i рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, i = 4 рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░рдгред

- рд╢реЗрд╖ рдХреЙрд▓рдореЛрдВ рдХреЗ рд▓рд┐рдП, W i-Nk рдФрд░ W i-1 рдХреЗ рдмреАрдЪ XOR рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдбрдмреНрд▓реНрдпреВ i рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдорд┐рдХреНрд╕рдХреЙрд▓реНрдпреВрдорд┐рдиреЗрд╢рди () рдореЗрдВ рдЧрдгрд┐рдд рдХреА рдорд╛рдиреНрдпрддрд╛ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рд╣рд╛рдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рд▓реЗрдЦрди рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЪрдордХрджрд╛рд░ рд╣реИ рдФрд░, рд╢рд╛рдпрдж, рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рд╣реИред рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХреБрдВрдЬреА рдореЗрдВ 4 * рдПрдирдХреЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ 16)ред рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рд╣рдо рдпрд╣ рд╕рдм рдШрд░реЗрд▓реВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ 16-рдЪрд░рд┐рддреНрд░ рдХреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдпрд╛рдж рд░рдЦреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЗрдирдкреБрдЯ рдкрд░ 16 рд╕реЗ рдХрдо рдХреА рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реА рдПрдХ рдкрдВрдХреНрддрд┐, рдореИрдВ KeySchedule рдореЗрдВ рдорд╛рди {01} рдХреЛ рдЖрджрд░реНрд╢ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред
KeyExpansion () рдХреЛрдб def key_expansion(key): key_symbols = [ord(symbol) for symbol in key]
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, AddSoundKey () рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ KeySchedule рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢реБрд░реБрдЖрддреА рджреМрд░ рдореЗрдВ, рдЧреЛрд▓ рдХреБрдВрдЬреА рд╕рдВрдЦреНрдпрд╛ 0, .., 3 рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рд╣реЛрдЧреА, рдкрд╣рд▓реЗ рдореЗрдВ - рд╕рдВрдЦреНрдпрд╛ 4, .., 7, рдЖрджрд┐ рдХреЗ рд╕рд╛рдеред AddRoundKey () рдХрд╛ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рдПрдХ XOR рд╕реНрдЯреЗрдЯ рдФрд░ рдПрдХ рдЧреЛрд▓ рдХреБрдВрдЬреА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рд╣реИред
рдпрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕рд░рдгреА рдлреЙрд░реНрдореВрд▓рд╛
рдЖрдЙрдЯрдкреБрдЯ [r + 4c] = рд╕реНрдЯреЗрдЯ [r] [c], r = 0.1 ... 4 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдЯреЗрдЯ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
; c = 0.1..Nb ред рдЗрд╕ рдмреАрдЪ, рд▓реЗрдЦ рдореЗрдВ рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗред
рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд▓реНрджреА
рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рдЖрдк рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдореВрд▓ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИред рдРрд╕реЗ рдкреНрд░рддрд┐рд▓реЛрдо рдкрд░рд┐рд╡рд░реНрддрди
InvSubBytes (), InvShiftRows (), InvMixColumns (), рдФрд░
AddRoundKey () рд╣реИрдВ ред рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛:

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ AddRoundKey () рдХреЗ рд▓рд┐рдП рдЧреЛрд▓ рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреНрд░рдо рд░рд┐рд╡рд░реНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: Nr + 1 рд╕реЗ 0. рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде, рд╕реНрдЯреЗрдЯ рдЯреЗрдмрд▓ рдЗрдирдкреБрдЯ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд░рдгреА рд╕реЗ рдмрдирддрд╛ рд╣реИред рдлрд┐рд░, рдЗрд╕рдХреЗ рдКрдкрд░, рдкреНрд░рддреНрдпреЗрдХ рджреМрд░ рдореЗрдВ, рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдХреНрд░рдо рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдЗрдирд╡рд╕рдмрд╛рдЗрдЯреНрд╕ () рдпрд╛ рдЗрдирд╡рд╛рдЗрдЯрдлреНрд░рд╛рдЗрдЯреНрд╕ (), рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмрд╛рдЗрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛, рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдЫрджреНрдордХреЛрд╢ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред
InvSubBytes ()
рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ SubBytes () рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ InvSbox рдирд┐рд░рдВрддрд░ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╢реЗрд╖ рд░рд┐рд╡рд░реНрд╕ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рднреА рдЙрдирдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЪрд░ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдпрд╣
False
, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдорд╛рдиреНрдп рдпрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдореЛрдб (рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди) рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдпрджрд┐
True
- рдЙрд▓рдЯрд╛ рдореЛрдб (рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди) рдореЗрдВред
рдХреЛрдб def sub_bytes(state, inv=False): if inv == False:
InvShiftRows ()
рд░рд╛рдЬреНрдп рдХреЗ рдкрд╣рд▓реЗ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП 1 рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рджрд╛рдИрдВ рдУрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЪрдХреНрд░, рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП 2 рдФрд░ рддреАрд╕рд░реЗ рдХреЗ рд▓рд┐рдП 3ред рд╢реВрдиреНрдп рд░реЗрдЦрд╛ рдШреВрдорддреА рдирд╣реАрдВ рд╣реИред

рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
left_shift/right_shift(array, count)
рдЗрдирдкреБрдЯ
array
рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рджрд┐рд╢рд╛ рдореЗрдВ
left_shift/right_shift(array, count)
рдШреБрдорд╛рдПрдВ
рдХреЛрдб def shift_rows(state, inv=False): count = 1 if inv == False:
InvMixColumns ()
рд╕рдВрдЪрд╛рд▓рди рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рд╕реНрддрдВрдн рдПрдХ рдЕрд▓рдЧ рдмрд╣реБрдкрдж {0b} x
3 + {0d} x
2 + {09} x + {0e} рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдпрд╛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕реВрддреНрд░ред рд╕рднреА рдореВрд▓реНрдп, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╕рдВрдХреЗрддрди рдореЗрдВ рд╣реИрдВред

рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЧрдгрд┐рдд рдХреА рдУрд░ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдмрддрд╛рдПрдВ рдХрд┐ {02} рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рд╡реЗ рдЗрдиреНрд╣реЗрдВ {01} рдФрд░ {02} рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН:
рд░реВрдкрд╛рдВрддрд░рдгn * {03} = n * ({02} + {01}) = n * {02} + n * {01}
n * {09} = n * ({08} + {01}) = n * {02} * {02} * {02} + n * {01}
n * {0b} = n * ({08} + {02} + {01}) = b * {02} * {02} * {02} + n * {02} + n * {01}
n * {0d} = n * ({08} + {04} + {01}) = n * {08} + n * {04} + n * {01} = n * {02} * {02} * {02} + n * {02} * {02} + n * {01}
n * {0} = n * ({08} + {04} + {02} = n * {08} + n * {04} + n * {02} = n * {02} * {02} * { 02} + n * {02} * {02} + b * {02}
рдмреЗрд╢рдХ, рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдШрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдкрдШрдЯрди
n * {09} = n * {03} + n * {03} + n * {03}
рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗрдЧрд╛ (рд╕рдВрджрд░реНрдн рддрд╛рд▓рд┐рдХрд╛ рд╕реНрд░реЛрдд рд╕реВрдЪреА рдореЗрдВ рд▓рд┐рдВрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╣реИрдВ)ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧрдгрдирд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ (рдЯрд┐рдкреНрдкрдгреА) рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп, рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рд╕рд╣рд╛рдпрдХ рдЧреБрдгрди рдХрд╛рд░реНрдп def mul_by_02(num): if num < 0x80: res = (num << 1) else: res = (num << 1)^0x1b return res % 0x100 def mul_by_03(num): return mul_by_02(num)^num def mul_by_09(num):
рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: рдлрд╝рдВрдХреНрд╢рди
mul_by_<>
GF (2
8 ) рдореЗрдВ рд╕рдВрдЧрдд
mul_by_<>
рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ
рдорд┐рдХреНрд╕рдХреЙрд▓реНрдпреВрдордиреНрд╕ () рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдерд╛ред
рдХреЛрдб def mix_columns(state, inv=False): for i in range(nb): if inv == False:
AddRoundKey ()
рдПрдХреНрд╕рдУрдЖрд░ рдСрдкрд░реЗрд╢рди рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЙрд▓рдЯрд╛ рд╣реИ:
(рдПрдХ рдПрдХреНрд╕рдУрдЖрд░ рдмреА) рдПрдХреНрд╕рдУрдЖрд░ рдмреА = рдП
рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЧреЛрд▓ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЙрд╕реА рддрд░рд╣ рдмрдирддрд╛ рд╣реИ рдЬреИрд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП KeyExpansion () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдЧреЛрд▓ рдХреБрдВрдЬреА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЛрдб def add_round_key(state, key_schedule, round=0): for col in range(nk):
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯ рд╣реИ
рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди def encrypt(input_bytes, key):
рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди def decrypt(cipher, key):
рдпреЗ рджреЛ рдлрд╝рдВрдХреНрд╢рди рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реЗрддреЗ рд╣реИрдВ рдЬреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдПрдХ рдЧреБрдкреНрдд рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧред
рдирд┐рд╖реНрдХрд░реНрд╖, рджрд┐рд▓рдЪрд╕реНрдк рд▓рд┐рдВрдХ
рд▓реЗрдЦ рдХрд╛рдлреА рд▓рдВрдмрд╛ рдирд┐рдХрд▓рд╛ред рдореИрдВрдиреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреЛ рдкрддрд▓рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ рдФрд░ рдХреЛрдИ рднреА рдКрдм рдирд╣реАрдВ рдерд╛ред рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдореИрдВрдиреЗ рд▓рдЧрд╛рддрд╛рд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХреА, рдорд┐рдХреНрд╕рдХреЙрд▓реНрдпреВрдордиреНрд╕ () рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдХрд╛рд░реНрдп, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рд╡реЗ рдХрд╣реАрдВ рд╣реИрдВред рдпрд╣ рдордд рд╕рдордЭреЛ рдХрд┐ рдореИрдВ рдкреАрдЖрд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреВрд░реНрдг, рд╕рд░реЗрд╕ рд╕реЗ рдЬреЛрдбрд╝рд╛ рд╣реБрдЖ рдХреЛрдб рдПрдХ
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдПрдХ рдорд╛рдореВрд▓реА рд╕реАрдПрд▓рдЖрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдмрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЧреБрдкреНрдд рдХреБрдВрдЬреА рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдЙрд╕реА рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ)ред рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ!
рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдкреИрдбрд┐рдВрдЧ рдпрд╛ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рдПрдИрдПрд╕ рдПрдХ рдмреНрд▓реЙрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ,
encrypt()/decrypt()
рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдмреНрд▓реЙрдХ рд▓реЗрддреЗ рд╣реИрдВ (128-рдмрд┐рдЯ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ 16 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ)ред рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, 1 рд╕реЗ 15 рдмрд╛рдЗрдЯреНрд╕ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рднреА рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдк рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдЧрдВрддрд╡реНрдп рдлрд╝рд╛рдЗрд▓ рдкрд░ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд╣рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдореБрдЭреЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рджреНрд╡рд╛рд░рд╛ рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛
рд╢реВрдиреНрдп рдмрд┐рдЯ рдХрд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЛрдбрд╝ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдкреЗрд▓реЛрдб рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдХрд▓реНрдк Oracle рдРрдб-рдСрди рджреНрд╡рд╛рд░рд╛ рд╣рдорд▓реЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдИрдПрд╕рдУ / IEC 9797-1 рдореЗрдВ "рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдзрд┐ 2" рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдХреАрдХреГрдд рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рд╣реИ, рд╕рдВрджреЗрд╢ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╕рд╛ рдЬреЛрдбрд╝рдХрд░ рдФрд░ рд╢реЗрд╖ рд╕реНрдерд╛рди рдХреЛ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рднрд░рдирд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕реЗ рд╣рдорд▓реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд░реЛрдз рд╕рд╛рдмрд┐рдд рд╣реБрдЖ рдерд╛ред
рддреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛ рд░рд╣рд╛, рд╕рд┐рд░реНрдл рдЯрд┐рдкреНрдкрдгреА рдХреАред рдЕрдЪрд╛рдирдХ, рдФрд░ рдХрд╛рдо рдореЗрдВ рдЖрдирд╛)ред
рд╕реНрд░реЛрдд рдЪрдпрди: