Saltar al contenido principal
RaoufResearchOS
Español
Sídney, AustraliaHora actual en Sídney—
Pulsa Escape para cerrar esta ventana.
Herramienta de esteganografía de imágenes

Experimento: 003

Herramienta de esteganografía de imágenes

CONCEPTO

Esteganografía de imágenes por bit menos significativo (LSB) en Go. Inserta una carga útil precedida de su longitud en el canal rojo de píxeles PNG.

Objetivo

Implementar un canal oculto modificando los bits menos significativos de los píxeles y comprobar la recuperación exacta de la carga original.

Limitaciones

La carga se limita a (ancho × alto) / 8 bytes menos la cabecera de longitud de 4 bytes. No resiste la recodificación JPEG ni los cambios de tamaño de la imagen.

  • Go
  • Criptografía
  • Procesamiento de imágenes
Código fuente · idioma originalsrc/main.go
1package main23import (4	"encoding/binary"5	"fmt"6	"image"7	"image/color"8	"image/png"9	"os"10)1112func embed(img *image.NRGBA, payload []byte) error {13	header := make([]byte, 4)14	binary.BigEndian.PutUint32(header, uint32(len(payload)))15	bits := append(header, payload...)1617	idx := 018	for y := img.Bounds().Min.Y; y < img.Bounds().Max.Y; y++ {19		for x := img.Bounds().Min.X; x < img.Bounds().Max.X; x++ {20			if idx >= len(bits)*8 {21				return nil22			}23			c := img.NRGBAAt(x, y)24			bytePos, bitPos := idx/8, uint(7-idx%8)25			bit := (bits[bytePos] >> bitPos) & 126			c.R = (c.R & 0xFE) | bit27			img.SetNRGBA(x, y, color.NRGBA{R: c.R, G: c.G, B: c.B, A: c.A})28			idx++29		}30	}31	if idx == len(bits)*8 {32		return nil // The payload filled the image exactly.33	}34	return fmt.Errorf("image too small for payload")35}3637func main() {38	f, _ := os.Open("cover.png")39	defer f.Close()40	src, _ := png.Decode(f)4142	dst := image.NewNRGBA(src.Bounds())43	for y := dst.Bounds().Min.Y; y < dst.Bounds().Max.Y; y++ {44		for x := dst.Bounds().Min.X; x < dst.Bounds().Max.X; x++ {45			dst.Set(x, y, src.At(x, y))46		}47	}4849	_ = embed(dst, []byte("HIDDEN_MESSAGE"))5051	out, _ := os.Create("stego.png")52	defer out.Close()53	png.Encode(out, dst)54	fmt.Println("Done — payload embedded into stego.png")55}
Código de solo lecturaUTF-8

Buscar

Encuentra un proyecto, una publicación, un artículo o una página.

30 / 41 · Resultados de búsqueda

↑ ↓ Navegación del espacio de trabajoEnter AbrirEsc Cerrar