āϜāĻŋāφāχāĻāĻĢ-āĻ āĻ¸ā§āĻŸā§‡āĻ—āĻžāύ⧋āĻ—ā§āϰāĻžāĻĢāĻŋ

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

ĐŸŅ€Đ¸Đ˛ĐĩŅ‚ŅŅ‚Đ˛ŅƒŅŽ
āϖ⧁āĻŦ āĻŦ⧇āĻļāĻŋ āĻĻāĻŋāύ āφāϗ⧇, āϝāĻ–āύ āφāĻŽāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻŦāĻŋāĻĻā§āϝāĻžāϞāϝāĻŧ⧇ āĻ…āĻ§ā§āϝāϝāĻŧāύ āĻ•āϰāϤāĻžāĻŽ, āϤāĻ–āύ "āϤāĻĨā§āϝ āϏ⧁āϰāĻ•ā§āώāĻžāϰ āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ āĻĒāĻĻā§āϧāϤāĻŋ" āĻŦāĻŋāώāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āϕ⧋āĻ°ā§āϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻ›āĻŋāϞāĨ¤ āĻ…ā§āϝāĻžāϏāĻžāχāύāĻŽā§‡āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻž 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

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster