GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เด†เดฎเตเด–เด‚

เดชเตเดฐเดฟเดตเต†เดคเตเดธเตเดคเตเดตเตเดฏเต.
เด…เดงเดฟเด•เด‚ เดคเดพเดฎเดธเดฟเดฏเดพเดคเต†, เดžเดพเตป เดฏเต‚เดฃเดฟเดตเต‡เดดเตเดธเดฟเดฑเตเดฑเดฟเดฏเดฟเตฝ เดชเด เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, "เดตเดฟเดตเดฐ เดธเตเดฐเด•เตเดทเดฏเตเดŸเต† เดธเต‹เดซเตเดฑเตเดฑเตเดตเต†เดฏเตผ เดฐเต€เดคเดฟเด•เตพ" เดŽเดจเตเดจ เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เด•เต‹เดดเตโ€Œเดธเต เดตเตผเด•เตเด•เต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต. GIF เดซเดฏเดฒเตเด•เดณเดฟเตฝ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด‰เตพเดšเตเดšเต‡เตผเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเตป เด…เดธเตˆเตปเดฎเต†เดจเตเดฑเดฟเดจเต เดžเด™เตเด™เดณเต‹เดŸเต เด†เดตเดถเตเดฏเดฎเตเดฃเตเดŸเต. เดœเดพเดตเดฏเดฟเตฝ เดšเต†เดฏเตเดฏเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเดพเตป เดšเดฟเดฒ เดธเตˆเดฆเตเดงเดพเดจเตเดคเดฟเด• เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚, เด…เดคเตเดชเต‹เดฒเต† เดˆ เดšเต†เดฑเดฟเดฏ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดŽเด™เตเด™เดจเต† เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต.

เดธเตˆเดฆเตเดงเดพเดจเตเดคเดฟเด• เดญเดพเด—เด‚

GIF เดซเต‹เตผเดฎเดพเดฑเตเดฑเต

GIF (เด—เตเดฐเดพเดซเดฟเด•เตเดธเต เด‡เดจเตเดฑเตผเดšเต‡เดžเตเดšเต เดซเต‹เตผเดฎเดพเดฑเตเดฑเต - เด‡เดฎเต‡เดœเตเด•เตพ เด•เตˆเดฎเดพเดฑเตเดฑเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดซเต‹เตผเดฎเดพเดฑเตเดฑเต) เด—เตเดฐเดพเดซเดฟเด•เต เด‡เดฎเต‡เดœเตเด•เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดซเต‹เตผเดฎเดพเดฑเตเดฑเดพเดฃเต, 256 เดจเดฟเดฑเด™เตเด™เดณเดฟเดฒเตเดณเตเดณ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเด‚ เดจเดทเตเดŸเดชเตเดชเต†เดŸเดพเดคเต† เด•เด‚เดชเตเดฐเดธเต เดšเต†เดฏเตเดค เดกเดพเดฑเตเดฑ เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดˆ เดซเต‹เตผเดฎเดพเดฑเตเดฑเต 1987-เตฝ (GIF87a) เด•เดฎเตเดชเตเดฏเตเดธเตผเดตเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เตเด•เดณเดฟเตฝ เดฑเดพเดธเตเดฑเตเดฑเตผ เด‡เดฎเต‡เดœเตเด•เตพ เด•เตˆเดฎเดพเดฑเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดšเต†เดŸเตเดคเตเดคเดคเดพเดฃเต. 1989-เตฝ, เดซเต‹เตผเดฎเดพเดฑเตเดฑเต เดชเดฐเดฟเดทเตเด•เดฐเดฟเดšเตเดšเต (GIF89a), เดธเตเดคเดพเดฐเตเดฏเดคเดฏเตเด•เตเด•เตเด‚ เด†เดจเดฟเดฎเต‡เดทเดจเตเดฎเตเดณเตเดณ เดชเดฟเดจเตเดคเตเดฃ เดšเต‡เตผเดคเตเดคเต.

GIF เดซเดฏเดฒเตเด•เตพเด•เตเด•เต เด’เดฐเต เดฌเตเดฒเต‹เด•เตเด•เต เด˜เดŸเดจเดฏเตเดฃเตเดŸเต. เดˆ เดฌเตเดฒเต‹เด•เตเด•เตเด•เตพเด•เตเด•เต เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดฆเตˆเตผเด˜เตเดฏเดฎเตเดฃเตเดŸเต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเต เดšเดฟเดฒ เดซเตเดฒเดพเด—เตเด•เดณเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต), เด…เดคเดฟเดจเดพเตฝ เด“เดฐเต‹ เดฌเตเดฒเต‹เด•เตเด•เตเด‚ เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต เดธเตเดฅเดฟเดคเดฟเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด’เดฐเต เดคเต†เดฑเตเดฑเต เดตเดฐเตเดคเตเดคเตเดจเตเดจเดคเต เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚ เด…เดธเดพเดงเตเดฏเดฎเดพเดฃเต. GIF89a เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เดจเต‹เตบ-เด†เดจเดฟเดฎเต‡เดฑเตเดฑเดกเต GIF เด‡เดฎเต‡เดœเดฟเดจเตเดฑเต† เด˜เดŸเดจ:

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 เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดจเตเดฑเต† เด˜เดŸเดจเดฏเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ, เด‡เดฎเต‡เดœเต เดชเดพเดฒเดฑเตเดฑเดฟเตฝ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเตŠเดคเต เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เด’เดฐเต เดšเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เดพเตป, เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดถเตเดฐเต‡เดฃเดฟ เดฌเดฟเดฑเตเดฑเตเด•เตพ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเต เดกเต€เด•เต‹เดกเตผ เด†เดฆเตเดฏเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดถเดฐเดฟเดฏเดพเดฃเต‹ เดŽเดจเตเดจเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด‡เดคเต เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดšเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เดฎเดฑเดžเตเดžเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเดจเตเดฆเต‡เดถเด‚ เด‡เดฒเตเดฒเต†เดจเตเดจเต เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ เดจเดฟเด™เตเด™เตพ เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดฆเตˆเตผเด˜เตเดฏเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด…เดชเตเดชเต‹เตพ เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดตเดพเดšเด•เด‚ เดคเดจเตเดจเต†.

เดฎเตเดดเตเดตเตป เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต†เดฏเตเด‚ เด•เตเดฒเดพเดธเต เดกเดฏเด—เตเดฐเด‚:

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เดชเดฐเดฟเดชเดพเดŸเดฟเดฏเตเดŸเต† เดจเดŸเดคเตเดคเดฟเดชเตเดชเต

เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต†เดฏเตเด‚ เดจเดŸเดชเตเดชเดพเด•เตเด•เดฒเดฟเดจเต† เดฐเดฃเตเดŸเต เด˜เดŸเด•เด™เตเด™เดณเดพเดฏเดฟ เดคเดฟเดฐเดฟเด•เตเด•เดพเด‚: เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดŽเตปเด•เตเดฐเดฟเดชเตเดทเตป, เดกเต€เด•เตเดฐเดฟเดชเตเดทเตป เดฐเต€เดคเดฟเด•เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ Encryptor, เด•เตเดฒเดพเดธเตเด•เดณเดฟเตฝ GIFEncryptorByLSBMethod ะธ GIFEncryptorByPaletteExtensionMethod, เด‰เดชเดฏเต‹เด•เตเดคเตƒ เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ.

เด•เตเดฒเดพเดธเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด• GIFEncryptorByLSBMethod.

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เดจเดฟเดฒเด™เตเด™เดณเตเด‚ firstLSBit ะธ secondLSBit เดธเดจเตเดฆเต‡เดถเด‚ เดจเตฝเด•เต‡เดฃเตเดŸ เดšเดฟเดคเตเดฐเดคเตเดคเดฟเดจเตเดฑเต† เด“เดฐเต‹ เดฌเตˆเดฑเตเดฑเดฟเดจเตเดฑเต†เดฏเตเด‚ เดฌเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต† เดจเดฎเตเดชเดฑเตเด•เดณเตเด‚ เดธเดจเตเดฆเต‡เดถเด‚ เดตเดพเดฏเดฟเด•เตเด•เต‡เดฃเตเดŸ เดธเตเดฅเดฒเดตเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดซเต€เตฝเดกเต checkSequence เด‰เตพเดšเตเดšเต‡เตผเดคเตเดค เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตฝ เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป เด’เดฐเต เดšเต†เด•เตเด•เต เดฌเดฟเดฑเตเดฑเต เดธเต€เด•เตเดตเตปเดธเต เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เดฐเต€เดคเดฟ getEncryptingFileParameters เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดซเดฏเดฒเดฟเดจเตเดฑเต† เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเด‚ เดธเดพเดงเตเดฏเดคเดฏเตเดณเตเดณ เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเตเด‚ เดจเตฝเด•เตเดจเตเดจเต.

เดฐเต€เดคเดฟ เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ encrypt เด•เตเดฒเดพเดธเต GIFEncryptorByLSBMethod:

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เด…เดตเดจเตเดฑเต† เด•เต‹เดกเตเด‚:

@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:

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

@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, เดชเตเดฐเดงเดพเดจ เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เดชเดพเดฒเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดจเตเดฆเต‡เดถ เดฌเตˆเดฑเตเดฑเตเด•เตพ เดŽเดดเตเดคเตเด•เดฏเตเด‚ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเดฒเดพเดฃเต.

เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚

LBS เดฐเต€เดคเดฟ

เด‡เดคเตเดชเต‹เดฒเตŠเดฐเต เดšเดฟเดคเตเดฐเด‚ เด‰เดฃเตเดŸเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚:

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เดˆ เดšเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ, เดชเดพเดฒเดฑเตเดฑเดฟเตฝ 256 เดจเดฟเดฑเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เดชเต†เดฏเดฟเดจเตเดฑเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‹เดฒเต†). เด†เดฆเตเดฏเดคเตเดคเต† เดจเดพเดฒเต เดจเดฟเดฑเด™เตเด™เตพ เด‡เดตเดฏเดพเดฃเต: เดตเต†เดณเตเดณ, เด•เดฑเตเดชเตเดชเต, เดšเตเดตเดชเตเดชเต, เดชเดšเตเดš. เดฎเดฑเตเดฑเต เดจเดฟเดฑเด™เตเด™เตพ เด•เดฑเตเดชเตเดชเดพเดฃเต. เด†เด—เต‹เดณ เดชเดพเดฒเดฑเตเดฑเต เดฌเดฟเดฑเตเดฑเต เดธเต€เด•เตเดตเตปเดธเต เด‡เดชเตเดฐเด•เดพเดฐเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚:

11111111 11111111 11111111 00000000 00000000 00000000 11111111 00000000 00000000 00000000 11111111 00000000เดชเด™เตเด•เต โ‚ฌ |

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เดธเดจเตเดฆเต‡เดถเด‚ เด‰เตพเดšเตเดšเต‡เตผเดคเตเดคเตเด•เดดเดฟเดžเตเดžเดพเตฝ, เด…เดŸเดฟเดตเดฐเดฏเดฟเดŸเตเดŸ เดฌเดฟเดฑเตเดฑเตเด•เตพ เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฌเดฟเดฑเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด‚. เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดšเดฟเดคเตเดฐเด‚ เด’เดฑเดฟเดœเดฟเดจเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดคเดพเดฃเตเดŸเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดฒเตเดฒ.

เดฏเดฅเดพเตผเดคเตเดฅ
เด‰เตพเดšเตเดšเต‡เตผเดคเตเดค เดธเดจเตเดฆเต‡เดถเดฎเตเดณเตเดณ เดšเดฟเดคเตเดฐเด‚

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ
GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เดชเดพเดฒเดฑเตเดฑเต เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃ เดฐเต€เดคเดฟ

เดˆ เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดŸเด™เตเด™เดฟเดฏ เด’เดฐเต เดšเดฟเดคเตเดฐเด‚ เดจเดฟเด™เตเด™เตพ เดคเตเดฑเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดšเดฟเดคเตเดฐเด‚ เด•เดพเดฃเตเด‚:

GIF-เดฒเต† เดธเตเดฑเตเดฑเต†เด—เดจเต‹เด—เตเดฐเดซเดฟ

เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดšเดพเดฐเดตเตƒเดคเตเดคเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพเด•เตเด•เต เดˆ เดฐเต€เดคเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดฟเดฒเตเดฒเต†เดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† เดธเดจเตเดฆเต‡เดถเดคเตเดคเดฟเดจเตเดฑเต† เด…เดงเดฟเด• เดŽเตปเด•เตเดฐเดฟเดชเตเดทเตป เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดจเตเดจเต‡เด•เตเด•เดพเด‚.

เดธเดพเดงเดพเดฐเดฃ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เดšเดฟเดคเตเดฐเด™เตเด™เดณเดฟเดฒเต†เดจเตเดจเดชเต‹เดฒเต† เด†เดจเดฟเดฎเต‡เดฑเตเดฑเดกเต เดšเดฟเดคเตเดฐเด™เตเด™เดณเดฟเดฒเต† เดŽเตปเด•เตเดฐเดฟเดชเตเดทเตป/เดกเต€เด•เตเดฐเดฟเดชเตเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด†เดจเดฟเดฎเต‡เดทเตป เดคเด•เตผเดจเตเดจเดฟเดŸเตเดŸเดฟเดฒเตเดฒ.

เด‰เดชเดฏเต‹เด—เดฟเดšเตเดš เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ:

เดกเตŒเตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•:

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•