whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1541)

Database (90)
Files (137)
Forms (107)
Graphic (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Math (76)
Misc (126)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (266)
VCL (242)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

41 Visitors Online


 
...use steganography?
Autor: Eyal Hirsch
[ Print tip ]  

Tip Rating (32):  
     




// 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 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;



 

Rate this tip:

poor
very good


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners