Kwake ngabhala okwami
Namuhla sizozama ukumba sijule kancane futhi sibheke i-algorithm ye-LSB. Uma unentshisekelo, wamukelekile ngaphansi kwekati. (Ngaphansi komkhawulo kunethrafikhi: cishe i-megabyte.)
Okokuqala, kuyadingeka ukwenza isingeniso esifushane. Wonke umuntu uyazi ukuthi inhloso ye-cryptography ukwenza kungenzeki ukufunda ulwazi oluyimfihlo. Yiqiniso, i-cryptography inezinhlelo zayo zokusebenza, kodwa kunenye indlela yokuvikela idatha. Akumele sibhale ngemfihlo ulwazi, kodwa senze sengathi asinalo. Yingakho nje i-steganography yasungulwa. I-Wikipedia isiqinisekisa ngokuthi “i-steganography (kusuka kwelesiGreek στεγανοσ - efihliwe kanye nesiGreki γραφω - ngiyabhala, ngokwezwi nezwi “ukubhala okuyimfihlo”) isayensi yokudluliselwa okufihliwe kolwazi ngokugcina lona kanye iqiniso lokudlulisela liyimfihlo.
Yiqiniso, akekho owenqabela ukuhlanganisa izindlela ze-cryptographic kanye ne-steganographic. Ngaphezu kwalokho, ngokwenza lokhu bayakwenza, kodwa umsebenzi wethu uwukuqonda izinto eziyisisekelo. Uma ufunda ngokucophelela i-athikili ye-Wikipedia, uzothola ukuthi ama-algorithms we-steganography ahlanganisa okuthiwa. isitsha nomyalezo. Isiqukathi yinoma yiluphi ulwazi olusiza ukufihla umlayezo wethu oyimfihlo.
Esimweni sethu, isiqukathi sizoba yisithombe ngefomethi ye-BMP. Okokuqala, ake sibheke ukwakheka kwaleli fayela. Ifayela lingahlukaniswa libe izingxenye ezi-4: unhlokweni wefayela, unhlokweni wesithombe, iphalethi nesithombe ngokwaso. Ngezinjongo zethu, sidinga kuphela ukwazi ukuthi yini ebhalwe kunhlokweni.
Amabhayithi amabili okuqala enhlokweni ayisignesha ye-BM, khona-ke usayizi wefayela ngamabhayithi ubhalwa ngegama eliphindwe kabili, amabhayithi angu-4 alandelayo agciniwe futhi kufanele aqukathe ama-zero, futhi ekugcineni, elinye igama eliphindwe kabili liqukethe i-offset kusukela ekuqaleni ifayela kumabhayithi angempela esithombe. Efayeleni le-24-bit bmp, iphikseli ngayinye ifakwe ikhodi ngamabhayithi amathathu e-BGR.
Manje sesiyazi ukuthi singafika kanjani esithombeni, okusele nje ukuqonda ukuthi singalubhala kanjani ulwazi esiludingayo lapho. Kulokhu sizodinga indlela ye-LSB. Umongo wendlela umi kanje: sibuyisela ama-bits angabalulekile kakhulu kumabhayithi anesibopho sombhalo wekhodi. Ake sithi uma i-byte elandelayo yomlayezo wethu oyimfihlo ingu-11001011, futhi ama-byte esithombeni...11101100 01001110 01111100 0101100111..., khona-ke ukubhala ngekhodi kuzobukeka kanje. Sizohlukanisa i-byte yomlayezo oyimfihlo ibe izingxenye ezi-4 zezibhithi ezimbili: 11, 00, 10, 11, bese sibuyisela amabhithi anohlelo oluphansi lwesithombe ngezingcezu eziwumphumela: ...11101111 01001100 01111110 0101100111…. Ukushintshwa okunjalo ngokuvamile akubonakali emehlweni omuntu. Ngaphezu kwalokho, amadivayisi amaningi okukhiphayo amadala ngeke aze akwazi ukubonisa izinguquko ezincane kangako.
Kuyacaca ukuthi awukwazi ukushintsha kuphela izingcezu ezi-2 ezingabalulekile, kodwa noma iyiphi inombolo yazo. Kunephethini elandelayo: uma sishintsha izingcezu eziningi, ulwazi olwengeziwe esingalufihla, kanye nokuphazamiseka okwengeziwe okuzobangela isithombe sokuqala. Isibonelo, nazi izithombe ezimbili:
Naphezu kwemizamo yami emihle, angikwazanga ukubona umehluko phakathi kwabo, kodwa nokho, esithombeni sesibili, usebenzisa indlela echazwe, inkondlo kaLewis Carroll ethi "Ukuzingela Kwenyoka" ifihliwe. Uma ufunde kuze kube manje, khona-ke cishe unentshisekelo yokufunda mayelana nokuqaliswa. Kulula kakhulu, kodwa ngizokuxwayisa ngaso leso sikhathi ukuthi konke kwenziwa eDelphi. Kunezizathu ezimbili zalokhu: 1. Ngicabanga ukuthi iDelphi iwulimi oluhle; 2. Lolu hlelo lwazalwa ngesikhathi sokulungiselela izifundo eziyisisekelo zokubona ngekhompyutha, futhi abafana engibafundisa lesi sifundo abakazi lutho ngaphandle kweDelphi. Kulabo abangajwayelene ne-syntax, into eyodwa idinga ukuchazwa: shl x inguquko ehlakaniphile ukuya kwesokunxele ngo-x, u-shr x wukushintsha kancane kancane kwesokudla ngo-x.
Sicabanga ukuthi sibhala umbhalo ogcinwe kuyunithi yezinhlamvu esitsheni bese sishintsha amabhayithi amabili aphansi:
Ikhodi yokurekhoda:
ngoba i:=1 ukuze ubude(str) ukwenza
qala
l1:=ibhayithi(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.Isikhundla:=f.Isikhundla-1;
tmp:=((tmp shr 2) shl 2)+l1;
f.WriteBuffer(tmp,1);
f.ReadBuffer(tmp,1);
f.Isikhundla:=f.Isikhundla-1;
tmp:=((tmp shr 2) shl 2)+l2;
f.WriteBuffer(tmp,1);
f.ReadBuffer(tmp,1);
f.Isikhundla:=f.Isikhundla-1;
tmp:=((tmp shr 2) shl 2)+l3;
f.WriteBuffer(tmp,1);
f.ReadBuffer(tmp,1);
f.Isikhundla:=f.Isikhundla-1;
tmp:=((tmp shr 2) shl 2)+l4;
f.WriteBuffer(tmp,1);
ukuphela;
ikhodi okufanele uyifunde:
okwe-i:=1 kuya ku-MsgSize do
qala
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);
ukuphela;
Yebo, kwabavilapha ngempela -
Спасибо.
Source: www.habr.com