2009-04-10 13 views
6

Quiero distribuir algunas imágenes y no permitir que otras personas las vean a menos que estén usando mi programa. Mi intención será usar archivos JPG en los que alteraré el encabezado para que otros lectores de imágenes ya no puedan leerlos. Por ejemplo, puedo eliminar los bytes 7-10 que son la firma mágica de JPG. Más tarde, mi programa reconstruirá el encabezado y mostrará el archivo JPG.Ofuscación de imágenes

Pregunta: ¿cómo hago esto sobre la marcha, sin leer el archivo JPG "roto", restaurar el encabezado, guardar el archivo bueno en el disco y luego volver a cargarlo como un "buen" archivo JPG?

+0

Solo recuerda que si alguien puede ver la imagen con tu programa, puede extraerla. Todo lo que tienen que hacer es imprimir la pantalla. – Herms

+0

Lo sé. Esto está bien para mí. Gracias Herms. – Ampere

Respuesta

16

carga el archivo "roto" en un TMemoryStream, remiendo los bytes en la memoria, y utilizar TGraphic.LoadFromStream() para cargar el archivo JPG fijo.

+0

Maldita sea, eres rápido. :-) –

+1

> Maldición, eres rápido. :-) - Ken White De acuerdo. Gracias! Me alegra :) – Ampere

+1

En lugar de TGraphic puede usar [TSynPicture] (http://blog.synopse.info/post/2010/03/20/GIF,-TIF,-PNG-and-JPG-pictures-TGraphic- clase de lectura/escritura vía GDI). –

2

La respuesta de Mghie es casi tan buena como la que encontrarás, pero es probable que no sea demasiado efectiva. Si alguien quiere ver sus imágenes y saben algo acerca de los formatos de imagen, la abrirán en un editor hexadecimal y lo más probable es que reconozcan lo que ven como JPEG con el encabezado mágico eliminado.

Si realmente quieres evitar que alguien vea tus imágenes, construye tu propio formato de imagen (realmente no es tan difícil como suena) y pon los metadatos lo menos posible y luego espera que eso funcione. O encriptelos o póngalos en un archivo (cree su propio formato de archivo para obtener los mejores resultados) y espere que funcione.

La cosa es, en última instancia, todo lo que se codifica debe decodificarse antes de que se pueda mostrar, y cualquier hacker suficientemente talentoso puede rastrear su rutina de decodificación y descubrir cómo funciona. ¿Por qué intentas ocultar cosas a tus usuarios de todos modos?

1

Podría hacerles más difícil el byte empaquetando las imágenes como recursos cifrados. Pero como todo lo demás, si tienen acceso a los archivos que podrían sacar las imágenes. Simplemente depende de cuánto esfuerzo estén dispuestos a usar.

+0

> Solo depende de cuánto esfuerzo estén dispuestos a usar. No demasiado. Acepto que alguien puede descifrar imágenes. Quizás más tarde agregue encriptación adicional. Pero de todos modos es inútil ya que cualquiera puede imprimir la imagen. – Ampere

6

Cifrarlos. Cargue la imagen encriptada, descifre en la memoria y luego haga la carga de la corriente como lo sugirió Mghie.

4

¿Por qué no cifrar las imágenes con una clave privada y distribuir su clave pública a las personas que desea ver? es mucho más fácil distribuir una clave pública que escribir algún software personalizado y distribuirlo. No lo olvides; todo lo que se muestra en la pantalla se puede capturar en la pantalla. El hecho de que un JPEG modificado a medida solo se pueda mostrar con su aplicación no es una protección. También no lo olvides; la gente simplemente puede distribuir su software con la imagen destrozada.

+0

El punto de captura de pantalla es bueno. Puede colocar algo a lo largo de la imagen mostrada con esteganografía. Luego, si la imagen comprometida está disponible para usted, puede averiguar de quién era la copia. Si esto es útil depende de su dominio/necesidades. – Argalatyr

0

Dependiendo de qué tan seguro lo necesite, podría hacer algo tan simple como ofuscar la extensión de archivo a una extensión que solo se abre con su aplicación. Esto solo funcionará si no son imágenes súper secretas que está cambiando.

Cuestiones relacionadas