this slowpoke moves

Steganography Crypter

Hier muss Image 1 und 3 mit einem Bild geladen werden, um den verschlüsselten Text auf Image 2 zu schreiben.

 
// Do the actual encryption of the message inside the picture.
procedure TForm1.Button1Click(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.
  Image1.Picture.Assign(Image3.Picture);
  Image2.Picture.Assign(Image3.Picture);
  Image1.Picture.Bitmap.PixelFormat := pf32bit;
  Image2.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 Image1.Picture.Bitmap do
    for i := 1 to Length(Memo1.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(Memo1.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 Image3.Picture.Bitmap.Height -1 do
    for x := 0 to Image3.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 (Image3.Picture.Bitmap.Canvas.Pixels[x, y] <>
        Image1.Picture.Bitmap.Canvas.Pixels[x, y]) then
        Image2.Picture.Bitmap.Canvas.Pixels[x, y] := clYellow;
end;

// Decryption
procedure TForm1.Button2Click(Sender: TObject);
Var
  x, y: integer;
  mask, ch: byte;
begin
  Memo1.Clear;
  mask := $80;
  ch := 0;
  for y := 0 to Image3.Picture.Bitmap.Height -1 do
  begin
    for x := 0 to Image3.Picture.Bitmap.Width -1 do
    begin
      // if the pixel is different then set related bit
      if (Image3.Picture.Bitmap.Canvas.Pixels[x, y] <>
      Image1.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
        Memo1.Text := Memo1.Text + char(ch);
        mask := $80;
        ch := 0;
      end;
    end;
  end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate