
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдХрд┐рд╕реА рдХреЛ рд╕реВрдЪрдирд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧреБрдордирд╛рдореА рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рдкреЗрд╢ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдорд╛рд╕реНрдЯрд░ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдЕрдиреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ "рдирд┐рд╢рд╛рди" рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдЗрдХрд╛рдИ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рдореЗрд╢рд╛ "рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛" рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ "рдХреБрдВрдЬреА рдорд┐рд▓рд╛рди" рд╣рдорд▓реЛрдВ рдХрд╛ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рддрд┐рд░реЛрдз рд╣реИред рд╕рдЪ рд╣реИ, рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рд╣реИ - рдПрдХ рднрдпрд╛рд╡рд╣ рд░реВрдк рд╕реЗ рдХрдо рдЧрддрд┐, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдзрд┐ рдХрд╛ рдореВрд▓ рдПрдХ рдЧрдгрд┐рддреАрдп рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕реЗ
рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯреЗ рд╢реИрдХреНрд╖рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХрд╛ рднреА рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдЧрд▓рддрдлрд╣рдорд┐рдпрд╛рдБ рд╣реИрдВ:
- рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдХрдерд┐рдд рддреМрд░ рдкрд░, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо md5decrypt рд╣реИ рдЬреЛ md5crypt рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ;
- рдПрдордбреА 5 рдЬреИрд╕реЗ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЯреВрдЯ рдЧрдП рд╣реИрдВред рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдЯрдХреНрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - рдПрдХ trifling рдорд╛рдорд▓рд╛;
- рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИрдВред
рдпрд╣ рд╕рдм рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрдХрд╡рд╛рд╕ рд╣реИред рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ (рдПрдордбреА 5, рдПрд╕рдПрдЪрдП) рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдпрдерд╛ рдХрд┐рд╕реА рдиреЗ рднреА рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╣рдордиреЗ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рдЯрдХрд░рд╛рд╡реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕реАрдЦрд╛, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд╛рдЗрдиреЗрдВ s1, s2, рдЬреИрд╕реЗ рдХрд┐ f (s1) = f (s2) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдФрд░ рд╣реИрд╢рд┐рдВрдЧ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХреА рдХреЛрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА "рдмрдХрд╡рд╛рд╕" рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЪрд▓реЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╢реЛрдз рд╕рддреНрдп рд╣реИрдВред рдРрд╕рд╛ рднреА рдирд╣реАрдВ рд╣реИ, рдЪрд▓реЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрд░ (рдХреБрдВрдЬреА, рд╕рдВрджреЗрд╢) = md5 рдХрд╛ рдкрд╣рд▓рд╛ рдПрди рдмрд┐рдЯреНрд╕ (рдХреБрдВрдЬреА + рд╕рдВрджреЗрд╢), рдЬрд╣рд╛рдВ рдПрди рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдЪрд▓реЛ 40 рдХреЗ рдмрд░рд╛рдмрд░ рдХрд╣рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рдордЬрд╝рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ!
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреБрдВрдЬреА рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рджреЗрддреЗ рд╣реИрдВред рд▓рдЧрднрдЧ 2 ^ 40 рд╡рд┐рднрд┐рдиреНрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд "рд╣реЛрдо" рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдХрд╛рд░реНрдп рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ X рдХрд╛ рдПрдХ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдлрд╝рдВрдХреНрд╢рди R рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрд▓рдЯрд╛ рдЫрд╡рд┐ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣реА рд╣реИ, X = R ('test_key', 'msg') = 5B7AF38712 рдЪрд▓реЛ
рд╣рдо 'рд╕рдВрджреЗрд╢' рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╣реИрд╢ рдорд╛рди 5B7AF38712 рдФрд░ рд╕реНрд░реЛрдд рдХреБрдВрдЬреА 'test_key' рд╣реИ, рд╣рдо рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╣рдо рдкреВрд░реНрд╡-рдЫрд╡рд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рд╕рдВрджреЗрд╢' рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ!
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдХреБрдВрдЬреА ('test_key') рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╣реИрд╢ рдорд╛рди рдЬрд╛рдирддреЗ рд╣реИрдВ? рддрдм рд╣рдо рдЕрдкрдиреЗ рдПрдХреНрд╕ рдорд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реЗ
рдЕрдирдВрдд -рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝реЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЬреЛрдбрд╝реЗ рд╕рд╛рд░реНрдердХ рднреА рджрд┐рдЦреЗрдВрдЧреЗ, рдЪрд╛рд╣реЗ рдХреБрдЫ рднреА рд╣реЛред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реА рдЬреЛрдбрд╝рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреЗ рдЬреАрд╡рди рдХрд╛ рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рд╕рдм (рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдореЗрдВ) рдФрд░ рдЗрд╕рдХрд╛
рдЙрддреНрддрд░ рд╣реЛрдЧрд╛ ред
рдРрд╕рд╛ рдХреНрдпреЛрдВ? рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЗрдирдкреБрдЯ рдорд╛рдиреЛрдВ (рдпрд╛рдиреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ) рдХрд╛ рд╕реЗрдЯ рдЕрдирдВрдд рд╣реИ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди R рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ (рдмрд╣реБрдд рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдмреЛрд▓рдиреЗ) рдореЗрдВ рдШрдЯрдирд╛ рд╣реЛрдиреЗ рдХреА рд╕рдорд╛рди рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
рдЕрдм, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ '5B7AF38712' рднреЗрдЬрдирд╛, рдХреБрдВрдЬреА ('test_key') рдХреЛ рдЬрд╛рдирдирд╛, рд╡рд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ ('рд╕рдВрджреЗрд╢') (рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдФрд░, рди рдЬрд╛рдиреЗ, - рдХреЛрдИ рдХрдЪрд░рд╛ред
рдЬрд╛рджреВ
рдЕрдм рд╣рдо рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреИрд╕реЗ рдПрдирдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдкрддрд╛рдХрд╛ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдЧрд╛рд░рдВрдЯреА рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХреЗред рдФрд░ рдлрд┐рд░ рднреА, рд╣рдо рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИрдВ, рдФрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдФрд░ рд╕рдВрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣реА рд╣реИ, рдЗрдирдкреБрдЯ рдкрд░: key1, message1 рдФрд░ key2, message2ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд░рд┐рдкреНрдЯ (рдХреА 1, рдореИрд╕реЗрдЬ 1, рдХреА 2, рдореЗрд╕реЗрдЬ 2) = рдПрдХреНрд╕,
рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ (рдПрдХреНрд╕, рдХреА 1) = рд╕рдВрджреЗрд╢ 1, рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ (рдПрдХреНрд╕, рдХреА 2) = рд╕рдВрджреЗрд╢ 2ред
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди R рдХреЛ "рдЖрдзреБрдирд┐рдХреАрдХрд░рдг" рдХрд░рдирд╛ рд╣реИ, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдмрдирд╛рдПрдВрдЧреЗ:
R
m (рдХреА, msg) = md5 рдХреЗ рдкрд╣рд▓реЗ N рдмрд┐рдЯреНрд╕ (рдХреА + рд▓рд╛рдЗрди (m) + msg),
рдЬрд╣рд╛рдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдПрдо) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдореАрдЯрд░ рдХрд╛ рдХреЛрдИ рдЕрдиреВрдард╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд╢рдорд▓рд╡ рд╕рдВрдХреЗрддрди)ред
рдЗрдВрдбреЗрдХреНрд╕ рдПрдо рдПрдХ рд╡рд┐рд╢реЗрд╖ "рдирд┐рдпрдВрддреНрд░рдг рдореВрд▓реНрдп" рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддреЗ рд╕рдордп рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗ (рдЕрд░реНрдерд╛рдд, рдпрд╣ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ)ред
рдпрд╣ рдХреИрд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╣ рдмрддрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
рдбрд┐рдХреНрд░рд┐рдкреНрдЯ (рдПрдХреНрд╕, рдХреА) = рд╕рдВрджреЗрд╢ рдХрд╛ рдореВрд▓реНрдп, рдЬреИрд╕реЗ рдХрд┐ рдЖрд░ (рдХреБрдВрдЬреА, рд╕рдВрджреЗрд╢) == рдПрдХреНрд╕, рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдореА рдХреЗ рд╕рд╛рдеред
рдкреБрдирд░рд╛рд╡реГрддреНрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЫрджреНрдордХреЛрд╢):
string decrypt(X, key) { for (int m = 0; m < MAX_INT; m++) for (string msg in generate_all_strings(MAX_STRING_LENGTH) ) if (first_N_bytes( md5( key + m.ToString() + msg) ) == X)
рдпрд╣рд╛рдВ рдПрдХ рдирдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░
MAX_STRING_LENGTH рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ , рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдмреНрд░реВрдЯ рдмрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдЧрдгрдирд╛ рдкреНрд░рджрд░реНрд╢рди рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЕрдЧрд░ рдореВрд▓ рд╕рдВрджреЗрд╢ 'рд╣реИрд▓реЛ, рд╣реИрдмреНрд░рд╛рд╣рдм' рдерд╛, рддреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЫреЛрдЯреЗ рдЕрдиреБрдХреНрд░рдореЛрдВ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'рдирд░рдХ', 'рдУ, рдПрдЪ', 'рдЕрдмреНрд░рд╛', 'рд╣реИрдмрд░'ред рдФрд░
рдХреБрдВрдЬреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдХреЗ рдмрд┐рдирд╛, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдкрд╣рд▓реЗ 40 рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЯрдХреНрдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╛рд░рдВрдЯреА рд╣реИред "рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди" рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рд░реНрдп рд╡рд╛рдВрдЫрд┐рдд рдореВрд▓реНрдп рдХреА рд╡рд╛рдкрд╕реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХреНрд░реВрд░ рдмрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
string encrypt(key, msg) { for (int m = 0; m < MAX_INT; m++) { string X = first_N_bytes( md5( key + m.ToString() + msg) );
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░рдХреЗ рд╕рд╣реА рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╢реБрджреНрдзрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ, рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдХреЛрдИ рдЪреЗрдХрд╕рдо, рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛, рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕рд╣реА рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рддрдереНрдп рдХреЛ "рдмрд╛рд╣рд░" рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ!
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдПрдХ рд╕реНрд╡-рд╕реНрдкрд╖реНрдЯ рддрдереНрдп рдмрди рд░рд╣рд╛ рд╣реИ:
string encrypt(key, msg, key2, msg2) { for (int m = 0; m < MAX_INT; m++) { string X = first_N_bytes( md5( key + m.ToString() + msg) );
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рдХреБрдЫ рдиреБрдХрд╕рд╛рди рд╣реИрдВ - "рдирд┐рдпрдВрддреНрд░рдг рдореВрд▓реНрдпреЛрдВ" (рдПрдо) рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде - рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЖрд░
рдПрдо рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдФрд░ рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЧрддрд┐ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореА рдХреЗ рдореВрд▓реНрдп рдХреА рд╕реАрдорд╛ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдЖрд░ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрдо рдХрд░ рд╕рдХреЗрдВ (рдЬреЛ рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛)ред рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдореВрд▓реНрдпреЛрдВ рдХреА рдмрд╣реБрдд рдХрдо рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде, рдРрд╕реЗ рдореАрдЯрд░ рднреА рдмрд╕ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдбрдмрд▓-рдмрд╛рдЗрдЯ рдЯреНрд░рдВрдХреЗрд╢рди рдкрд░ рдмрд╕ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рд╕реА # рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛, рдФрд░ "рд╕реНрдерд╛рдиреАрдп" рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдкреНрд░рджрд╛рддрд╛ рдмрд╕ рдмрд╣реБрдд рдзреАрдореЗ рд╣реИрдВ! рдЬреАрдкреАрдпреВ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 50,000 рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛) рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЫреЛрдбрд╝ рджрд┐рдпрд╛! рд░реЗрдВрдЬ az рдРрд╕реЗ "рдЙрджрд╛рд╕" рд░реВрдк рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рджреЛ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, "Encrypt2" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╣реИрд╢ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдкрд╣рд▓реА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде, рдпрд╣ рдкрд╣рд▓реЗ рд╕рдВрджреЗрд╢ рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ:

рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде, рдХреНрд░рдорд╢рдГ рджреВрд╕рд░реЗ рдореЗрдВ:

рдЙрд╕реА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рда рдХреЛ рдиреЛрдЯ рдХрд░реЗрдВред рдареАрдХ рд╣реИ, рдЧрд▓рдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде - рдПрдХ рдЕрдЬреАрдм рд╕рдВрджреЗрд╢ рдореЗрдВ (рд▓реЗрдХрд┐рди рдЧрд╛рд░рдВрдЯреА рдХрд╣рд╛рдВ рд╣реИ рдХрд┐ рдпрд╣ рдореВрд▓ рдирд╣реАрдВ рдерд╛?)ред

рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
dl.dropbox.com/u/243445/md5h/HashCode.7AрдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЖрдХреНрд░реЛрд╢ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рдЪрд┐рддреНрд░рдг рд╣реИред рдФрд░ рдПрдХ рдЕрдЪреНрдЫреЗ рдЖрд╡реЗрджрди рдкрд░, рд╡рд┐рдЪрд╛рд░ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреЗ рдЕрдзреАрди, рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВред