Feistel рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛


рдмреНрд▓реЛрдлрд┐рд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ, рдореИрдВ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ - рдлреЗрдЗрд╕реНрдЯреЗрд▓ рдиреЗрдЯрд╡рд░реНрдХ ред "рд╡рд┐рд╖рдп рдореЗрдВ" рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╕реБрдирд╛ рд╣реИ - рдЗрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрд╕рдВрдЦреНрдпрдХ рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдк рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рд╕рд╣реА рдкрд░ рддрд╕реНрд╡реАрд░ рд╕реЗ рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ? рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдПрдХ рддрд░рд╣ рд╕реЗ (рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди) рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд?
рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореИрдЯ рдХреЗ рдиреАрдЪреЗ


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд┐рдХреАрд╕реНрдЯреЗрдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╕рдордЭреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ

рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХрд╣рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдЖрдзрд╛ рдореЗрдВ рдХрд╛рдЯрдХрд░ рдмрд╛рдИрдВ рдУрд░ рдПрд▓ рдХрд╛ рдирд╛рдо рджреЗрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рджрд╛рдИрдВ рдУрд░ рдЖрд░ред рддреЛ рдмрдиреЛред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреНрд▓реЙрдХ рдХреЗ рджреЛ рд╣рд┐рд╕реНрд╕реЗ рд╣реИрдВ, рдФрд░ рд░рд╣рд╕реНрдпрдордп рдлрд╝рдВрдХреНрд╢рди рдПрдлред рдЖрдЗрдП рдЪрд▓рддреЗ рд╣реИрдВ


рдпрд╣ "рд╕рдорд╛рди" рдХреИрд╕реЗ рдЖрддрд╛ рд╣реИ?

рдЪрд░рдгреЛрдВ рдореЗрдВ рддреАрди рд░рд╛рдЙрдВрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ

рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди


реж) рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд▓ рдФрд░ рдЖрд░ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ резрежреж рдФрд░ реирежреж рд╣реЛрдиреЗ рджреЗрдВред рдПрдл рдФрд░ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди, рдПрд▓ рдФрд░ рд░рд╛рдЙрдВрдб рдирдВрдмрд░ рдПрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, F рдиреЗ рдмрд╕ рдЙрдиреНрд╣реЗрдВ modulo 256 (рддрд╛рдХрд┐ рдпрд╣ рдмрд╛рдЗрдЯ рдХреЛ рдХреНрд░реЙрд▓ рди рдХрд░реЗ) рдЬреЛрдбрд╝ рджреЗрдВред рдпрд╛рдиреА рдПрдл (рдПрд▓, рдПрди) = (рдПрд▓ + рдПрди)% 256. (% рд╡рд┐рднрд╛рдЬрди рдХрд╛ рд╢реЗрд╖ рд╣реИ)

рдПрдХ рджреМрд░ (n = 1)
1) рд╣рдо рдЖрд░ (200) рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХреНрд╕реЛрд░рд┐рдо рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдПрдл (рдПрд▓, рдПрди) рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рд▓реЗрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред 200 200 ((100 + 1)% 256) рд╣рдореЗрдВ 173 рдорд┐рд▓рддрд╛ рд╣реИред
2) рд╣рдордиреЗ рдПрд▓ рдХреЗ рд╕реНрдерд╛рди рдкрд░ 173, рдФрд░ рдЖрд░ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдПрд▓ рдХреЗ рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдп (100), рдЕрд░реНрдерд╛рддред рд╕рдорд╛рд░реЛрд╣ R рдХреЗ рд╕рд╛рде рд╕реНрд╡реИрдк R рдФрд░ Xor R рдХрд╛ рдкрд░рд┐рдгрд╛рдоред

рджреМрд░ 2 (n = 2)
1) рдЕрдм рдПрд▓ = 173, рдЖрд░ = 100. рдЬрд╝реЛрд░рд┐рдо 100 рдПрд╕ ((173 + 2)% 256), рд╣рдореЗрдВ 203 рдорд┐рд▓рддреЗ рд╣реИрдВ
2) рд╣рдордиреЗ рдПрд▓ рдХреЗ рд╕реНрдерд╛рди рдкрд░ 203 рдФрд░ рдЖрд░ рдХреЗ рд╕реНрдерд╛рди рдкрд░ 173 рд░рдЦрд╛ред

рд░рд╛рдЙрдВрдб 3 (n = 3)
1) рдПрд▓ = 203, рдЖрд░ = 173. рдЬреЛрд░рд┐рдо 173 рдПрд╕ ((203 + 3)% 256), рд╣рдореЗрдВ 99 рдорд┐рд▓рддреЗ рд╣реИрдВ
2) рдЕрдВрддрд┐рдо рджреМрд░ рдХреЗ рдмрд╛рдж рд╕реЗ, рд╣рдо рдХреЗрд╡рд▓ R рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ (рддрд╛рдХрд┐ рддрдм рд╣рдо рдХреНрд░рдореЛрдиреНрдирддрд┐ рди рдХрд░реЗрдВ)

рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдмрд╛рдж, рдПрд▓ = 203, рдЖрд░ = 99ред

рдкреНрд░рддрд┐рд▓рд┐рдкрд┐


рд╣рдо рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рдЧреЛрд▓ рдирдВрдмрд░ 3 рд╕реЗ 1 рддрдХ рдЬрд╛рддреЗ рд╣реИрдВ

рджреМрд░ 1 (n = 3)
1) рдПрд▓ = 203, рдЖрд░ = 99. рдЬрд╝реЛрд░рд┐рдо 99 рдПрд╕ ((203 + 3)% 256) рд╣рдореЗрдВ 173 рдорд┐рд▓рддрд╛ рд╣реИред рдПрдХ рдкрд░рд┐рдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛?
2) L рдХреЗ рд╕реНрдерд╛рди рдкрд░ 173, R рдХреЗ рд╕реНрдерд╛рди рдкрд░ 203 рд▓рдЧрд╛рдПрдВ

рджреМрд░ 2 (n = 2)
1) рдПрд▓ = 173, рдЖрд░ = 203ред рдЗрд╕рд▓рд┐рдП, 203 (((173 + 2)% 256) = 100 ред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдЧрднрдЧ!
2) рдПрд▓ = 100, рдЖрд░ = 173 рдмрджрд▓реЗрдВ

рджреМрд░ 3 (рдПрди = 1)
1) рдПрд▓ = 100, рдЖрд░ = 173. рд╣рдо рдЖрд░ (рдХреНрд░рдордЪрдп, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ) = 173) ((100 + 1)% 256) = 200 URAAAA !!!

рдПрд▓ = 100, рдЖрд░ = 200. рдлрд╛рд░реНрдореЗрд╕реА рдореЗрдВ)

рдпрд╣реА рд╣реИ, рд╕рдВрдкреВрд░реНрдг рдлрд┐рд╕реНрдЯрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреБрдЫ рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдмреНрд▓реЙрдХ рдХреЗ рджреЛрдиреЛрдВ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЕрд╡рд░реЛрдзрди рдХреЛ рдЙрдмрд╛рд▓рддрд╛ рд╣реИ, рдЬреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рджреМрд░рд╛рди рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЬрд╛рд╡рд╛ рдХреЛрдб рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдмреНрд▓реЙрдХрдЯреЗрд╕реНрдЯ
{
рдирд┐рдЬреА рд╕реНрдерд┐рд░ int рд░рд╛рдЙрдВрдб = 3;
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдХреА рд▓рдбрд╝рд╛рдИ ( рдЗрдВрдЯ [] рдП, рдмреВрд▓рд┐рдпрди рд░рд┐рд╡рд░реНрд╕)
{
int рд░рд╛рдЙрдВрдб = рд░рд┐рд╡рд░реНрд╕? рд░рд╛рдЙрдВрдб: 1;
int l = [[реж];
int r = [рдПрдХ];
for ( int i = 0; рдореИрдВ <рд░рд╛рдЙрдВрдб; рдореИрдВ ++)
{
if (i <рд░рд╛рдЙрдВрдб - 1) // рдпрджрд┐ рдЕрдВрддрд┐рдо рд░рд╛рдЙрдВрдб рдирд╣реАрдВ рд╣реИ
{
int t = l;
l = r ^ f (l, рдЧреЛрд▓);
рдЖрд░ = рдЯреА;
}
рдФрд░ // рдЕрдВрддрд┐рдо рджреМрд░
{
r = r ^ f (l, рдЧреЛрд▓);
}
рджреМрд░ + = рд░рд┐рд╡рд░реНрд╕? -1: 1;
}
рдПрдХ [0] = рдПрд▓;
рдПрдХ [1] = рдЖрд░;
}
рдирд┐рдЬреА int f ( int b, int k)
{
рд╡рд╛рдкрд╕реА b + k;
}
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╢реВрдиреНрдп рдкрд░реАрдХреНрд╖рдг ()
{
int [] a = рдирдпрд╛ int [реи];
рдПрдХ [0] = 100;
рдПрдХ [рез] = реирежреж;
feist (a, false );
feist (рдП, рд╕рдЪ );
}
}



рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реЛрдЧрд╛;)

Source: https://habr.com/ru/post/In140404/


All Articles