Steganography αž€αŸ’αž“αž»αž„ GIF

αžŸαŸαž…αž€αŸ’αžαžΈαžŽαŸ‚αž“αžΆαŸ†

αžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαŸ”
αž˜αž·αž“αž™αžΌαžšαž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž‘αŸ αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αžŸαž·αž€αŸ’αžŸαžΆαž“αŸ…αžŸαž€αž›αžœαž·αž‘αŸ’αž™αžΆαž›αŸαž™ αž˜αžΆαž“αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆαž˜αž½αž™αž€αŸ’αž“αž»αž„αžœαž·αž‰αŸ’αž‰αžΆαžŸαžΆ "αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž•αŸ’αž“αŸ‚αž€αž‘αž“αŸ‹αž“αŸƒαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž–αŸαžαŸŒαž˜αžΆαž“"αŸ” αž€αž·αž…αŸ’αž…αž€αžΆαžšαžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αž„αŸ’αž€αž”αŸ‹αžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš GIF αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž’αŸ’αžœαžΎαžœαžΆαž“αŸ… Java αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžšαŸ€αž”αžšαžΆαž”αŸ‹αž’αŸ†αž–αžΈαž…αŸ†αžŽαž»αž…αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž€αŸαžŠαžΌαž…αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαžΌαž…αž˜αž½αž™αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ”

αž•αŸ’αž“αŸ‚αž€αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈ

αž‘αž˜αŸ’αžšαž„αŸ‹ GIF

GIF (Graphics Interchange Format - αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαžΌαž”αž—αžΆαž–) αž‚αžΊαž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžšαžΌαž”αž—αžΆαž–αž€αŸ’αžšαžΆαž αŸ’αžœαž·αž€ αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž”αŸ‹αžŠαŸ„αž™αž˜αž·αž“αž”αžΆαžαŸ‹αž”αž„αŸ‹αž‚αž»αžŽαž—αžΆαž–αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžšαž αžΌαžαžŠαž›αŸ‹ 256 αž–αžŽαŸŒαŸ” αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 1987 (GIF87a) αžŠαŸ„αž™ CompuServe αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž‡αžΌαž“αžšαžΌαž”αž—αžΆαž– raster αž›αžΎαž”αžŽαŸ’αžαžΆαž‰αŸ” αž“αŸ…αž†αŸ’αž“αžΆαŸ† 1989 αž‘αž˜αŸ’αžšαž„αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚ (GIF89a) αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαž˜αŸ’αž›αžΆαž—αžΆαž– αž“αž·αž„αž…αž›αž“αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αŸ”

αž―αž€αžŸαžΆαžš GIF αž˜αžΆαž“αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αž›αž»αž€αŸ” αž”αŸ’αž›αž»αž€αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ‚αž„αžαŸ‚αž˜αžΆαž“αž”αŸ’αžšαžœαŸ‚αž„αžαŸαžš (αž¬αžœαžΆαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž‘αž„αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“) αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž’αŸ†αž–αžΈαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž”αŸ’αž›αž»αž€αž“αžΈαž˜αž½αž™αŸ—αžŸαŸ’αžαž·αžαž“αŸ…αŸ” αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαžšαžΌαž”αž—αžΆαž– GIF αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž…αž›αž“αžΆαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ GIF89aαŸ–

Steganography αž€αŸ’αž“αž»αž„ 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 - αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž‘αžΌαž‘αŸ…αž“αŸƒ steganography αŸ” αžœαžΆαž˜αžΆαž“αž€αžΆαžšαž‡αŸ†αž“αž½αžŸαž”αŸŠαžΈαžαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžš (αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž”αŸƒαž€αŸ’αžŠαžΆαžšαž›αžΆαž™αžŸαž€αž›) αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸŠαžΈαžαž“αŸƒαžŸαžΆαžšαžŠαŸ‚αž›αž›αžΆαž€αŸ‹αŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αžΉαž„αž”αŸ’αžšαžΎαž–αžΈαžšαž”αŸŠαžΈαžαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸƒαž“αŸƒαž€αŸ’αžŠαžΆαžšαž›αžΆαž™αžŸαž€αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž– 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 αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αžΌαž‘αŸ…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŸαžΆαžšαž‘αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžŠαžΆαžšαž›αžΆαž™αžšαžΌαž”αž—αžΆαž–αŸ–

Steganography αž€αŸ’αž“αž»αž„ GIF

αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž”αŸŠαžΈαžαž‘αŸ…αžŠαžΎαž˜αžŸαžΆαžš αžŠαŸ‚αž›αž§αž”αž€αžšαžŽαŸαžŒαž·αž€αžΌαžŠαž’αžΆαž“αž˜αž»αž“ αž“αž·αž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸ„αŸ‡ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž˜αž·αž“αž˜αžΆαž“αžŸαžΆαžšαž›αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž“αŸ„αŸ‡αž‘αŸαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αŸ’αžšαžœαŸ‚αž„αž“αŸƒαžŸαžΆαžšαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αžαŸ’αžαž”αž‘αž“αŸƒαžŸαžΆαžšαžαŸ’αž›αž½αž“αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹αŸ”

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαŸ’αž“αžΆαž€αŸ‹αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ–

Steganography αž€αŸ’αž“αž»αž„ GIF

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž˜αžΌαž›αž’αžΆαž…αž”αŸ‚αž„αž…αŸ‚αž€αž‡αžΆαž–αžΈαžšαž•αŸ’αž“αŸ‚αž€αŸ– αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž”αž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹ αž“αž·αž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŒαž·αž‚αŸ’αžšαžΈαž” Encryptor, αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹ GIFEncryptorByLSBMethod ΠΈ GIFEncryptorByPaletteExtensionMethodαž“αž·αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ”

αž–αž·αž…αžΆαžšαžŽαžΆαžαŸ’αž“αžΆαž€αŸ‹ GIFEncryptorByLSBMethod.

Steganography αž€αŸ’αž“αž»αž„ GIF

αžœαžΆαž› firstLSBit ΠΈ secondLSBit αž˜αžΆαž“αž›αŸαžαž”αŸŠαžΈαžαž“αŸƒαž”αŸƒαž“αžΈαž˜αž½αž™αŸ—αž“αŸƒαžšαžΌαž”αž—αžΆαž– αžŠαŸ‚αž›αžŸαžΆαžšαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„αž–αžΈαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžŸαžΆαžšαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αŸ” αžœαžΆαž› checkSequence αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž›αŸ†αžŠαžΆαž”αŸ‹ check bit αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαž”αžΆαž“αž“αžΌαžœαž€αžΆαžšαž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αž”αŸ‹αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž‹αž·αžαž·αžœαž“αŸ’αž getEncryptingFileParameters αžαŸ’αžšαž‘αž”αŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸƒαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž“αž·αž„αž›αž€αŸ’αžαžŽαŸˆαž“αŸƒαžŸαžΆαžšαžŸαž€αŸ’αžαžΆαž“αž»αž–αž›αŸ”

αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž encrypt класса GIFEncryptorByLSBMethod:

Steganography αž€αŸ’αž“αž»αž„ 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:

Steganography αž€αŸ’αž“αž»αž„ 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

αž§αž”αž˜αžΆαžαžΆαž˜αžΆαž“αžšαžΌαž”αž—αžΆαž–αžŠαžΌαž…αž“αŸαŸ‡αŸ–

Steganography αž€αŸ’αž“αž»αž„ GIF

αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž“αŸαŸ‡ αž€αŸ’αžŠαžΆαžšαž›αžΆαž™αž˜αžΆαž“ 256 αž–αžŽαŸŒ (αžŠαžΌαž…αžŠαŸ‚αž›αžαŸ’αž“αžΆαŸ†αž›αžΆαž”αžšαž€αŸ’αžŸαžΆαž‘αž»αž€)αŸ” αž”αž½αž“αž–αžŽαŸŒαžŠαŸ†αž”αžΌαž„αž‚αžΊαž–αžŽαŸŒαžŸαžαŸ’αž˜αŸ…αž€αŸ’αžšαž αž˜αž”αŸƒαžαž„αŸ” αž–αžŽαŸŒαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‚αžΊαžαŸ’αž˜αŸ…αŸ” αž›αŸ†αžŠαžΆαž”αŸ‹αž”αŸŠαžΈαžαž€αŸ’αžŠαžΆαžšαž›αžΆαž™αž‡αžΆαžŸαž€αž›αž“αžΉαž„αž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

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

Steganography αž€αŸ’αž“αž»αž„ GIF

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŸαžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αž”αŸ‹ αž”αŸŠαžΈαžαžŠαŸ‚αž›αž‚αžΌαžŸαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΈαž€αŸ’αžšαŸ„αž˜αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™αž”αŸŠαžΈαžαž–αžΈαžŸαžΆαžšαŸ” αžšαžΌαž”αž—αžΆαž–αž›αž‘αŸ’αž’αž•αž›αž‚αžΊαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž˜αž·αž“αžαž»αžŸαž–αžΈαžŠαžΎαž˜αŸ”

ដើម
αžšαžΌαž”αž—αžΆαž–αž‡αžΆαž˜αž½αž™αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αž”αŸ‹

Steganography αž€αŸ’αž“αž»αž„ GIF
Steganography αž€αŸ’αž“αž»αž„ GIF

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž–αž„αŸ’αžšαžΈαž€αž€αŸ’αžŠαžΆαžšαž›αžΆαž™

αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž”αžΎαž€αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž˜αžΆαž“αžŸαžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αžšαžΌαž”αž—αžΆαž–αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

Steganography αž€αŸ’αž“αž»αž„ GIF

αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αžαžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž“αŸαŸ‡αž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž…αžΆαžšαž€αž˜αŸ’αž˜αž–αŸαž‰αž›αŸαž‰αž‘αŸ αž αžΎαž™αž’αžΆαž…αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž”αžŸαžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αŸ”

αž€αžΆαžšαž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž”/αžŒαž·αž‚αŸ’αžšαžΈαž”αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž˜αžΆαž“αž…αž›αž“αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αž‹αž·αžαž·αžœαž“αŸ’αžαž’αž˜αŸ’αž˜αžαžΆαžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αž›αž“αžΆαž˜αž·αž“αžαžΌαž…αž‘αŸαŸ”

αž”αŸ’αžšαž—αž–αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎαŸ–

αž‘αžΆαž‰αž™αž€

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹