Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Использование стенографии

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// Do the actual encryption of the message inside the picture. 
procedure TForm1.btnEncryptClick(Sender: TObject);
 var
   x, y, i, j: Integer;
   PixelData: TColor;
   CharMask, CharData: Byte;
 begin
   // Assign the original picture to both the target encrypted image 
  // and delta image. Also make sure thier resolution is sufficient to 
  // indicate the change in the LSB. 
  imgTarget.Picture.Assign(imgOrig.Picture);
   imgDelta.Picture.Assign(imgOrig.Picture);
   imgTarget.Picture.Bitmap.PixelFormat := pf32bit;
   imgDelta.Picture.Bitmap.PixelFormat := pf32bit;
   x := 0;
   y := 0;
   // The letter 'c' is identified by the binary representation of '10000011' 
  // for each '1' in this number change the current pixel's LSB value. 
  with imgTarget.Picture.Bitmap do
     for i := 1 to Length(sourceMessage.Text) do
     begin
       CharMask := $80;
       // 8 bytes for every letter to be encrypted. 
      for j := 1 to 8 do
       begin
         // See if the current byte in the character is either '1' or '0'. 
        CharData := Byte(sourceMessage.Text[i]) and CharMask;
         //Data is not zero - change the LSB of the current pixel. 
        if (CharData <> 0) then
         begin
           // Xor the LSB value - hence change its value. 
          PixelData := Canvas.Pixels[x, y] xor $1;
           // Store the changed pixel color back in the Pixels array. 
          Canvas.Pixels[x, y] := PixelData;
         end;

         // Move to the next pixel. 
        x := (x + 1) mod Width;
         if (x = 0) then
         begin
           Inc(y);
         end;
         // Move the mask to be applied to the current character to the 
        // right, hence will now examine the next bit in the binary 
        // representation of the current letter to be encrypted. 
        CharMask := CharMask shr 1;
       end;
     end;
   // Show the difference in the Delta image. 
  for y := 0 to imgOrig.Picture.Bitmap.Height -1 do
     for x := 0 to imgOrig.Picture.Bitmap.Width -1 do
       // Check for difference, the difference will show in the LSB of every 
      // pixel in the original and target images. 
      if (imgOrig.Picture.Bitmap.Canvas.Pixels[x, y] <>
         imgTarget.Picture.Bitmap.Canvas.Pixels[x, y]) then
         imgDelta.Picture.Bitmap.Canvas.Pixels[x, y] := clYellow;
 end;


 // Decryption ( by Lemy ) 
procedure TForm1.btnDecryptClick(Sender: TObject);
 Var
   x, y: integer;
   mask, ch: byte;
 begin
   sourceMessage.Clear;
   mask := $80;
   ch := 0;
   for y := 0 to imgOrig.Picture.Bitmap.Height -1 do
   begin
     for x := 0 to imgOrig.Picture.Bitmap.Width -1 do
     begin
       // if the pixel is different then set related bit 
      if (imgOrig.Picture.Bitmap.Canvas.Pixels[x, y] <>
       imgTarget.Picture.Bitmap.Canvas.Pixels[x, y]) then
         ch := ch or mask;
       // shift the bit to the rigtht 
      mask := mask shr 1;
       // if the mask is 0 then the dexryption of a char is completed 
      // so add to the Text and rest the highest bit 
      if mask = 0 Then
       begin
         sourceMessage.Text := sourceMessage.Text + char(ch);
         mask := $80;
         ch := 0;
       end;
     end;
   end;
 end;
Проект Delphi World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.