Laravel 4 рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрдЪрд╛рд░

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


рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди! рд▓рд╛рд░рд╡реЗрд▓ рдкрд░ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ (рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди) рдФрд░ рд▓рд╛рд░рд╡реЗрд▓ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрдЪрд╛рд░ рдХреЗ рдЖрдпреЛрдЬрди рдореЗрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

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

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрдЪрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рд╕рд░реНрд╡рд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рд░рд╡реЗрд▓ 4.1 рдЗрдВрдЬрди (рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рдордп рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг) рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рд╣реЛрдЧрд╛ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рд╕реА # рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдЖрд╡реЗрджрди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓реЗрдЦрди рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ CodeProject рдХреЗ рдПрдХ рд▓реЗрдЦ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ C # рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: C # рдФрд░ PHP рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ ред рджрд░рдЕрд╕рд▓, рдпрд╣ рд▓реЗрдЦ рдореЗрд░реЗ рд╢реЛрдз рдХрд╛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдерд╛ред

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛:

рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдореВрд▓ рдмрд╛рддреЗрдВ


рд╕рднреА рдореМрдЬреВрджрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ 2 рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╕рдордорд┐рдд рдФрд░ рдЕрд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рдиред рд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЗрдВ, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдЗрд╕ рд╢реНрд░реЗрдгреА рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрд╕рдордорд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИрдВред

рдЕрд╕рдордорд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ, рджреЛ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреАред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗрд╡рд▓ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдХреЗ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдЪреАрдЬ рд╣реИ: рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╣реИрд╢ред рдпрд╣ рд╣реИрд╢ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдареАрдХ рдЙрд╕реА рд╕реЗ рдЖрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдо рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗред рдЕрд╕рдордорд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдордорд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдирд┐рдореНрди рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реНрдХреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЧреНрд░рд╛рд╣рдХ рд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
  2. рдХреНрд▓рд╛рдЗрдВрдЯ рддрдм рдПрдХ рдЕрд╕рдордорд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХреБрдВрдЬреА рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рд╕рд░реНрд╡рд░ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
  3. рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрдИ рдХреБрдВрдЬреА рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред
  4. рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рдкреНрдд рдХреБрдВрдЬреА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
  5. рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдХреЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЪрдпрдирд┐рдд рд╕рдордорд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдкрд░ рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рддрд╛рдХрд┐ рдЧреНрд░рд╛рд╣рдХ 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рдХрд┐ рдбреЗрдЯрд╛ рдЙрд╕рдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЬрд╛рд▓реА рд╕реЗ рдирд╣реАрдВред

рд╕рд░реНрд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛


рдореИрдВ рдпрд╣рд╛рдБ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рд░рд╡реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА MySecureApp рдирд╛рдордХ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕рднреА рдХреЛрдб рдРрдк рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдирд┐рдпрдВрддреНрд░рдХреЛрдВ, рдореЙрдбрд▓реЛрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдФрд░ рдЪреАрдЬрд╝ рдмрдирд╛рдПрдБрдЧреЗ:
  1. рдРрдк рдлреЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░, рд▓рд┐рдмрд░ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ, рдЗрд╕рдореЗрдВ MySecureApp - рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рд╕рднреА рд╡рд░реНрдЧ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ред
  2. рдРрдк рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░, рдЪрд╛рдмрд┐рдпрд╛рдБ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБред рдпрд╣ рд╣рдорд╛рд░реА рдирд┐рдЬреА рдХреБрдВрдЬреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
  3. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЬрдбрд╝ рдореЗрдВ рдХрдВрдкреЛрдЬрд╝рд░.рдЬрд╕рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
    "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], "psr-0": { "MySecureApp": "app/lib" } }, 

    рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдСрдЯреЛрд▓реИрдбрд░ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рджреЗрдЦ рд╕рдХреЗ:
      рд╕рдВрдЧреАрддрдХрд╛рд░ рдбрдВрдк-рдСрдЯреЛрд▓реЙрдб 

  4. рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
      / рдРрдк
       / рджрд╛рдпрд┐рддреНрд╡
         / MySecureApp
           / рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА - рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛ рд╕реАрдзреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ
           / Dto - рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ
             / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ - рд╣рдорд╛рд░реА рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрдХреНрд╖рд╛рдПрдВ
           / Facades - рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП facades
           / рдлрд╝рд┐рд▓реНрдЯрд░ - рдлрд╝рд┐рд▓реНрдЯрд░
           / рд╕рд╣рд╛рдпрдХ - рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ
           / рдкреНрд░рджрд╛рддрд╛ - рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рд▓рд╛рд░рд╡реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣рдорд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ 

    рдзреАрд░реЗ-рдзреАрд░реЗ, рд╣рдо рдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрдмрд╛рдж рдХрд░рддреЗ рд╣реИрдВред


рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди


рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рдПрдХ рд╣реА рдХрдВрдЯреНрд░реЛрд▓рд░ - ApiController рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рдлрд╛рд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ mysecureapp / рдПрдкреАрдЖрдИ *

рддрд░реНрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдЧреНрд░рд╛рд╣рдХ рдмреНрдпрд╛рдЬ рдХреА рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдлреЙрд░реНрдо рдХрд╛ JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ:
 { "data": "<AES encrypted JSON object>", "sign": "<RSA signature of data>" } 


рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╣рдо рдПрдИрдПрд╕ рдХреЛ рдПрдХ рд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЕрд╕рдордорд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ - рдЖрд░рдПрд╕рдПред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА phpseclib рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдЖрд░рдПрд╕рдП рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

RSA рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреАред рдареАрдХ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдареАрдХ рд╣реИ, рдЕрдЧрд░ рд╣рдо рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдЗрдП рдЗрд╕ рдкреНрд░рдореБрдЦ рдЬреЛрдбрд╝реА рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: http://slproweb.com/products/Win32OpenSSL.html ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рд╛рдЗрдЯ рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реБрдИ - рдЙрдирдХреЗ рдкрд╛рд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ Opensl.cfg рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг (~ 19 рдПрдордмреА) рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЙрдкрд░реЛрдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ OPENSSL_CONF рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  OPENSSL_CONF = \ path \ to to \ssl.cfg рд╕реЗрдЯ рдХрд░реЗрдВ 

рдЪрд▓реЛ рдЪрд╛рдмрд┐рдпрд╛рдБ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рд╕реАрдбреА) рдХреЛ рдЬрд╣рд╛рдВ рдЖрдкрдиреЗ рдЕрднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рдмрд┐рди рд╕рдмрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдУрдкрдирдПрд╕рдПрд▓ рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдпред рдирд┐рдЬреА рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
  Opensl genrsa -aes256 -out temp.key 1024
 рдЦреБрд▓рддрд╛ рд╣реИ rsa -in temp.key -out private.key 

рдЕрдм, рдкреНрд░рд╛рдкреНрдд рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдХ X509 рдкреНрд░рдорд╛рдгрдкрддреНрд░, рдпрд╛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ:
  Opensl req -new -x509 -nodes -sha1 -key private.key -out public.crt -days 365000 

рдЖрдкрд╕реЗ рдХреБрдЫ рдкреНрд░рд╢реНрди рдкреВрдЫреЗ рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рдирдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЖрдк рдХреБрдЫ рднреА рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрд▓:
  1. Private.key - рдирд┐рдЬреА рдХреБрдВрдЬреА
  2. public.crt - рдЦреБрд▓рд╛

рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдРрдк / рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд┐рдЧ рдореЗрдВ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдХреЙрдиреНрдлрд┐рдЧ / рдРрдк.рдПрдлрд╝рдкреА) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ
 'privateKey' => 'private.key', 

RSA рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо Base64 рд╕реЗ / рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреЛрдбрд┐рдВрдЧ / рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдРрдк / рд▓рд┐рдм / MySecureApp / Helpers / Base64.php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
 <?php namespace MySecureApp\Helpers; class Base64 { public static function UrlDecode($x) { return base64_decode(str_replace(array('_','-'), array('/','+'), $x)); } public static function UrlEncode($x) { return str_replace(array('/','+'), array('_','-'), base64_encode($x)); } } 

рдЦреИрд░, рдЕрдм рдЖрд░рдПрд╕рдП рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди / lib / MySecureApp / Cryptography / Cryptography.php рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝реА рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ:
 <?php namespace MySecureApp\Cryptography; use MySecureApp\Helpers\Base64; class Cryptography { /** * RSA instance * @var \Crypt_RSA */ protected $rsa; /** * RSA private key * @var string */ protected $rsaPrivateKey; /** * Whether RSA instance is initialized * @var bool */ private $isRsaInitialized = false; /** * Initializes the RSA instance using either provided private key file or config value * @param String $privateKeyFile Path to private key file * @throws Exception */ public function initRsa($privateKeyFile = '') { // } /** * Decrypts RSA-encrypted data * @param String $data Data to decrypt * @return String */ public function rsaDecrypt($data) { // } /** * Encrypts data using RSA * @param String $data Data to encrypt * @return String */ public function rsaEncrypt($data) { // } /** * Signs provided data * @param String $data Data to sign * @throws \Exception * @return string Signed data */ public function rsaSign($data) { // } } 

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

рдЖрд░рдПрд╕рдП рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рднрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЪрд▓реЛ rsaInit () рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рд░рд▓ рд╣реИ: рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рд▓реА рдЧрдИ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ phpseclib рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ Crypt_RSA рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ:
  public function initRsa($privateKeyFile = '') { //    ,     if (!$privateKeyFile) { $privateKeyFile = app_path() . '/keys/' . \Config::get('app.privateKey'); } // ,     if (!\File::exists($privateKeyFile)) { Log::error("Error reading private key file."); throw new Exception("Error reading private key file."); } $this->rsaPrivateKey = \File::get($privateKeyFile); //   RSA $rsa = new \Crypt_RSA(); $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); $rsa->loadKey($this->rsaPrivateKey); //       //    true    // ()  $this->rsa = $rsa; $this->isRsaInitialized = true; } 

рдЕрдм рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
  public function rsaDecrypt($data) { //  RSA       if (!$this->isRsaInitialized) { $this->initRsa(); } //   return $this->rsa->decrypt(Base64::UrlDecode($data)); } // ... public function rsaEncrypt($data) { //  rsaDecrypt if (!$this->isRsaInitialized) { $this->initRsa(); } return Base64::UrlEncode($this->rsa->encrypt($data)); } // ... public function rsaSign($data) { if (!$this->isRsaInitialized) { $this->initRsa(); } // ,   PHP- openssl if (!function_exists('openssl_sign')) { throw new \Exception("OpenSSL is not enabled."); } //   $signature = ''; $keyId = openssl_get_privatekey($this->rsaPrivateKey); openssl_sign($data, $signature, $keyId); openssl_free_key($keyId); return $signature; } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ rsaDecrypt рд╡рд┐рдзрд┐ рд╕реЗ рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреЛ Base64 рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рд╕рдордорд┐рдд рд░реВрдк рд╕реЗ, rsaEncrypt рд░рд┐рдЯрд░реНрди рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ Base64 рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИред

рдЗрд╕ рдкрд░ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд╡рд░реНрдЧ рдХрд╛ рдЖрд░рдПрд╕рдП рд╣рд┐рд╕реНрд╕рд╛ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рдПрдИрдПрд╕ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЗрдВред

рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ:
  /** * AES instance * @var \Crypt_AES */ protected $aes; /** * Whether AES instance is initialized * @var bool */ private $isAesInitialized = false; 

рдЕрдм рддрд░реАрдХреЗ:
  /** * Initializes AES instance using either provided $options or session values * @param array $options Array of options, containing 'key' and 'iv' values * @throws Exception */ public function initAes($options = array()) { // ... } /** * Encrypts data using AES * @param String $data Data to encrypt * @return String */ public function aesEncrypt($data) { // ... } /** * Decrypts AES encrypted data * @param String $data Data to decrypt * @return String */ public function aesDecrypt($data) { // ... } 

рдПрдИрдПрд╕ рдЖрд░рдВрднреАрдХрд░рдг:
  public function initAes($options = array()) { //  $options ,      if (empty($options) && Session::has('aes_key') && Session::has('aes_iv')) { $options = array( 'key' => Session::get('aes_key'), 'iv' => Session::get('aes_iv'), ); } //       ,    if (!(isset($options['key']) && isset($options['iv']))) { Log::error("Either key or iv not set"); throw new Exception("Either key or iv not set"); } //     Session::put('aes_key', $options['key']); Session::put('aes_iv', $options['iv']); //  Crypt_AES,   phpseclib $aes = new \Crypt_AES(CRYPT_AES_MODE_CBC); $aes->setKeyLength(256); $aes->setKey(Base64::UrlDecode($options['key'])); $aes->setIV(Base64::UrlDecode($options['iv'])); $aes->enablePadding(); //     $this->aes = $aes; $this->isAesInitialized = true; } 

рдЕрдм рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ рд╕реНрд╡рдпрдВ:
  public function aesEncrypt($data) { //     RSA if (!$this->isAesInitialized) { $this->initAes(); } return $this->aes->encrypt($data); } public function aesDecrypt($data) { if (!$this->isAesInitialized) { $this->initAes(); } return $this->aes->decrypt($data); } 

рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреНрд▓рд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЖрдЧреЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдЗрдирдХрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╡рд╣ (рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдирд┐рдХрд▓рддрд╛ рд╣реИ ) mysecureapp / api рдХреЗ рд▓рд┐рдП рдПрдХ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ: рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ: рдИрдореЗрд▓ = asdpofih345kjafg рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб = zxcvzxcvzxcvzxcv - рдпрд╣ рдПрдИрдПрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рд╣реИред рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрдирдкреБрдЯ рдореБрдЦреМрдЯрд╛ рдХреЗ рд╕рдорд╛рди рдПрдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреАрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ред рдЗрд╕реЗ DecryptedInput рдХрд╣реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / lib / MySecureApp / Cryptography / DecryptedInput.php рдореЗрдВ рдмрдирд╛рдПрдБред рд╣рдо рдЗрд╕реЗ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЗрдирдкреБрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ: рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (), рд╕рднреА () рдФрд░ рдХреЗрд╡рд▓ ():
 <?php namespace MySecureApp\Cryptography; use MySecureApp\Helpers\Base64; /** * Provides funcitonality for getting decrypted Input paramters * (encrypted with AES) * Class DecryptedInput * @package MySecureApp\Cryptography */ class DecryptedInput { /** * Array of raw (non-decrypted) input parameters * @var array */ protected $params; /** * Array of decrypted values * @var array */ protected $decryptedParams = array(); /** * @var Cryptography */ protected $crypt; /** * @param Cryptography $crypt Injected Cryptography object used for decrypting */ public function __construct(Cryptography $crypt) { //     Cryptography //  $this->crypt = $crypt; //     $params $this->params = \Input::all(); } /** * Returns decrypted input parameter * @param $key * @return String */ public function get($key) { // ,        if (isset($this->decryptedParams[$key])) { return $this->decryptedParams[$key]; } //  $value = $this->crypt->aesDecrypt(Base64::UrlDecode($this->params[$key])); //     $this->decryptedParams[$key] = $value; //    return $value; } /** * Returns all input params decrypted * @return array */ public function all() { //       foreach ($this->params as $key => $value) { $this->decryptedParams[$key] = $this->get($key); } //      return $this->decryptedParams; } /** * Returns only specified input parameters * @return array */ public function only() { $args = func_get_args(); $result = array(); foreach($args as $arg) { $result[$arg] = $this->get($arg); } return $result; } } 

рд▓рд╛рдЗрди 33 рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ "рдореИрдиреНрдпреБрдЕрд▓" рдХрд░рдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд▓рд╛рд░рд╡реЗрд▓ рдХреА рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкрд░рдВрдкрд░рд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗ - рддрд╛рдХрд┐ рд╡рд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░реЗред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ:
  1. рдЖрдЗрдП DecryptedIntput рдХреЗ рдореБрдЦреМрдЯреЗ рдХреЛ рдирд┐рдпрдорд┐рдд рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рдмрдирд╛рдПрдВ
  2. рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рдмрд╛рд╣рд░ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рддреЗ рд╣реИрдВред
  3. рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдЕрдВрджрд░ рдкреВрд░реА рдмрд╛рдд "рд░рдЬрд┐рд╕реНрдЯрд░" рдХрд░рддреЗ рд╣реИрдВред

рддреЛ, рдЪрд▓реЛ рдХреНрд░рдо рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред DecryptedInput рдХрд╛ рдореБрдЦреМрдЯрд╛ рдмрдирд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди / lib / MySecureApp / Facades рдореЗрдВ DecryptedInput.php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
 <?php namespace MySecureApp\Facades; use Illuminate\Support\Facades\Facade; class DecryptedInput extends Facade { protected static function getFacadeAccessor() { // " ",     // DecryptedInput   return 'decryptedinput'; } } 

рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдирд╛рдореЛрдВ рдореЗрдВ рднреНрд░рдо рд╣реЛрдЧрд╛: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд░реНрдЧ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ DecryptedInput рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдХ рдЗрдирдкреБрдЯ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ, рджреВрд╕рд░рд╛ рдЗрд╕рдХрд╛ рдореБрдЦреМрдЯрд╛ рд╣реИ, рдЙрдирдХреЗ рдкрд╛рд╕ рдмрд╕ рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рди рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдВрднрд╡рддрдГ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдбрдЗрдирдкреБрдЯрдлреИрдХреЗрдб рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдиреЛрдЯ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ - рдЖрдк рддрдп рдХрд░рддреЗ рд╣реИрдВред рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рд╣рдореЗрд╢рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ (рдореИрдВ рдЗрд╕реЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрднреА рддрдХ рдЗрд╕ рд╢рдмреНрдж рдХреЗ рдПрдХ рд╕рднреНрдп рдЕрдиреБрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрдпрд╛ рд╣реВрдВ, рд╢рдмреНрджрд╢рдГ рдпрд╣ рдПрдХ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИ)ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди / lib / MySecureApp / рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ CryptoServiceProvider.php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
 <?php namespace MySecureApp\Providers; use Illuminate\Foundation\AliasLoader; use Illuminate\Support\ServiceProvider; use MySecureApp\Cryptography\Cryptography; use MySecureApp\Cryptography\DecryptedInput; class CryptoServiceProvider extends ServiceProvider { /** * Register the service provider. * * @return void */ public function register() { //   Cryptograpgy $this->app->singleton('cryptography', function() { return new Cryptography(); }); //    Input'   'decryptedinput' $this->app['decryptedinput'] = $this->app->share(function($app) { return new DecryptedInput($app['cryptography']); }); //     DirectInput' $this->app->booting(function() { $loader = AliasLoader::getInstance(); $loader->alias('DecryptedInput', 'MySecureApp\Facades\DecryptedInput'); }); } } 

рдЦреИрд░, рдореИрдВ рд╣рдореЗрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдмрдзрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдордиреЗ рдЖрдзрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдЕрднреА рдмрд╣реБрдд рд╕реЗ рдмрдЪреЗ рд╣реИрдВред рдмрд╕ рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдереЛрдбрд╝рд╛ рдХрдо ... рд╣рдХреАрдХрдд рдореЗрдВ, рдЗрд╕ рд╕рдордп рд╣рдордиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдПрдХ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрднреА рдмрд╛рдХреА рд╣реИред

рдЖрдк рдПрдХ рдмреНрд░реЗрдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмреАрдЪ, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ DecryptedInput рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ред рдЕрдм рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
  // ... $email = DecryptedInput::get('email'); $password = DecryptedInput::get('password'); //  ... extract(DecryptedInput::only('email', 'password')); //    2  : // $email  $password 

рдпрд╣ рдХреИрд╕рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ? рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдЙрд░реНрдл тАЛтАЛрдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓рд╛рд░рд╡реЗрд▓ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдбрдЗрдВрдкреБрдЯ рд╡рд░реНрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдореБрдЦреМрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдбрд┐рдирдкреБрдЯ рдХреБрдВрдЬреА ( рдПрдХреНрд╕реЗрд╕рд░ ) рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж getFacadeAccessor () рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛, рд▓рд╛рд░рд╡реЗрд▓ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдореБрдЦреМрдЯрд╛ рдХреЗ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рднреА рдХреЙрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ \ MySececAppApp \ Cryptography \ DecryptedInput class ('рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдбрд┐рдирдкреБрдЯ' рдХреБрдВрдЬреА ) рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ "рдЦреАрдВрдЪрдирд╛" рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  // ... $this->app['decryptedinput'] = $this->app->share(function($app) { //   DecryptedInput    // Input',  )    , //  )      // use MySecureApp/Cryptography/DecryptedInput //   ,     //  Cryptography,   return new DecryptedInput($app['cryptography']); }); // ... 

рдЦреИрд░, рд╣рдо рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ :) рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди ApiController рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ ред рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреНрдпрд╛ рд╣реИ?
  1. рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдЙрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  2. рдЗрд╕реЗ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

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

рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЗрд╕ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рд▓рд┐рдЦреЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / lib / MySecureApp / Filters рдореЗрдВ OutgoingCryptFilter.php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
 <?php namespace MySecureApp\Filters; use MySecureApp\Cryptography\Cryptography; use MySecureApp\Helpers\Base64; /** * Class OutgoingCryptFilter * Encrypts and signs the response * * @package MySecureApp\Filter */ class OutgoingCryptFilter { private $crypt; public function __construct(Cryptography $crypt) { //      , //        //  Cryptography - Laravel    $this->crypt = $crypt; } //   public function filter($route, $request, $response) { //    ,   //   $content = $response->getOriginalContent(); if (!is_string($content)) { $content = json_encode($content); } //   $content = Base64::UrlEncode($this->crypt->aesEncrypt($content)); //    $sign = Base64::UrlEncode($this->crypt->rsaSign($content)); //    (  ) : // 'data' => $content, -  // 'sign' => $sign, -  // ""   ,     $response->setContent(['data' => $content, 'sign' => $sign]); } } 

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

рдЕрдм рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдордиреЗ рдпрд╣рд╛рдВ рджрд╛рд░реНрд╢рдирд┐рдХрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: app / filter.php :
 //   cryptOut Route::filter('cryptOut', 'MySecureApp\Filters\OutgoingCryptFilter'); 

рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрдЪрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦреЗрдВ: рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ (рддрдерд╛рдХрдерд┐рдд рд╣реИрдВрдбрд╢реЗрдХ) рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдереНрд░реЗрдб рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдзрд┐ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ред

рдореИрдВ рдЕрдкрдиреЗ рдЬреАрд╡рди рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд▓рдХреНрд╖реНрдп рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ (рд▓рд╛рдЗрд╕реЗрдВрд╕ рдЪреЗрдХ рдХреА рддрд░рд╣ рдХреБрдЫ)ред

рддреЛ, рдпрд╣рд╛рдБ ApiController рдирд┐рдпрдВрддреНрд░рдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ :
 <?php use MySecureApp\Cryptography\Cryptography; class ApiController extends BaseController { /** * @var Crypt */ private $crypt; public function __construct(Cryptography $crypt) { $this->crypt = $crypt; //  after- (    ) //     :    except: //       postInit,    //       $this->afterFilter('cryptOut', array('except' => 'postInit')); } //  ()     //   :    RSA- //   AES .     : key  iv public function postInit() { // ,    if (!(Input::has('key') && Input::has('iv'))) { return 'ERROR 1'; } //     $key  $iv extract(Input::only('key', 'iv')); //   $key = $this->crypt->rsaDecrypt($key); $iv = $this->crypt->rsaDecrypt($iv); //       == false (  ) //    if (!($key && $iv)) { return 'ERROR 2'; } //  AES   $this->crypt->initAes(array( 'key' => $key, 'iv' => $iv, )); return 'OK'; } } 

рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдерд╛ред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рдЧреНрд░рд╛рд╣рдХ рдмрд╕ рдПрдХ рдкрд╛рда рд╕рдВрджреЗрд╢ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ рдареАрдХ рд╣реИред рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, ERRORред рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкрд╛рда рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд▓реМрдЯрд╛рдпрд╛ - рд╕рдВрднрд╛рд╡рд┐рдд рдкрдЯрд╛рдЦрд╛ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВред app / lib / MySecureApp / Dto / Responses / ResponseBase.php :
 <?php namespace MySecureApp\Dto\Responses; abstract class ResponseBase implements \JsonSerializable { //   public $type; } 

рдХрд╣реАрдВ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЧреНрд░рд╛рд╣рдХ рдПрдХ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХреА рддрд░рд╣ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдЕрдм рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрддреНрддрд░ рд▓рд┐рдЦреЗрдВрдЧреЗ : LoginResponse ( app / lib / MySecureApp / Dto / Responses / LoginResponse.php ):
 <?php namespace MySecureApp\Dto\Responses; class LoginResponse extends ResponseBase { const LOGIN_SUCCESS = true; const LOGIN_FAIL = false; public $loginResult; //   public $expire; // ,      public function __construct() { $this->type = 'login'; $this->expire = '0000-00-00 00:00:00'; } /** * (PHP 5 &gt;= 5.4.0)<br/> * Specify data which should be serialized to JSON * @link http://php.net/manual/en/jsonserializable.jsonserialize.php * @return mixed data which can be serialized by <b>json_encode</b>, * which is a value of any type other than a resource. */ public function jsonSerialize() { return [ 'type' => $this->type, 'loginResult' => $this->loginResult, 'expire' => $this->expire, ]; } } 

рдЕрдм рдкреЛрд╕реНрдЯрд▓рд╛рдЗрди рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ :
  public function postLogin() { //    $creds = [ 'email' => DecryptedInput::get('email'), 'password' => DecryptedInput::get('password'), ]; $response = new \MySecureApp\Dto\Responses\LoginResponse; if (!Auth::attempt($creds, false)) { //    ,     loginResult $response->loginResult = \MySecureApp\Dto\Responses\LoginResponse::LOGIN_FAIL; //   return json_encode($response); } $response->loginResult = \MySecureApp\Dto\Responses\LoginResponse::LOGIN_SUCCESS; $response->expire = Auth::user()->tariffExpire; return json_encode($response); } 

рдЦреИрд░, рдмрд╕ рдЗрддрдирд╛ рд╣реАред 4 рд╡реАрдВ рдФрд░ 5 рд╡реАрдВ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рд╣рдо POST рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DecryptedInput рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╕рд╛рджрд░,
рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ [рдЕрдореАрдЧрд╛] рдИрдЧреЛрд░реЛрд╡ред

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

рдореИрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рджреВрдВрдЧрд╛, рдмрд┐рдирд╛ рдХреЛрдб рдХреЗ - рдореИрдВ рдЗрд╕реЗ рд╣реЛрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛)?

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВ рдЬреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди / рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрд╕рд┐рдорд┐рдЯреНрд░рд┐рдХ рдбреАрдХреНрд░рд┐рдкреНрдЯ, рд╕рд┐рдорд┐рдЯреНрд░рд┐рдХрдЗрдиреНрдХреНрд░рд┐рдкреНрдЯ, рдЖрджрд┐ рдЬреИрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред рдФрд░ рд╡рд░реНрддрдорд╛рди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ RsAAesCryptography рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рджреВрд╕рд░реЗ, рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдРрдк рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рдФрд░ рдЬрд╣рд╛рдВ рднреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИ , рдЗрд╕реЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВред

рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде, рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдл рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЧреВ рдХрд░рдирд╛ (рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрдЗрдВрдЯрд░рдлреЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрдирд╛) рдФрд░ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдпрд╛ рдмрдирд╛рдпрд╛ рд╡рд░реНрдЧ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдм рд╕рдм рдХреБрдЫ рд╣реЛрдиреЗ рд▓рдЧрд╛ рд╣реИред

PPS рдХреБрдЫ рднреВрд▓ рдЧрдпрд╛: рдПрдХ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВред рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / routes.php :
 Route::controller('api', 'ApiController'); 

рдФрд░ рд╣рдорд╛рд░реЗ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / config / app.php :
 'providers' => array( // ... 'MySecureApp\Providers\CryptoServiceProvider', ), 


UPD : рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдкреИрдХреЗрдЬ рд▓рд┐рдЦрд╛: Amegatron / Cryptoapi

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


All Articles