рдкреНрд░рд╕реНрддреБрдд рд╣реИ libgcrypt рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рд╢реБрдн рджреЛрдкрд╣рд░, рд╣рдмреНрдмрд░!

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

рдпрд╣ рд▓реЗрдЦ libgcrypt рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдЧрд╛ред

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


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

рдЦреБрдж libgcrypt рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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

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


рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ (рдЙрдкрдпреЛрдЧ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдЗрдВрдЧрд┐рдд) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
  1. gcry_cipher_open - рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИрдВрдбрд▓ рдмрдирд╛рдПрдВ
  2. gcry_cipher_setkey - рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░реЗрдВ
  3. gcry_cipher_setiv - рдЖрд░рдВрднрд┐рдХ рд╡реЗрдХреНрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
  4. gcry_cipher_encrypt - рдЯреЗрдХреНрд╕реНрдЯ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди
  5. gcry_cipher_close - рд╕рдВрджрд░реНрдн рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдХреЛ рдмрдВрдж рдХрд░рдирд╛

рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХред

gcry_error_t gcry_cipher_open (gcry_cipher_hd_t *hd, int algo, int mode, unsigned int flags) 

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

рдПрдЪрдбреА рд╣рдорд╛рд░реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рд╡рд┐рд╡рд░рдгрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИред

algo рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:
GCRY_CIPHER_IDEA - IDEA рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдЗрд╕реЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдкреЗрдЯреЗрдВрдЯ рдХрд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдлреНрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред
GCRY_CIPHER_3DES - (EDE рдХреЗ рд░реВрдк рдореЗрдВ 3 рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЯреНрд░рд┐рдкрд▓-рдбреЗрд╕) рд╕рдордорд┐рдд рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░ред
GCRY_CIPHER_BLOWFISH - рдмреНрд▓реЛрдлрд╝рд┐рд╢ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ 128-рдмрд┐рдЯ рдХреБрдВрдЬреА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
RIJNDAEL, TWOFISH, AES, SERPENT рдЗрддреНрдпрд╛рджрд┐ рднреА рд╣реИрдВред
(рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ )

рдореЛрдб - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ:

рдЭрдВрдбреЗ - 0 рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╢реВрдиреНрдп), рдпрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЭрдВрдбреЗ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди:

рдЙрджрд╛рд╣рд░рдг

 gcryError = gcry_cipher_open( &gcryCipherHd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS); 

рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ gcry_cipher_setup рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдВрдЬреА рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

 gcry_error_t gcry_cipher_setkey (gcry_cipher_hd_t hd, const void *k, size_t l) 

HD - рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛
k рдХреБрдВрдЬреА рд╣реИ, рдпрд╣ рдкрд╛рд╕рд╡рд░реНрдб (рд╡рд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ) рднреА рд╣реИ
рдПрд▓ - рдХреБрдВрдЬреА рд▓рдВрдмрд╛рдИ (рд╕реНрдЯреНрд░рд▓реЗрди (рдХреЗ))

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

 gcry_error_t gcry_cipher_encrypt (gcry_cipher_hd_t h, unsigned char *out, size_t outsize, const unsigned char *in, size_t inlen) 

рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдпрд╛ рджреЛ рдмрдлрд╝рд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдорд╛рди NULL рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ inlen 0 (рд╢реВрдиреНрдп) рд╣реИ, рддреЛ рдПрдХ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдЖрдЙрдЯ рдмрдлрд░, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЧреИрд░-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкрд╛рда рд╣реЛрддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╕рдордп, рдЗрд╕реЗ рдирдП рдкрд╛рда, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдорд╛рди рдХреЛ рдЧреИрд░-рдкреВрд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдирд▓рд╛рдЗрди рдмрд╛рдЗрдЯ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯ рдмрдлрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдЗрдирд▓реЗрди рдХрд╛ рдЖрдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдЖрдЙрдЯрд╕рд╛рдЗрдб рдХреЛ рдЖрдЙрдЯ рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдЪрдВрдХ рдХрд╛ рдЖрдХрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХреЗ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЧрд╣ рд╣реИ рдпрд╛ рдирд╣реАрдВред (рдУрд╡рд░рд▓реЗрдкрд┐рдВрдЧ рдмрдлрд╝рд░реНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред)

рдЪреБрдиреЗ рд╣реБрдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдмрдлрд╝рд░реНрд╕ рдХреА рд▓рдВрдмрд╛рдИ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рдлрд▓ рд╣реИ, рддреЛ рд░рд┐рдЯрд░реНрди рдХреЛрдб 0 (рд╢реВрдиреНрдп) рд╣реИред рдЕрдиреНрдпрдерд╛, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

рдореЗрдореЛрд░реА рдФрд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, gcry_cipher_close рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

 void gcry_cipher_close (gcry_cipher_hd_t h) 

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

рдбреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛


рдбреА-рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрди рдлрд╝рдВрдХреНрд╢рди рдХреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН (рдЙрдкрдпреЛрдЧ рдХреЗ рдХреНрд░рдо рдореЗрдВ рдЗрдВрдЧрд┐рдд):
  1. gcry_cipher_open - рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИрдВрдбрд▓ рдмрдирд╛рдПрдВ
  2. gcry_cipher_setkey - рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░реЗрдВ
  3. gcry_cipher_setiv - рдЖрд░рдВрднрд┐рдХ рд╡реЗрдХреНрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
  4. gcry_cipher_decrypt - рдЯреЗрдХреНрд╕реНрдЯ рдбреА-рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди
  5. gcry_cipher_close - рд╕рдВрджрд░реНрдн рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдХреЛ рдмрдВрдж рдХрд░рдирд╛

рдЪреВрдВрдХрд┐ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди (gcry_cipher_decrypt рдХреЛ рдЫреЛрдбрд╝рдХрд░) рд╕рдорд╛рди рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рдбреА-рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣реА рдорд╛рдирддреЗ рд╣реИрдВред

 gcry_error_t gcry_cipher_decrypt (gcry_cipher_hd_t h, unsigned char *out, size_t outsize, const unsigned char *in, size_t inlen) 

рдЬ - рд╕рдВрджрд░реНрдн рд╕рдВрднрд╛рд▓
рдЖрдЙрдЯ - рдмрдлрд░ рдЬрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдореА (рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб) тАЛтАЛрдЯреЗрдХреНрд╕реНрдЯ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛
рдЖрдЙрдЯрд╕рд╛рдЗрдЬрд╝ - рдмрд╛рд╣рд░ рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХрд╛ рдЖрдХрд╛рд░
рдореЗрдВ - рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ
inlen - рд╕рд╛рдЗрдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЖрдХрд╛рд░

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

рдЪреБрдиреЗ рд╣реБрдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдмрдлрд╝рд░реНрд╕ рдХреА рд▓рдВрдмрд╛рдИ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рдлрд╝рдВрдХреНрд╢рди 0. рд╡рд╛рдкрд╕ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ

 #include <stdio.h> #include <gcrypt.h> #define ENCR 1 #define DECR 0 void myCrypt(int encdec, const char * pass, const char * salt, const char * text) { gcry_error_t gcryError; gcry_cipher_hd_t hd; size_t i; size_t passLength = strlen(pass); size_t saltLength = strlen(salt); size_t textLength = strlen(text)+encdec; char * outBuffer = (char*)malloc(textLength); printf("%scryption...\n", encdec?"En":"De"); printf("passLength = %d\n", passLength); printf("saltLength = %d\n", saltLength); printf("textLength = %d\n", textLength); printf(" pass = %s\n", pass); printf(" salt = %s\n", salt); printf(" text = %s\n", encdec?text:"<null>"); //    - GCRY_CIPHER_AES128 //      //   GCRY_CIPHER_CBC_CTS,        gcryError = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, GCRY_CIPHER_CBC_CTS); if (gcryError) { printf("gcry_cipher_open failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError)); return; } gcryError = gcry_cipher_setkey(hd, pass, passLength); if (gcryError) { printf("gcry_cipher_setkey failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError)); return; } gcryError = gcry_cipher_setiv(hd, salt, saltLength); if (gcryError) { printf("gcry_cipher_setiv failed: %s/%s\n", gcry_strsource(gcryError),gcry_strerror(gcryError)); return; } switch (encdec) { case ENCR: gcryError = gcry_cipher_encrypt(hd, outBuffer, textLength, text, textLength); break; case DECR: gcryError = gcry_cipher_decrypt(hd, outBuffer, textLength, text, textLength); } if (gcryError) { printf("gcry_cipher_encrypt failed: %s/%s\n", gcry_strsource(gcryError), gcry_strerror(gcryError)); return; } switch (encdec) { case ENCR: printf("Ecnrypted text = "); for (i = 0; i<textLength; i++) printf("%02X", (unsigned char)outBuffer[i]); printf("\n"); break; case DECR: printf("Original text = %s\n", outBuffer); } gcry_cipher_close(hd); free(outBuffer); } int main(int argc, char **argv) { if ( argc != 4 ) { printf("usage: %s <-e|-d> \"<password>\" \"<salt>\"\n", argv[0]); return 1; } int encdec = ENCR; char line[1024]; printf("Enter text: "); fgets(line, sizeof(line), stdin); if ( !strcmp(argv[1], "-d") ) { //    16    int i = 0; char a[3] = {"00"}; for (; i<strlen(line); i+=2) { sprintf(a, "%c%c", line[i], line[i+1]); line[i/2] = strtol(a, NULL, 16); } line[i/2-1] = '\0'; encdec = DECR; } myCrypt(encdec, argv[2], argv[3], line); return 0; } 

рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди

gcc -o crypto main.c -lgcrypt

рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ

[serge@magnum enc]$ ./crypto -e "This's my passwd" "It is kinda salt"
Enter text:
Encryption...
passLength = 16
saltLength = 16
textLength = 65
pass = This's my passwd
salt = It is kinda salt
text =
Ecnrypted text = 7DA4C2CB7088BC7432E243B1B1ACAE2A4301CE92D5884404B5AFF181EC4C1B17D3B0565FD82BD88D78916506048BA20E87FA5DDE39288FCC32CA3EF02647F7B140

[serge@magnum enc]$ ./crypto -d "This's my passwd" "It is kinda salt"
Enter text: 7DA4C2CB7088BC7432E243B1B1ACAE2A4301CE92D5884404B5AFF181EC4C1B17D3B0565FD82BD88D78916506048BA20E87FA5DDE39288FCC32CA3EF02647F7B140
Decryption...
passLength = 16
saltLength = 16
textLength = 65
pass = This's my passwd
salt = It is kinda salt
text =
Original text =


рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: http://www.gnupg.org/documentation/manuals/gcrypt

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


All Articles