LSB steganographiae

Olim scripsi my primum post in hub. Et haec posta dedicata est problemati admodum interesting, scilicet steganographiae. Utique propositio in illo antiquo argumento non potest dici steganographia in vero sensu verbi. Ludum cum formatis lima est, sed tamen ludus pulchre interesting.

Hodie paulo altius fodere conabimur et algorithmum LSB intueri. Si interest, gratus es sub cat. (Sub sectis negotiationis est: de megabyte).

Ante omnia necesse est brevem introductionem facere. Quisque scit propositum cryptographiae efficere posse ut notitias secretas legerit. Utique cryptographia habet suas applicationes, sed alia accessio ad tutelam data est. Informationes encryptas non habemus, sed fingimus nos eam non habere. Hanc ob rem inventa est steganographia. Vicipaedia nos certiores facit "steganographiam" (e Graeco στΡγανοσ - occultam et Graeco γραφω - scribo, ad litteram "scribo secretam") esse scientiam transmissionis occultae notitiarum, ipso facto secreti tradendi.

Utique nemo vetat modos cryptographicos et steganographicos coniungi. Praeterea in usu hoc faciunt, sed opus est fundamenta intelligere. Si diligenter investigas articulum Vicipaediae, invenies steganographiam algorithmorum sic dictam includere. continens et nuntius. Continens est quaevis notitia quae nuntium secretum nostrum celare adiuvat.

In nobis, continens erit imago in forma BMP. Primum inspiciamus structuram huius fasciculi. Tabella in 4 partes dividi potest: fasciculus capitis, imago capitis, palette et imago ipsa. Ad nostrum propositum, solum quid in titulo scriptum sit scire oportet.

Duo primi bytes capitis sunt BM obsignatio, deinde magnitudo tabellae in bytes duplici verbo scripta est, altera 4 bytes servata est et cyphris continere debet, ac denique alterum verbum duplex continet cinguli ab initio. file ad ipsam imaginem bytes. In fasciculo 24-bit bmp, unumquodque pixel cum tribus bytis BGR coscriptum est.

Nunc scimus quomodo ad imaginem perveniamus, omnia quae restant intelligere est quomodo informationes quae ibi opus sunt scribere possumus. Hac ratione opus erit LSB. Methodi essentia haec est: minimum significantes frenos in bytes reponimus, qui colori modum transtulerunt. Dicamus si proximus byte nuntii secreti nostri 11001011 est, et bytes in imagine sunt ... 11101100 01001110 01111100 0101100111 ..., deinde descriptam videbunt. Nuntium occultum byte in 4 duas partes dividemus: 11, 00, 10, 11, et repone humili ordini frusta imaginis cum fragmentis resultantibus: ...11101111 01001100 01111110 0101100111…. Talis substitutio plerumque oculis hominum non notabilis est. Multae praeterea machinae maiores output ne minores quidem mutationes ostendere poterunt.

Patet te non solum 2 minimum significantes particulas mutare posse, sed omnem numerum. Est hoc exemplum: quo magis frena mutamus, eo plura occultare possumus, eoque magis impedimentum hoc in imagine originali reddet. Exempli gratia hic sunt duae imagines;

LSB steganographiae
LSB steganographiae

Quamvis maxime nisus sit, differentiam eorum videre non potui, sed tamen in secunda imagine, methodo descripta adhibita, Ludovicum Carroll carmen "Venatio Snark" latet. Si hoc longe legisti, tunc probabiliter discere de exsecutione interest. Simplex est, sed te statim monebo omnia in Delphis agenda esse. Duae huius causae sunt: ​​1. Puto Delphi linguam bonam esse; 2. Haec progressio nata est in processu praeparandi curriculum in fundamentalibus visionis computatricis et latinae, quibus hanc cursum doceo, nondum aliud quam Delphis sciunt. Nam qui syntaxi noti non sunt, unum explicandum est: shl x est ad sinistram per x leviter transpositio, shr x est ad dextram per x leviter transpositio.

Ponamus nos textum scribere in filo repositum in continente et duos bytes inferiores reponens;
Recordatio codicis:

ad I: = I ad longitudinem (sp) do
    incipere
      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);
 
    terminus;

codice legere;

quia ego: = I ad MsgSize do
    incipere
      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);
    terminus;

Bene, nam vere otiosi sunt - link to the programme and its source code.

Бпасибо.

Source: www.habr.com