Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование стенографии

Delphi , Синтаксис , Шифрование

Использование стенографии

Оформил: 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;

Код использует стеганографию для скрытия секретного сообщения в изображении. Процесс шифрования заключается в изменении наименее значимого бита (LSB) каждого пикселя в оригинальном изображении, чтобы представить двоичное представление символов в сообщении.

Вот шаг за шагом, как это работает:

  1. Процедура btnEncrypt принимает оригинальное изображение и шифрует сообщение, изменяя LSB каждого пикселя.
  2. Она проходит по каждому символу в сообщении, конвертируя каждый байт в его двоичное представление.
  3. Для каждого двоичного цифры (0 или 1) она проверяет, если соответствующий бит установлен (1) или нет (0). Если он установлен, она изменяет LSB пикселя в оригинальном изображении, выполнив операцию XOR с 1 (двоичное представление 00000001).
  4. Процедура btnDecrypt дешифровывает сообщение, проходим по каждому пикселю в целевом изображении.
  5. Для каждого пикселя, который имеет другой значок, чем соответствующий пиксель в оригинальном изображении, она устанавливает соответствующий бит в декодированном байте символа.

Техника стеганографии, используемая здесь, называется "бит-уровневой" или "пиксель-уровневой", где информация для скрытия (сообщение) кодируется изменением наименее значимых бит каждого пикселя цвета.

Некоторые предложения по улучшению:

  1. Обработка ошибок: Код не обрабатывает ошибки хорошо. Например, если пользователь пытается зашифровать сообщение, которое длиннее, чем изображение может вместить, оно будет перезаписывать другие части изображения.
  2. Безопасность: Стеганография не безопасна сама по себе, и это реализация не является исключением. Атакующий легко мог бы обнаружить наличие скрытого сообщения, сравнивая оригинальное и целевое изображения пиксель за пикселем.
  3. Выполнение: Процессы шифрования и дешифрования могли быть оптимизированы для лучшего выполнения.

Вот альтернативное решение:

Вместо изменения отдельных пикселей вы можете использовать более надежную технику стеганографии, например, распространяя информацию по нескольким пикселям или используя определенный паттерн для embedding сообщения в изображении.

Кроме того, вы могли бы рассмотреть использование более безопасной методики скрытия сообщения, например, генерации уникального ключа для каждого символа с помощью функции хеширования и зашифровки сообщения с помощью этого ключа. Это сделало бы его намного труднее для атакующего обнаружить наличие скрытого сообщения.

В целом, хотя этот код демонстрирует основное понимание стеганографии, он не является безопасным или надежным реализацией, и дополнительные улучшения необходимы, чтобы сделать его более эффективным.

Использование стенографии для зашифровки текста в изображении.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шифрование ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:14:12/0.0057108402252197/1