์๋ ์์ ์ ๋๋ ๋ด ๊ธ์ ์ผ๋ค.
์ค๋์ ์กฐ๊ธ ๋ ๊น๊ฒ ํ๊ณ ๋ค์ด LSB ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ด์ฌ์ด ์์ผ์๋ฉด ๊ณ ์์ด ์๋์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค. (์ปท ์๋์๋ ํธ๋ํฝ์ด ์์ต๋๋ค: ์ฝ XNUMXMB์
๋๋ค.)
์ฐ์ ๊ฐ๋ตํ ์๊ฐ๊ฐ ํ์ํฉ๋๋ค. ์ํธํ์ ๋ชฉ์ ์ด ๋น๋ฐ ์ ๋ณด๋ฅผ ์ฝ์ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๊ตฌ๋ ์๊ณ ์์ต๋๋ค. ๋ฌผ๋ก ์ํธํ์๋ ๊ทธ ์ฉ๋๊ฐ ์์ง๋ง ๋ฐ์ดํฐ ๋ณดํธ์ ๋ํ ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค. ์ ๋ณด๋ฅผ ์ํธํํ ํ์๋ ์์ง๋ง ์ ๋ณด๊ฐ ์๋ ์ฒํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์คํ
๊ฐ๋
ธ๊ทธ๋ํผ๊ฐ ๋ฐ๋ช
๋ ์ด์ ์
๋๋ค. Wikipedia๋ "์คํ
๊ฐ๋
ธ๊ทธ๋ํผ(๊ทธ๋ฆฌ์ค์ด ฯฯฮตฮณฮฑฮฝฮฟฯ - ์จ๊ฒจ์ง ๊ทธ๋ฆฌ์ค์ด ฮณฯฮฑฯฮฉ - ๋ฌธ์ ๊ทธ๋๋ก "๋น๋ฐ ์ฐ๊ธฐ"๋ผ๊ณ ์๋๋ค)๋ ์ ์ก ์ฌ์ค์ ๋น๋ฐ๋ก ์ ์งํ์ฌ ์จ๊ฒจ์ง ์ ๋ณด ์ ์ก์ ๊ณผํ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
๋ฌผ๋ก ์ํธํ์ ์คํ ๊ฐ๋ ธ๊ทธ๋ํผ ๋ฐฉ๋ฒ์ ๊ฒฐํฉ์ ๊ธ์งํ๋ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค. ๋์ฑ์ด ์ค์ ๋ก ๊ทธ๋ค์ ์ด๊ฒ์ ์ํํ์ง๋ง ์ฐ๋ฆฌ์ ์๋ฌด๋ ๊ธฐ๋ณธ์ ์ดํดํ๋ ๊ฒ์ ๋๋ค. Wikipedia ๊ธฐ์ฌ๋ฅผ์ฃผ์ ๊น๊ฒ ์ฐ๊ตฌํ๋ฉด ์คํ ๊ฐ๋ ธ๊ทธ๋ํผ ์๊ณ ๋ฆฌ์ฆ์ ์์๊ฐ ํฌํจ๋์ด ์์์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ปจํ ์ด๋์ ๋ฉ์์ง. ์ปจํ ์ด๋๋ ๋น๋ฐ ๋ฉ์์ง๋ฅผ ์จ๊ธฐ๋ ๋ฐ ๋์์ด ๋๋ ์ ๋ณด์ ๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ปจํ ์ด๋๋ BMP ํ์์ ์ด๋ฏธ์ง์ ๋๋ค. ๋จผ์ ์ด ํ์ผ์ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํ์ผ์ ํ์ผ ํค๋, ์ด๋ฏธ์ง ํค๋, ํ๋ ํธ, ์ด๋ฏธ์ง ์์ฒด์ 4๊ฐ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ์ํด์๋ ํค๋์ ์ฐ์ฌ์ง ๋ด์ฉ๋ง ์๋ฉด ๋ฉ๋๋ค.
ํค๋์ ์ฒ์ 4๋ฐ์ดํธ๋ BM ์๋ช ์ด๊ณ , ๋ฐ์ดํธ ๋จ์์ ํ์ผ ํฌ๊ธฐ๋ ๋๋ธ ์๋๋ก ๊ธฐ๋ก๋๊ณ , ๋ค์ 24๋ฐ์ดํธ๋ ์์ฝ๋์ด ์์ผ๋ฉฐ XNUMX์ ํฌํจํด์ผ ํ๋ฉฐ, ๋ง์ง๋ง์ผ๋ก ๋ ๋ค๋ฅธ ๋๋ธ ์๋์๋ ํค๋ ์์ ๋ถ๋ถ์ ์คํ์ ์ด ํฌํจ๋ฉ๋๋ค. ํ์ผ์ ์ด๋ฏธ์ง์ ์ค์ ๋ฐ์ดํธ๋ก ๋ณํํฉ๋๋ค. XNUMX๋นํธ bmp ํ์ผ์์ ๊ฐ ํฝ์ ์ XNUMX๊ฐ์ BGR ๋ฐ์ดํธ๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
์ด์ ์ฐ๋ฆฌ๋ ์ด๋ฏธ์ง๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์์์ต๋๋ค. ๋จ์ ๊ฒ์ ํ์ํ ์ ๋ณด๋ฅผ ์ด๋ฏธ์ง์ ์ด๋ป๊ฒ ์ธ ์ ์๋์ง ์ดํดํ๋ ๊ฒ๋ฟ์ ๋๋ค. ์ด๋ฅผ ์ํด์๋ LSB ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ณธ์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์์ ์ธ์ฝ๋ฉ์ ๋ด๋นํ๋ ๋ฐ์ดํธ์์ ์ตํ์ ๋นํธ๋ฅผ ๋์ฒดํฉ๋๋ค. ๋น๋ฐ ๋ฉ์์ง์ ๋ค์ ๋ฐ์ดํธ๊ฐ 11001011์ด๊ณ ์ด๋ฏธ์ง์ ๋ฐ์ดํธ๊ฐ...11101100 01001110 01111100 0101100111...์ด๋ผ๋ฉด ์ธ์ฝ๋ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋น๋ฐ ๋ฉ์์ง ๋ฐ์ดํธ๋ฅผ 4๊ฐ์ 11๋นํธ ๋ถ๋ถ(00, 10, 11, 111011)์ผ๋ก ๋ถํ ํ๊ณ ์ด๋ฏธ์ง์ ํ์ ๋นํธ๋ฅผ ๊ฒฐ๊ณผ ์กฐ๊ฐ์ผ๋ก ๋์ฒดํฉ๋๋ค: ...XNUMX11 01001100 01111110 0101100111โฆ ์ด๋ฌํ ๊ต์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋์ ๋์๋ ๋์ ๋์ง ์์ต๋๋ค. ๋์ฑ์ด, ๋ง์ ์ค๋๋ ์ถ๋ ฅ ์ฅ์น๋ ์ด๋ฌํ ์ฌ์ํ ๋ณ๊ฒฝ ์ฌํญ์กฐ์ฐจ ํ์ํ ์ ์์ต๋๋ค.
2๊ฐ์ ์ตํ์ ๋นํธ๋ฟ๋ง ์๋๋ผ ๊ทธ ์์ ๊ด๊ณ์์ด ๋ณ๊ฒฝํ ์ ์๋ค๋ ๊ฒ์ ๋ถ๋ช ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ํจํด์ด ์์ต๋๋ค. ๋ ๋ง์ ๋นํธ๋ฅผ ๋ณ๊ฒฝํ ์๋ก ๋ ๋ง์ ์ ๋ณด๋ฅผ ์จ๊ธธ ์ ์์ผ๋ฉฐ ์ด๋ก ์ธํด ์๋ณธ ์ด๋ฏธ์ง์ ๋ ๋ง์ ๊ฐ์ญ์ด ๋ฐ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ ๋ ๊ฐ์ ์ด๋ฏธ์ง์ ๋๋ค.
์ต์ ์ ๋คํ์์๋ ๋ถ๊ตฌํ๊ณ ๋ ์ฌ์ด์ ์ฐจ์ด๋ฅผ ๋ณผ ์ ์์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ ๋ฒ์งธ ์ด๋ฏธ์ง์๋ ์ค๋ช
๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฃจ์ด์ค ์บ๋กค์ ์ "์ค๋ํฌ ์ฌ๋ฅ"์ด ์จ๊ฒจ์ ธ ์์ต๋๋ค. ์ฌ๊ธฐ๊น์ง ์ฝ์๋ค๋ฉด ์๋ง๋ ๊ตฌํ์ ๋ํด ๋ฐฐ์ฐ๊ณ ์ถ์ ๊ฒ์
๋๋ค. ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ๋ชจ๋ ๊ฒ์ด Delphi์์ ์ํ๋๋ค๋ ์ ์ ์ฆ์ ๊ฒฝ๊ณ ํ๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. 1. ์ ๋ ๋ธํ์ด๊ฐ ์ข์ ์ธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. 2. ์ด ํ๋ก๊ทธ๋จ์ ์ปดํจํฐ ๋น์ ์ ๊ธฐ์ด์ ๋ํ ๊ฐ์ข๋ฅผ ์ค๋นํ๋ ๊ณผ์ ์์ ํ์ํ ๊ฒ์ผ๋ก, ์ ๊ฐ ์ด ๊ฐ์ข๋ฅผ ๊ฐ๋ฅด์น๋ ํ์๋ค์ ์์ง ๋ธํ์ด ์ธ์๋ ์๋ฌด๊ฒ๋ ๋ชจ๋ฆ
๋๋ค. ๊ตฌ๋ฌธ์ ์ต์ํ์ง ์์ ๋ถ๋ค์ ์ํด ํ ๊ฐ์ง ์ค๋ช
์ด ํ์ํฉ๋๋ค. shl x๋ x๋งํผ ์ผ์ชฝ์ผ๋ก ๋นํธ ๋จ์ ์ด๋ํ๊ณ , shr x๋ x๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋นํธ ๋จ์๋ก ์ด๋ํฉ๋๋ค.
๋ฌธ์์ด์ ์ ์ฅ๋ ํ
์คํธ๋ฅผ ์ปจํ
์ด๋์ ์ฐ๊ณ ํ์ XNUMX๋ฐ์ดํธ๋ฅผ ๋์ฒดํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋
น์ ์ฝ๋:
i:=1 ~ length(str) do
์์ํ๋ค
l1:=byte(str[i]) shr 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);
๋;
์, ์ ๋ง ๊ฒ์ผ๋ฅธ ์ฌ๋๋ค์ ์ํด-
๊ฐ์ฌํฉ๋๋ค.
์ถ์ฒ : habr.com