рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАред рдХрдХреНрд╖рд╛ рдХрд╛ рд╕рд┐рдлрд░

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЬрдХреЛрдм рдЬреЗрдирдХреЛрд╡ рджреНрд╡рд╛рд░рд╛ рджреВрд╕рд░реЗ рд▓реЗрдЦ "рдЬрд╛рд╡рд╛ рд╕рд┐рдлрд░" рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЛ рд╢реБрд░реБрдЖрддреА рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред


рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛:


  1. рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА
  2. рд╕рд┐рдлрд╝рд░
  3. MessageDigest
  4. рдореИрдХ
  5. рд╣рд╕реНрддрд╛рдХреНрд╖рд░
  6. keypair
  7. Keygenerator
  8. KeyPairGenerator
  9. KeyStore
  10. keytool
  11. рдкреНрд░рдорд╛рдгрдкрддреНрд░
  12. CertificateFactory
  13. CertPath

рдЬрд╛рд╡рд╛ рд╕рд┐рдлрд░ (рд╕рд┐рдлрд░)


рдЬрд╛рд╡рд╛ рд╕рд┐рдлрд░ рдХреНрд▓рд╛рд╕ ( javax.crypto.Cipher ) рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИред "рд╕рд┐рдлрд░" рд╢рдмреНрдж рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рд╢рдмреНрдж рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдХреЛ рд╕рд┐рдлрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдПрдирдХреНрд░рд┐рдкреНрдЯрд░ / рдбрд┐рдХреНрд░рд┐рдкреНрдЯрд░ рдпрд╛ рдХреБрдЫ рдФрд░ред рдЬрд╛рд╡рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рд┐рдлрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдзреНрдпрд╛рдп рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдлрд░ рд╡рд░реНрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рд╕рд┐рдлрд░ рдХреНрд░рд┐рдПрд╢рди


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


Cipher cipher = Cipher.getInstance("AES"); 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдПрдИрдПрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рдлрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред


рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЛрдб


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


  • EBC - рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдХреЛрдбрдмреБрдХ (рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдХреЛрдбрдмреБрдХ рдореЛрдб )
  • рд╕реАрдмреАрд╕реА - рд╕рд┐рдлрд░ рдмреНрд▓реЙрдХ рдЪреЗрдирд┐рдВрдЧ
  • CFB - рд╕рд┐рдлрд░ рдлреАрдбрдмреИрдХ (рд╕рд┐рдлрд░ рдлреАрдбрдмреИрдХ рдореЛрдб )
  • рдУрдПрдлрдмреА - рдЖрдЙрдЯрдкреБрдЯ рдлреАрдбрдмреИрдХ
  • CTR - рдХрд╛рдЙрдВрдЯрд░ (рдХрд╛рдЙрдВрдЯрд░ рдореЛрдб )

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


 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 

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


рд╕рд┐рдлрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди


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


  • рд╢рд╛рд╕рди
  • рдХреБрдВрдЬреА

рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЛрдб рдореЗрдВ рдПрдХ рд╕рд┐рдлрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЖрд░рдореНрдн рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 Key key = ... // /    cipher.init(Cipher.ENCRYPT_MODE, key); 

рдФрд░ рдпрд╣рд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдореЛрдб рдореЗрдВ рдПрдХ рд╕рд┐рдлрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 Key key = ... ///    cipher.init(Cipher.DECRYPT_MODE, key); 

рдбреЗрдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди


рд╕рд┐рдлрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рджреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:


  • update()
  • doFinal()

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


 byte[] plainText = "abcdefghijklmnopqrstuvwxyz".getBytes("UTF-8"); byte[] cipherText = cipher.doFinal(plainText); 

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


 byte[] plainText = cipher.doFinal(cipherText); 

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


 byte[] data1 = "abcdefghijklmnopqrstuvwxyz".getBytes("UTF-8"); byte[] data2 = "zyxwvutsrqponmlkjihgfedcba".getBytes("UTF-8"); byte[] data3 = "01234567890123456789012345".getBytes("UTF-8"); byte[] cipherText1 = cipher.update(data1); byte[] cipherText2 = cipher.update(data2); byte[] cipherText3 = cipher.doFinal(data3); 

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


 byte[] plainText1 = cipher.update(cipherText1); byte[] plainText2 = cipher.update(cipherText2); byte[] plainText3 = cipher.doFinal(cipherText3); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ, рд╕рд┐рдлрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдореЛрдб рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдПрдХ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди / рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди


рд╕рд┐рдлрд░ рд╡рд░реНрдЧ рдХреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╡рд┐рдзрд┐рдпрд╛рдБ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЕрджреНрдпрддрди () рдФрд░ / рдпрд╛ doFinal () рд╡рд┐рдзрд┐ рдХреЛ рдСрдлрд╕реЗрдЯ рдФрд░ рд▓рдВрдмрд╛рдИ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


 int offset = 10; int length = 24; byte[] cipherText = cipher.doFinal(data, offset, length); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реВрдЪрдХрд╛рдВрдХ 10 рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рдЖрдЧреЗ 24 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рд╕рд┐рдлрд░ рдХреЗ рдЖрд░рдВрдн рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред


рдореМрдЬреВрджрд╛ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди / рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди


рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рд╕рднреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдЙрджрд╛рд╣рд░рдг рдПрдХ рдирдП рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореМрдЬреВрджрд╛ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдмрд╛рдЗрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рдХреНрд╖реНрдп рдмрд╛рдЗрдЯ рдХреЛ рдЕрджреНрдпрддрди () рдФрд░ / рдпрд╛ doFinal () рдкрджреНрдзрддрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред


 int offset = 10; int length = 24; byte[] dest = new byte[1024]; cipher.doFinal(data, offset, length, dest); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ 10 рд╕реВрдЪрдХрд╛рдВрдХ 24 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдСрдлрд╕реЗрдЯ рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдбреЗрд╕реНрдЯ рдмрд╛рдЗрдЯ рд╕рд░рдгреА 0. рдкрд░ рд╣реИред рдпрджрд┐ рдЖрдк рдбреЗрд╕реНрдЯ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдСрдлрд╕реЗрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдбреЗрдЯ () рдФрд░ doFinal () рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ рдЬреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧреНрдп рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде doFinal () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 int offset = 10; int length = 24; byte[] dest = new byte[1024]; int destOffset = 12 cipher.doFinal(data, offset, length, dest, destOffset); 

рдПрдХ рд╕рд┐рдлрд░ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ


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


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


 Cipher cipher = Cipher.getInstance("AES"); Key key = ... ///    cipher.init(Cipher.ENCRYPT_MODE, key); byte[] data1 = "abcdefghijklmnopqrstuvwxyz".getBytes("UTF-8"); byte[] data2 = "zyxwvutsrqponmlkjihgfedcba".getBytes("UTF-8"); byte[] cipherText1 = cipher.update(data1); byte[] cipherText2 = cipher.doFinal(data2); byte[] data3 = "01234567890123456789012345".getBytes("UTF-8"); byte[] cipherText3 = cipher.doFinal(data3); 

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

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


All Articles