LSB ಸ್ಟೆಗಾನೋಗ್ರಫಿ

ಒಮ್ಮೆ ನಾನು ನನ್ನ ಬರೆದಿದ್ದೇನೆ ಹಬ್‌ನಲ್ಲಿ ಮೊದಲ ಪೋಸ್ಟ್. ಮತ್ತು ಆ ಪೋಸ್ಟ್ ಅನ್ನು ಬಹಳ ಆಸಕ್ತಿದಾಯಕ ಸಮಸ್ಯೆಗೆ ಮೀಸಲಿಡಲಾಗಿದೆ, ಅವುಗಳೆಂದರೆ ಸ್ಟೆಗಾನೋಗ್ರಫಿ. ಸಹಜವಾಗಿ, ಆ ಹಳೆಯ ವಿಷಯದಲ್ಲಿ ಪ್ರಸ್ತಾಪಿಸಲಾದ ಪರಿಹಾರವನ್ನು ಪದದ ನಿಜವಾದ ಅರ್ಥದಲ್ಲಿ ಸ್ಟೆಗಾನೋಗ್ರಫಿ ಎಂದು ಕರೆಯಲಾಗುವುದಿಲ್ಲ. ಇದು ಕೇವಲ ಫೈಲ್ ಫಾರ್ಮ್ಯಾಟ್‌ಗಳೊಂದಿಗಿನ ಆಟವಾಗಿದೆ, ಆದರೆ ಸಾಕಷ್ಟು ಆಸಕ್ತಿದಾಯಕ ಆಟವಾಗಿದೆ.

ಇಂದು ನಾವು ಸ್ವಲ್ಪ ಆಳವಾಗಿ ಅಗೆಯಲು ಮತ್ತು LSB ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ನೋಡಲು ಪ್ರಯತ್ನಿಸುತ್ತೇವೆ. ನಿಮಗೆ ಆಸಕ್ತಿ ಇದ್ದರೆ, ಬೆಕ್ಕಿನ ಅಡಿಯಲ್ಲಿ ನಿಮಗೆ ಸ್ವಾಗತ. (ಕಟ್ ಅಡಿಯಲ್ಲಿ ಟ್ರಾಫಿಕ್ ಇದೆ: ಸುಮಾರು ಒಂದು ಮೆಗಾಬೈಟ್.)

ಮೊದಲನೆಯದಾಗಿ, ಒಂದು ಸಣ್ಣ ಪರಿಚಯವನ್ನು ಮಾಡುವುದು ಅವಶ್ಯಕ. ಕ್ರಿಪ್ಟೋಗ್ರಫಿಯ ಉದ್ದೇಶವು ರಹಸ್ಯ ಮಾಹಿತಿಯನ್ನು ಓದಲು ಅಸಾಧ್ಯವೆಂದು ಎಲ್ಲರಿಗೂ ತಿಳಿದಿದೆ. ಸಹಜವಾಗಿ, ಕ್ರಿಪ್ಟೋಗ್ರಫಿ ಅದರ ಅನ್ವಯಗಳನ್ನು ಹೊಂದಿದೆ, ಆದರೆ ಡೇಟಾ ರಕ್ಷಣೆಗೆ ಮತ್ತೊಂದು ವಿಧಾನವಿದೆ. ನಾವು ಮಾಹಿತಿಯನ್ನು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಬೇಕಾಗಿಲ್ಲ, ಆದರೆ ನಾವು ಅದನ್ನು ಹೊಂದಿಲ್ಲ ಎಂದು ನಟಿಸುತ್ತೇವೆ. ಇದಕ್ಕಾಗಿಯೇ ಸ್ಟೆಗಾನೋಗ್ರಫಿಯನ್ನು ಕಂಡುಹಿಡಿಯಲಾಯಿತು. ವಿಕಿಪೀಡಿಯಾ ನಮಗೆ ಭರವಸೆ ನೀಡುತ್ತದೆ "ಸ್ಟೆಗಾನೋಗ್ರಫಿ (ಗ್ರೀಕ್ στεγανοσ ನಿಂದ - ಗುಪ್ತ ಮತ್ತು ಗ್ರೀಕ್ γραφω - ನಾನು ಬರೆಯುತ್ತೇನೆ, ಅಕ್ಷರಶಃ "ರಹಸ್ಯ ಬರವಣಿಗೆ") ಪ್ರಸರಣದ ಸತ್ಯವನ್ನು ರಹಸ್ಯವಾಗಿಟ್ಟುಕೊಂಡು ಮಾಹಿತಿಯ ಗುಪ್ತ ಪ್ರಸರಣದ ವಿಜ್ಞಾನವಾಗಿದೆ.

ಸಹಜವಾಗಿ, ಕ್ರಿಪ್ಟೋಗ್ರಾಫಿಕ್ ಮತ್ತು ಸ್ಟೆಗಾನೋಗ್ರಾಫಿಕ್ ವಿಧಾನಗಳನ್ನು ಸಂಯೋಜಿಸುವುದನ್ನು ಯಾರೂ ನಿಷೇಧಿಸುವುದಿಲ್ಲ. ಇದಲ್ಲದೆ, ಆಚರಣೆಯಲ್ಲಿ ಅವರು ಇದನ್ನು ಮಾಡುತ್ತಾರೆ, ಆದರೆ ನಮ್ಮ ಕಾರ್ಯವು ಮೂಲಭೂತ ಅಂಶಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು. ನೀವು ವಿಕಿಪೀಡಿಯಾ ಲೇಖನವನ್ನು ಎಚ್ಚರಿಕೆಯಿಂದ ಅಧ್ಯಯನ ಮಾಡಿದರೆ, ಸ್ಟೆಗಾನೋಗ್ರಫಿ ಅಲ್ಗಾರಿದಮ್‌ಗಳು ಕರೆಯಲ್ಪಡುವದನ್ನು ಒಳಗೊಂಡಿವೆ ಎಂದು ನೀವು ಕಂಡುಕೊಳ್ಳುತ್ತೀರಿ. ಧಾರಕ ಮತ್ತು ಸಂದೇಶ. ಧಾರಕವು ನಮ್ಮ ರಹಸ್ಯ ಸಂದೇಶವನ್ನು ಮರೆಮಾಡಲು ಸಹಾಯ ಮಾಡುವ ಯಾವುದೇ ಮಾಹಿತಿಯಾಗಿದೆ.

ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ, ಕಂಟೇನರ್ BMP ಸ್ವರೂಪದಲ್ಲಿ ಚಿತ್ರವಾಗಿರುತ್ತದೆ. ಮೊದಲಿಗೆ, ಈ ಫೈಲ್ನ ರಚನೆಯನ್ನು ನೋಡೋಣ. ಫೈಲ್ ಅನ್ನು 4 ಭಾಗಗಳಾಗಿ ವಿಂಗಡಿಸಬಹುದು: ಫೈಲ್ ಹೆಡರ್, ಇಮೇಜ್ ಹೆಡರ್, ಪ್ಯಾಲೆಟ್ ಮತ್ತು ಇಮೇಜ್ ಸ್ವತಃ. ನಮ್ಮ ಉದ್ದೇಶಗಳಿಗಾಗಿ, ಹೆಡರ್ನಲ್ಲಿ ಏನು ಬರೆಯಲಾಗಿದೆ ಎಂಬುದನ್ನು ಮಾತ್ರ ನಾವು ತಿಳಿದುಕೊಳ್ಳಬೇಕು.

ಹೆಡರ್‌ನ ಮೊದಲ ಎರಡು ಬೈಟ್‌ಗಳು BM ಸಿಗ್ನೇಚರ್ ಆಗಿರುತ್ತವೆ, ನಂತರ ಬೈಟ್‌ಗಳಲ್ಲಿನ ಫೈಲ್ ಗಾತ್ರವನ್ನು ಎರಡು ಪದದಲ್ಲಿ ಬರೆಯಲಾಗುತ್ತದೆ, ಮುಂದಿನ 4 ಬೈಟ್‌ಗಳು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ ಮತ್ತು ಸೊನ್ನೆಗಳನ್ನು ಹೊಂದಿರಬೇಕು ಮತ್ತು ಅಂತಿಮವಾಗಿ, ಮತ್ತೊಂದು ಡಬಲ್ ಪದವು ಪ್ರಾರಂಭದಿಂದ ಆಫ್‌ಸೆಟ್ ಅನ್ನು ಹೊಂದಿರುತ್ತದೆ ಚಿತ್ರದ ನಿಜವಾದ ಬೈಟ್‌ಗಳಿಗೆ ಫೈಲ್ ಮಾಡಿ. 24-ಬಿಟ್ ಬಿಎಂಪಿ ಫೈಲ್‌ನಲ್ಲಿ, ಪ್ರತಿ ಪಿಕ್ಸೆಲ್ ಅನ್ನು ಮೂರು ಬಿಜಿಆರ್ ಬೈಟ್‌ಗಳೊಂದಿಗೆ ಎನ್‌ಕೋಡ್ ಮಾಡಲಾಗಿದೆ.

ಚಿತ್ರವನ್ನು ಹೇಗೆ ಪಡೆಯುವುದು ಎಂದು ಈಗ ನಮಗೆ ತಿಳಿದಿದೆ, ನಮಗೆ ಅಗತ್ಯವಿರುವ ಮಾಹಿತಿಯನ್ನು ನಾವು ಹೇಗೆ ಬರೆಯಬಹುದು ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮಾತ್ರ ಉಳಿದಿದೆ. ಇದಕ್ಕಾಗಿ ನಮಗೆ LSB ವಿಧಾನದ ಅಗತ್ಯವಿದೆ. ವಿಧಾನದ ಮೂಲತತ್ವವು ಕೆಳಕಂಡಂತಿರುತ್ತದೆ: ಬಣ್ಣ ಎನ್ಕೋಡಿಂಗ್ಗೆ ಜವಾಬ್ದಾರರಾಗಿರುವ ಬೈಟ್ಗಳಲ್ಲಿ ನಾವು ಕನಿಷ್ಟ ಗಮನಾರ್ಹವಾದ ಬಿಟ್ಗಳನ್ನು ಬದಲಾಯಿಸುತ್ತೇವೆ. ನಮ್ಮ ರಹಸ್ಯ ಸಂದೇಶದ ಮುಂದಿನ ಬೈಟ್ 11001011 ಆಗಿದ್ದರೆ ಮತ್ತು ಚಿತ್ರದಲ್ಲಿನ ಬೈಟ್‌ಗಳು...11101100 01001110 01111100 0101100111... ಎಂದು ಹೇಳೋಣ, ಆಗ ಎನ್‌ಕೋಡಿಂಗ್ ಈ ರೀತಿ ಕಾಣುತ್ತದೆ. ನಾವು ರಹಸ್ಯ ಸಂದೇಶ ಬೈಟ್ ಅನ್ನು 4 ಎರಡು-ಬಿಟ್ ಭಾಗಗಳಾಗಿ ವಿಭಜಿಸುತ್ತೇವೆ: 11, 00, 10, 11, ಮತ್ತು ಚಿತ್ರದ ಕಡಿಮೆ-ಆರ್ಡರ್ ಬಿಟ್‌ಗಳನ್ನು ಪರಿಣಾಮವಾಗಿ ತುಣುಕುಗಳೊಂದಿಗೆ ಬದಲಾಯಿಸುತ್ತೇವೆ: ...11101111 01001100 01111110 0101100111…. ಅಂತಹ ಬದಲಿ ಸಾಮಾನ್ಯವಾಗಿ ಮಾನವ ಕಣ್ಣಿಗೆ ಗಮನಿಸುವುದಿಲ್ಲ. ಇದಲ್ಲದೆ, ಅನೇಕ ಹಳೆಯ ಔಟ್‌ಪುಟ್ ಸಾಧನಗಳು ಅಂತಹ ಸಣ್ಣ ಬದಲಾವಣೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ಸಹ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.

ನೀವು 2 ಕನಿಷ್ಠ ಮಹತ್ವದ ಬಿಟ್‌ಗಳನ್ನು ಮಾತ್ರ ಬದಲಾಯಿಸಬಹುದು, ಆದರೆ ಅವುಗಳಲ್ಲಿ ಯಾವುದೇ ಸಂಖ್ಯೆಯನ್ನು ಬದಲಾಯಿಸಬಹುದು ಎಂಬುದು ಸ್ಪಷ್ಟವಾಗಿದೆ. ಈ ಕೆಳಗಿನ ನಮೂನೆ ಇದೆ: ನಾವು ಹೆಚ್ಚು ಬಿಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸುತ್ತೇವೆ, ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯನ್ನು ನಾವು ಮರೆಮಾಡಬಹುದು ಮತ್ತು ಇದು ಮೂಲ ಚಿತ್ರದಲ್ಲಿ ಹೆಚ್ಚು ಹಸ್ತಕ್ಷೇಪವನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಇಲ್ಲಿ ಎರಡು ಚಿತ್ರಗಳಿವೆ:

LSB ಸ್ಟೆಗಾನೋಗ್ರಫಿ
LSB ಸ್ಟೆಗಾನೋಗ್ರಫಿ

ನನ್ನ ಅತ್ಯುತ್ತಮ ಪ್ರಯತ್ನಗಳ ಹೊರತಾಗಿಯೂ, ಅವುಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ನಾನು ನೋಡಲಾಗಲಿಲ್ಲ, ಆದರೆ ಅದೇನೇ ಇದ್ದರೂ, ವಿವರಿಸಿದ ವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು ಎರಡನೇ ಚಿತ್ರದಲ್ಲಿ, ಲೆವಿಸ್ ಕ್ಯಾರೊಲ್ ಅವರ "ದಿ ಹಂಟಿಂಗ್ ಆಫ್ ದಿ ಸ್ನಾರ್ಕ್" ಕವಿತೆಯನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ. ನೀವು ಇಲ್ಲಿಯವರೆಗೆ ಓದಿದ್ದರೆ, ಅನುಷ್ಠಾನದ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳಲು ನೀವು ಬಹುಶಃ ಆಸಕ್ತಿ ಹೊಂದಿರುತ್ತೀರಿ. ಇದು ತುಂಬಾ ಸರಳವಾಗಿದೆ, ಆದರೆ ಎಲ್ಲವನ್ನೂ ಡೆಲ್ಫಿಯಲ್ಲಿ ಮಾಡಲಾಗುತ್ತದೆ ಎಂದು ನಾನು ಈಗಿನಿಂದಲೇ ನಿಮಗೆ ಎಚ್ಚರಿಕೆ ನೀಡುತ್ತೇನೆ. ಇದಕ್ಕೆ ಎರಡು ಕಾರಣಗಳಿವೆ: 1. ಡೆಲ್ಫಿ ಉತ್ತಮ ಭಾಷೆ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ; 2. ಕಂಪ್ಯೂಟರ್ ದೃಷ್ಟಿಯ ಮೂಲಭೂತ ವಿಷಯಗಳ ಕುರಿತು ಕೋರ್ಸ್ ಅನ್ನು ಸಿದ್ಧಪಡಿಸುವ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಈ ಪ್ರೋಗ್ರಾಂ ಹುಟ್ಟಿದೆ, ಮತ್ತು ನಾನು ಈ ಕೋರ್ಸ್ ಅನ್ನು ಬೋಧಿಸುತ್ತಿರುವ ಹುಡುಗರಿಗೆ ಇನ್ನೂ ಡೆಲ್ಫಿ ಹೊರತುಪಡಿಸಿ ಬೇರೆ ಏನನ್ನೂ ತಿಳಿದಿಲ್ಲ. ಸಿಂಟ್ಯಾಕ್ಸ್‌ನ ಪರಿಚಯವಿಲ್ಲದವರಿಗೆ, ಒಂದು ವಿಷಯವನ್ನು ವಿವರಿಸಬೇಕಾಗಿದೆ: shl x ಎಡಕ್ಕೆ x ನಿಂದ ಬಿಟ್‌ವೈಸ್ ಶಿಫ್ಟ್ ಆಗಿದೆ, shr x ಎಂಬುದು x ನಿಂದ ಬಲಕ್ಕೆ ಬಿಟ್‌ವೈಸ್ ಶಿಫ್ಟ್ ಆಗಿದೆ.

ನಾವು ಸ್ಟ್ರಿಂಗ್‌ನಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಪಠ್ಯವನ್ನು ಕಂಟೇನರ್‌ನಲ್ಲಿ ಬರೆಯುತ್ತಿದ್ದೇವೆ ಮತ್ತು ಕೆಳಗಿನ ಎರಡು ಬೈಟ್‌ಗಳನ್ನು ಬದಲಾಯಿಸುತ್ತಿದ್ದೇವೆ ಎಂದು ನಾವು ಭಾವಿಸುತ್ತೇವೆ:
ರೆಕಾರ್ಡಿಂಗ್ ಕೋಡ್:

i:=1 ಗೆ ಉದ್ದ(str) ಮಾಡಲು
    ಪ್ರಾರಂಭಿಸಿ
      l1:=ಬೈಟ್(str[i]) ಶ್ರಿ 6;
      l2:=byte(str[i]) shl 2; l2:=l2 shr 6;
      l3:=byte(str[i]) shl 4; l3:=l3 shr 6;
      l4:=byte(str[i]) shl 6; l4:=l4 shr 6;
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    ಕೊನೆಯಲ್ಲಿ;

ಓದಲು ಕೋಡ್:

i:=1 ಗೆ MsgSize ಮಾಡಲು
    ಪ್ರಾರಂಭಿಸಿ
      f.ReadBuffer(tmp,1);
      l1:=tmp shl 6;
      f.ReadBuffer(tmp,1);
      l2:=tmp shl 6; l2:=l2 shr 2;
      f.ReadBuffer(tmp,1);
      l3:=tmp shl 6; l3:=l3 shr 4;
      f.ReadBuffer(tmp,1);
      l4:=tmp shl 6; l4:=l4 shr 6;
      str:=str+char(l1+l2+l3+l4);
    ಕೊನೆಯಲ್ಲಿ;

ಸರಿ, ನಿಜವಾಗಿಯೂ ಸೋಮಾರಿಗಳಿಗೆ - ಪ್ರೋಗ್ರಾಂ ಮತ್ತು ಅದರ ಮೂಲ ಕೋಡ್‌ಗೆ ಲಿಂಕ್ ಮಾಡಿ.

ಧನ್ಯವಾದಗಳು.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ