āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

ПŅ€Đ¸Đ˛ĐĩŅ‚ŅŅ‚вŅƒŅŽ
āĻ–ā§āĻŦ āĻŦā§‡āĻļāĻŋ āĻĻāĻŋāĻ¨ āĻ†āĻ—ā§‡, āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻŦāĻŋāĻĻā§āĻ¯āĻžāĻ˛āĻ¯āĻŧā§‡ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤āĻžāĻŽ, āĻ¤āĻ–āĻ¨ "āĻ¤āĻĨā§āĻ¯ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻžāĻ° āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ" āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§‹āĻ°ā§āĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ›āĻŋāĻ˛āĨ¤ āĻ…ā§āĻ¯āĻžāĻ¸āĻžāĻ‡āĻ¨āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯āĻž GIF āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻŽā§āĻŦā§‡āĻĄ āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻŽāĻŋ āĻœāĻžāĻ­āĻžāĻ¤ā§‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻ†āĻŽāĻŋ āĻ•āĻŋāĻ›ā§ āĻ¤āĻžāĻ¤ā§āĻ¤ā§āĻŦāĻŋāĻ• āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻŦ, āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ›ā§‹āĻŸ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤

āĻ¤āĻžāĻ¤ā§āĻ¤ā§āĻŦāĻŋāĻ• āĻ…āĻ‚āĻļ

GIF āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸

GIF (āĻ—ā§āĻ°āĻžāĻĢāĻŋāĻ•ā§āĻ¸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻšā§‡āĻžā§āĻœ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻŸ - āĻ›āĻŦāĻŋ āĻ†āĻĻāĻžāĻ¨-āĻĒā§āĻ°āĻĻāĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸) āĻšāĻ˛ āĻ—ā§āĻ°āĻžāĻĢāĻŋāĻ• āĻ›āĻŦāĻŋ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸, āĻ¯āĻž 256āĻŸāĻŋ āĻ°āĻ™ā§‡āĻ° āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ āĻ—ā§āĻŖāĻŽāĻžāĻ¨ā§‡āĻ° āĻ•ā§āĻˇāĻ¤āĻŋ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ¸āĻ‚āĻ•ā§āĻšāĻŋāĻ¤ āĻĄā§‡āĻŸāĻž āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽāĨ¤ āĻāĻ‡ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸āĻŸāĻŋ 1987 āĻ¸āĻžāĻ˛ā§‡ (GIF87a) CompuServe āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ°āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°ā§‡āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ 1989 āĻ¸āĻžāĻ˛ā§‡, āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸āĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ (GIF89a), āĻ¸ā§āĻŦāĻšā§āĻ›āĻ¤āĻž āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤

GIF āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ˛āĻ• āĻ—āĻ āĻ¨ āĻ†āĻ›ā§‡āĨ¤ āĻāĻ‡ āĻŦā§āĻ˛āĻ•āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯ āĻĨāĻžāĻ•ā§‡ (āĻŦāĻž āĻāĻŸāĻŋ āĻ•āĻŋāĻ›ā§ āĻĒāĻ¤āĻžāĻ•āĻžāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡), āĻ¤āĻžāĻ‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŦā§āĻ˛āĻ• āĻ•ā§‹āĻĨāĻžāĻ¯āĻŧ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ­ā§āĻ˛ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ…āĻ¸āĻŽā§āĻ­āĻŦāĨ¤ GIF89a āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻŸā§‡ āĻ¸āĻšāĻœāĻ¤āĻŽ āĻ¨āĻ¨-āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻŸā§‡āĻĄ GIF āĻ›āĻŦāĻŋāĻ° āĻ—āĻ āĻ¨:

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻ˛āĻ•ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡, āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§€ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻŦā§āĻ˛āĻ• āĻāĻŦāĻ‚ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻšāĻŦ:

  • CT - āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§€ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĨ¤ āĻāĻ‡ āĻĒāĻ¤āĻžāĻ•āĻž āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻĨāĻžāĻ•āĻ˛ā§‡, āĻ˛āĻœāĻŋāĻ•ā§āĻ¯āĻžāĻ˛ āĻ¸ā§āĻ•ā§āĻ°ā§€āĻ¨ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡āĻ˛ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡āĻ‡ āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻļā§āĻ°ā§ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤
  • Size — āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻ†āĻ•āĻžāĻ° āĻāĻŦāĻ‚ āĻ›āĻŦāĻŋāĻ¤ā§‡ āĻ°āĻ™ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĨ¤ āĻāĻ‡ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽāĻžāĻ¨:

āĻ†āĻ¯āĻŧāĻ¤āĻ¨
āĻ°āĻ™ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž
āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻ†āĻ•āĻžāĻ°, āĻŦāĻžāĻ‡āĻŸ

7
256
768

6
128
384

5
64
192

4
32
96

3
16
48

2
8
24

1
4
12

0
2
6

āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ

āĻ‡āĻŽā§‡āĻœ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡:

  • LSB (Least Significant Bit) āĻĒāĻĻā§āĻ§āĻ¤āĻŋ
  • āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻ¸āĻ‚āĻ¯ā§‹āĻœāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ

LSB āĻĒāĻĻā§āĻ§āĻ¤āĻŋ - āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤ āĻāĻŸāĻŋ āĻ•āĻ¨āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°ā§‡āĻ° āĻļā§‡āĻˇ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯ āĻŦāĻŋāĻŸāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ (āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻŦāĻžāĻ‡āĻŸ) āĻ˛ā§āĻ•āĻžāĻ¨ā§‹ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻŦāĻŋāĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŸāĻŋ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ…āĻ‚āĻļ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻŦāĻžāĻ‡āĻŸā§‡āĻ° āĻļā§‡āĻˇ āĻĻā§āĻŸāĻŋ āĻŦāĻŋāĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‡āĨ¤ āĻāĻ° āĻŽāĻžāĻ¨ā§‡ āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ 24-āĻŦāĻŋāĻŸ āĻšāĻŋāĻ¤ā§āĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ°āĻ™ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸāĻŸāĻŋ āĻ˛āĻžāĻ˛, āĻ¨ā§€āĻ˛ āĻāĻŦāĻ‚ āĻ¸āĻŦā§āĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻŦāĻžāĻ‡āĻŸ, āĻāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻāĻŽā§āĻŦā§‡āĻĄ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ°āĻ™ā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• 3/255 āĻ—ā§āĻ°ā§‡āĻĄā§‡āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻŦā§‡āĨ¤ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨, āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻŽāĻžāĻ¨ā§āĻˇā§‡āĻ° āĻšā§‹āĻ–ā§‡ āĻ…āĻĻā§ƒāĻļā§āĻ¯ āĻŦāĻž āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°āĻž āĻ•āĻ āĻŋāĻ¨ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻ¤, āĻ¨āĻŋāĻŽā§āĻ¨-āĻŽāĻžāĻ¨ā§‡āĻ° āĻ¤āĻĨā§āĻ¯ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ā§‡ āĻāĻŸāĻŋ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤

āĻ¤āĻĨā§āĻ¯ā§‡āĻ° āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ‡āĻŽā§‡āĻœ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻ†āĻ•āĻžāĻ°ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°āĻŦā§‡āĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻ†āĻ•āĻžāĻ° 256 āĻ°āĻ™ā§‡āĻ°, āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ°āĻ™ā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡ āĻĻā§āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻŦāĻŋāĻŸ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯ (āĻ›āĻŦāĻŋāĻ¤ā§‡ āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻ¸āĻš) 192 āĻŦāĻžāĻ‡āĻŸāĨ¤ āĻāĻ•āĻŦāĻžāĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻ‡āĻŽā§‡āĻœā§‡ āĻāĻŽā§āĻŦā§‡āĻĄ āĻ•āĻ°āĻž āĻšāĻ˛ā§‡, āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ†āĻ•āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤

āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŖ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ, āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° GIF āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻ¸āĻš āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻšāĻŦā§‡āĨ¤ āĻāĻ° āĻ¸āĻžāĻ°āĻŽāĻ°ā§āĻŽ āĻšāĻ˛ āĻāĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻ†āĻ•āĻžāĻ° āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° āĻĢāĻ˛ā§‡ āĻ•āĻžāĻ˛āĻžāĻ° āĻŦāĻžāĻ‡āĻŸā§‡āĻ° āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻŦāĻžāĻ‡āĻŸ āĻ˛ā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¸ā§āĻĨāĻžāĻ¨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻŋ āĻ¯ā§‡ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻ†āĻ•āĻžāĻ° 2 āĻ°āĻ™ (6 āĻŦāĻžāĻ‡āĻŸ), āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻŽāĻŦā§‡āĻĄā§‡āĻĄ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ¸āĻ°ā§āĻŦāĻžāĻ§āĻŋāĻ• āĻ†āĻ•āĻžāĻ° 256 × 3–6 = 762 āĻŦāĻžāĻ‡āĻŸ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ…āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻšāĻ˛ āĻ•āĻŽ āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋāĻ• āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž; āĻāĻŽāĻŦā§‡āĻĄ āĻ•āĻ°āĻž āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻāĻĄāĻŋāĻŸāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĒāĻĄāĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻ¯āĻĻāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ā§‡āĻ° āĻļāĻŋāĻ•āĻžāĻ° āĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤

āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ• āĻ…āĻ‚āĻļ

āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨

āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻāĻŦāĻ‚ āĻĄāĻŋāĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻŦā§‡ com.tsarik.steganography. āĻāĻ‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ Encryptor āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸āĻš encrypt и decrypt, āĻ•ā§āĻ˛āĻžāĻ¸ Binary, āĻ¯āĻž āĻŦāĻŋāĻŸ āĻ…ā§āĻ¯āĻžāĻ°ā§‡, āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ UnableToEncryptException и UnableToDecryptException, āĻ¯āĻž āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ Encryptor āĻ¯āĻĨāĻžāĻ•ā§āĻ°āĻŽā§‡ āĻāĻ¨āĻ•ā§‹āĻĄāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĄāĻŋāĻ•ā§‹āĻĄāĻŋāĻ‚ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡āĨ¤

āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ com.tsarik.programs.gifed āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻšāĻ˛āĻŽāĻžāĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻŦā§‡ main, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ; āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ¯āĻž āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡; āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĨ¤

āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡ com.tsarik.programs.gifed.gif āĻ•ā§āĻ˛āĻžāĻ¸ GIFEncryptorByLSBMethod и GIFEncryptorByPaletteExtensionMethod. āĻāĻ‡ āĻ‰āĻ­āĻ¯āĻŧ āĻ•ā§āĻ˛āĻžāĻ¸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻŦā§‡ Encryptor.

GIF āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻŸā§‡āĻ° āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻšāĻŋāĻ¤ā§āĻ° āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§āĻ°āĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻāĻ•āĻŸāĻŋ āĻ›āĻŦāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡, āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻļā§āĻ°ā§āĻ¤ā§‡ āĻŦāĻŋāĻŸā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•ā§āĻ°āĻŽ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ¯āĻž āĻĄāĻŋāĻ•ā§‹āĻĄāĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻĒāĻĄāĻŧā§‡ āĻāĻŦāĻ‚ āĻ¸āĻ āĻŋāĻ•āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻŽā§‡āĻ˛ā§‡ āĻ¨āĻž, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¯ā§‡ āĻ›āĻŦāĻŋāĻ¤ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻ˛ā§āĻ•āĻžāĻ¨ā§‹ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¨ā§‡āĻ‡āĨ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋāĻ° āĻĻā§ˆāĻ°ā§āĻ˜ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¨āĻŋāĻœā§‡āĻ‡ āĻŽā§‡āĻ¸ā§‡āĻœā§‡āĻ° āĻŸā§‡āĻ•ā§āĻ¸āĻŸāĨ¤

āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸ āĻĄāĻžāĻ¯āĻŧāĻžāĻ—ā§āĻ°āĻžāĻŽ:

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻ•āĻ°ā§āĻŽāĻ¸ā§‚āĻšāĻŋāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨

āĻĒā§āĻ°ā§‹ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨āĻ•ā§‡ āĻĻā§āĻŸāĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡ āĻ­āĻžāĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ: āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻāĻŦāĻ‚ āĻĄāĻŋāĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ Encryptor, āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ GIFEncryptorByLSBMethod и GIFEncryptorByPaletteExtensionMethod, āĻāĻŦāĻ‚ āĻ‡āĻ‰āĻœāĻžāĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨āĨ¤

āĻ•ā§āĻ˛āĻžāĻ¸ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§āĻ¨ GIFEncryptorByLSBMethod.

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° firstLSBit и secondLSBit āĻ‡āĻŽā§‡āĻœā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŦāĻžāĻ‡āĻŸā§‡āĻ° āĻŦāĻŋāĻŸā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻāĻŦāĻ‚ āĻ¯ā§‡āĻ–āĻžāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻĒāĻĄāĻŧāĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻŽāĻžāĻ  checkSequence āĻāĻŽāĻŦā§‡āĻĄā§‡āĻĄ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ¸ā§āĻŦā§€āĻ•ā§ƒāĻ¤āĻŋ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻšā§‡āĻ• āĻŦāĻŋāĻŸ āĻ•ā§āĻ°āĻŽ āĻ¸āĻžā§āĻšāĻ¯āĻŧ āĻ•āĻ°ā§‡āĨ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻĒāĻĻā§āĻ§āĻ¤āĻŋ getEncryptingFileParameters āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻĢā§‡āĻ°āĻ¤ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ encrypt āĻŦāĻ°ā§āĻ— GIFEncryptorByLSBMethod:

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻāĻŦāĻ‚ āĻ¤āĻžāĻ° āĻ•ā§‹āĻĄ:

@Override
public void encrypt(File in, File out, String text) throws UnableToEncodeException, NullPointerException, IOException {
	if (in == null) {
		throw new NullPointerException("Input file is null");
	}
	if (out == null) {
		throw new NullPointerException("Output file is null");
	}
	if (text == null) {
		throw new NullPointerException("Text is null");
	}
	
	// read bytes from input file
	byte[] bytes = new byte[(int)in.length()];
	InputStream is = new FileInputStream(in);
	is.read(bytes);
	is.close();
	
	// check format
	if (!(new String(bytes, 0, 6)).equals("GIF89a")) {
		throw new UnableToEncodeException("Input file has wrong GIF format");
	}
	
	// read palette size property from first three bits in the 10-th byte from the file
	byte[] b10 = Binary.toBitArray(bytes[10]);
	byte bsize = Binary.toByte(new byte[] {b10[0], b10[1], b10[2]});
	
	// calculate color count and possible message length
	int bOrigColorCount = (int)Math.pow(2, bsize+1);
	int possibleMessageLength = bOrigColorCount*3/4;
	int possibleTextLength = possibleMessageLength-2;// one byte for check and one byte for message length
	
	if (possibleTextLength < text.length()) {
		throw new UnableToEncodeException("Text is too big");
	}
	
	int n = 13;
	
	// write check sequence
	for (int i = 0; i < checkSequence.length/2; i++) {
		byte[] ba = Binary.toBitArray(bytes[n]);
		ba[firstLSBit] = checkSequence[2*i];
		ba[secondLSBit] = checkSequence[2*i+1];
		bytes[n] = Binary.toByte(ba);
		n++;
	}
	
	// write text length
	byte[] cl = Binary.toBitArray((byte)text.length());
	for (int i = 0; i < cl.length/2; i++) {
		byte[] ba = Binary.toBitArray(bytes[n]);
		ba[firstLSBit] = cl[2*i];
		ba[secondLSBit] = cl[2*i+1];
		bytes[n] = Binary.toByte(ba);
		n++;
	}
	
	// write message
	byte[] textBytes = text.getBytes();
	for (int i = 0; i < textBytes.length; i++) {
		byte[] c = Binary.toBitArray(textBytes[i]);
		for (int ci = 0; ci < c.length/2; ci++) {
			byte[] ba = Binary.toBitArray(bytes[n]);
			ba[firstLSBit] = c[2*ci];
			ba[secondLSBit] = c[2*ci+1];
			bytes[n] = Binary.toByte(ba);
			n++;
		}
	}
	
	// write output file
	OutputStream os = new FileOutputStream(out);
	os.write(bytes);
	os.close();
}

āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻāĻŦāĻ‚ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄ decrypt āĻŦāĻ°ā§āĻ— GIFEncryptorByLSBMethod:

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

@Override
public String decrypt(File in) throws UnableToDecodeException, NullPointerException, IOException {
	if (in == null) {
		throw new NullPointerException("Input file is null");
	}
	
	// read bytes from input file
	byte[] bytes = new byte[(int)in.length()];
	InputStream is = new FileInputStream(in);
	is.read(bytes);
	is.close();
	
	// check format
	if (!(new String(bytes, 0, 6)).equals("GIF89a")) {
		throw new UnableToDecodeException("Input file has wrong GIF format");
	}
	
	// read palette size property from first three bits in the 10-th byte from the file
	byte[] b10 = Binary.toBitArray(bytes[10]);
	byte bsize = Binary.toByte(new byte[] {b10[0], b10[1], b10[2]});
	
	// calculate color count and possible message length
	int bOrigColorCount = (int)Math.pow(2, bsize+1);
	int possibleMessageLength = bOrigColorCount*3/4;
	int possibleTextLength = possibleMessageLength-2;	// one byte for check and one byte for message length
	
	int n = 13;
	
	// read check sequence
	byte[] csBits = new byte[checkSequence.length];
	for (int i = 0; i < 4; i++) {
		byte[] ba = Binary.toBitArray(bytes[n]);
		csBits[2*i] = ba[firstLSBit];
		csBits[2*i+1] = ba[secondLSBit];
		n++;
	}
	byte cs = Binary.toByte(csBits);
	
	if (cs != Binary.toByte(checkSequence)) {
		throw new UnableToDecodeException("There is no encrypted message in the image (Check sequence is incorrect)");
	}
	
	// read text length
	byte[] cl = new byte[8];
	for (int i = 0; i < 4; i++) {
		byte[] ba = Binary.toBitArray(bytes[n]);
		cl[2*i] = ba[firstLSBit];
		cl[2*i+1] = ba[secondLSBit];
		n++;
	}
	byte textLength = Binary.toByte(cl);
	
	if (textLength < 0) {
		throw new UnableToDecodeException("Decoded text length is less than 0");
	}
	if (possibleTextLength < textLength) {
		throw new UnableToDecodeException("There is no messages (Decoded message length (" + textLength + ") is less than Possible message length (" + possibleTextLength + "))");
	}
	
	// read text bits and make text bytes
	byte[] bt = new byte[textLength];
	for (int i = 0; i < bt.length; i++) {
		byte[] bc = new byte[8];
		for (int bci = 0; bci < bc.length/2; bci++) {
			byte[] ba = Binary.toBitArray(bytes[n]);
			bc[2*bci] = ba[firstLSBit];
			bc[2*bci+1] = ba[secondLSBit];
			n++;
		}
		bt[i] = Binary.toByte(bc);
	}
	
	return new String(bt);
}

āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ GIFEncryptorByPaletteExtensionMethod āĻāĻ•āĻ‡ āĻ°āĻ•āĻŽ āĻšāĻŦā§‡, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ/āĻĒāĻĄāĻŧāĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ­āĻŋāĻ¨ā§āĻ¨āĨ¤

āĻ•ā§āĻ˛āĻžāĻ¸ā§‡ MainFrame āĻŽā§‹āĻĄāĻŧāĻ• āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ: encryptImage(Encryptor encryptor) и decryptImage(Encryptor encryptor), āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖ Encryptor āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ¸āĻžāĻĨā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•ā§āĻŸ āĻ•āĻ°āĻž, āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻĄāĻžāĻ¯āĻŧāĻžāĻ˛āĻ— āĻ–ā§‹āĻ˛āĻž, āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ; āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ: openImage(), āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ›āĻŦāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ, exit(), āĻ¯āĻž āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĨā§‡āĻ•ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ ActionāĻāĻ° āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻŽā§‡āĻ¨ā§ āĻ†āĻ‡āĻŸā§‡āĻŽāĨ¤ āĻāĻ‡ āĻļā§āĻ°ā§‡āĻŖā§€āĻŸāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤āĻ­āĻžāĻŦā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ• āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡: createComponents() - āĻĢāĻ°ā§āĻŽ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ, loadImageFile(File f) — āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ›āĻŦāĻŋ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĨ¤ āĻ•ā§āĻ˛āĻžāĻ¸ā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ GIFEncryptorByPaletteExtensionMethod āĻ•ā§āĻ˛āĻžāĻ¸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ GIFEncryptorByLSBMethod, āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻšāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻĨā§‡āĻ•ā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻŦāĻžāĻ‡āĻŸ āĻ˛ā§‡āĻ–āĻž āĻ“ āĻĒāĻĄāĻŧāĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ¤ā§‡āĨ¤

āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨

āĻāĻ˛āĻŦāĻŋāĻāĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ

āĻ§āĻ°āĻž āĻ¯āĻžāĻ• āĻāĻ‡āĻ°āĻ•āĻŽ āĻāĻ•āĻŸāĻŋ āĻ›āĻŦāĻŋ āĻ†āĻ›ā§‡:

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻāĻ‡ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋāĻ¤ā§‡, āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸāĻŸāĻŋāĻ¤ā§‡ 256āĻŸāĻŋ āĻ°āĻ™ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ (āĻ¯ā§‡āĻŽāĻ¨ āĻĒā§‡āĻ‡āĻ¨ā§āĻŸ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡)āĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻšāĻžāĻ°āĻŸāĻŋ āĻ°āĻ™ āĻšāĻ˛: āĻ¸āĻžāĻĻāĻž, āĻ•āĻžāĻ˛ā§‹, āĻ˛āĻžāĻ˛, āĻ¸āĻŦā§āĻœāĨ¤ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ°āĻ‚ āĻ•āĻžāĻ˛ā§‹āĨ¤ āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻŦāĻŋāĻŸ āĻ•ā§āĻ°āĻŽ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§‚āĻĒ āĻšāĻŦā§‡:

11111111 11111111 11111111 00000000 00000000 00000000 11111111 00000000 00000000 00000000 11111111 00000000...

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻŸāĻŋ āĻāĻŽā§āĻŦā§‡āĻĄ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ˛ā§‡, āĻ†āĻ¨ā§āĻĄāĻžāĻ°āĻ˛āĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻŦāĻŋāĻŸāĻ—ā§āĻ˛āĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻŦāĻŋāĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻŦā§‡āĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻŽā§‚āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ†āĻ˛āĻžāĻĻāĻž āĻ¨āĻ¯āĻŧāĨ¤

āĻŽā§‚āĻ˛
āĻāĻŽāĻŦā§‡āĻĄā§‡āĻĄ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻš āĻšāĻŋāĻ¤ā§āĻ°

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ
āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻĒā§āĻ¯āĻžāĻ˛ā§‡āĻŸ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŖ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻ–āĻ¨ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¸āĻŽā§āĻŦāĻ˛āĻŋāĻ¤ āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ¤ā§āĻ° āĻ–ā§āĻ˛āĻŦā§‡āĻ¨, āĻ¤āĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ›āĻŦāĻŋāĻŸāĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‡āĻ¨:

āĻœāĻŋāĻ†āĻ‡āĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāĻ¨ā§‹āĻ—ā§āĻ°āĻžāĻĢāĻŋ

āĻāĻŸāĻž āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻ¯ā§‡ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻĒā§‚āĻ°ā§āĻŖāĻžāĻ™ā§āĻ— āĻ—ā§āĻĒā§āĻ¤āĻšāĻ°āĻŦā§ƒāĻ¤ā§āĻ¤āĻŋāĻ° āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ˛āĻžāĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻž āĻāĻŦāĻ‚ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻŸā§‡āĻĄ āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨/āĻĄāĻŋāĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ¤ā§‹āĻ‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡, āĻ¤āĻŦā§‡ āĻ…ā§āĻ¯āĻžāĻ¨āĻŋāĻŽā§‡āĻļāĻ¨āĻŸāĻŋ āĻ­ā§‡āĻ™ā§‡ āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻžāĨ¤

āĻ‰āĻ¤ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤:

āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°ā§āĻ¨:

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨