elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
26 Mayo 2012, 10:45  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: APOKLIPTICO)
| | | |-+  Necesito elaborar un hash medio complicado
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito elaborar un hash medio complicado  (Leído 2,403 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Necesito elaborar un hash medio complicado
« en: 13 Agosto 2009, 04:09 »

Hola gente.. tengo un problema :o (unos cuantos en este último mes  :-\ )
El tema es así:

Estoy haciendo 2 programas.. 1 que es el que indexa datos a la base de datos y el otro que es como el "buscador"

el 1º programa toma de la carpeta C:/IMAGENES una imagen (repetirá éste proceso con cada imagen) y a ella le toma una muestra de sus colores en diferentes sectores de la imagen.. o sea... en la 1º linea de pixeles, toma 10 pixeles supongamos (1 pixel cada el 10% de su tamaño..) y verticalmetne hace lo mismo... o sea.. crea como una "matriz" de pixeles..
algo así:

supongan que cada punto blanco es el pixel al que le he visto su color...

ahora tengo todooossssss los valores de sus colores en RGB
tengo 10 x 10 pixeles. o sea: 100 pixeles.. y cada pixel tiene los valores: XXX YYY ZZZ (por ser RGB) entonces tengo 100 x XXX YYY ZZZ
Ahora bien, yo quiero hacer un HASH de esos pixeles para que quede un numero mas chiquito para poder guardarlo en la base de datos
Yo pensé hacer lo siguiente:
Sumar XXX + YYY + ZZZ... hacer ésto con todos los pixeles para tener un valor mucho menor de 1 solo pixel.. e identificar al color del pixel con ese valor... PERO si tengo un pixel de color: 123 456 789 y otro 789 456 123, si sumamos esos numeros, va a dar el mismo valor.. y en realidad, no es el mismo color de pixel ¬¬ entonces queda descartada esa idea...
Luego pense obtener el hash MD5 del gran chorro de numeros (de los 900 numeros.. ya que es: 100 x xxxyyyzzz) xxxyyyzzzxxxyyyzzzxxxyyyzzz... y WALA... quedaría perfecto... me daría el identificador MD5 perfecto... y lo agregaría a la base de datos(pero OJO.. sigan leyendo)

Ahora pasamos al 2º programa...
En el 2º programa hay que ingresar una imagen.. y éste programa deberia mirar en la base de datos si existe esa imagen.. como haría eso?
Tomaría tambien cada el 10% a 1 pixel y generaría una matiz tambien con la misma cantidad de pixeles... tendria que generar el MD5 y WALA... ahora a buscar si existe un MD5 igual en la base de datos :D
Encontrará la imagen si es que existe, proque el MD5 será igual...


PERO..
Ahora hay un problema de CALIBRE.. o sea... Supongamos que hago una copia de una de las imagenes de C:/IMAGENES.. hago una copia EXACTA en el escritorio... calculo cual sería el 1º pixel al que le toma una muestra.. y lo pinto de negro...
De los 100 pixeles, coincidirá ahora en 99 pixeles.. ya que a uno lo cambie de color...

PERO.. la imagen es 99,999999999999% igual... cambia 1 solo pixel de color.. sin embargo, el MD5 será EXTREMADAMENTE NADA QUE VER... Cambiará demasiado.. y no dará la misma imagen...  :-\ Y yo quiero que si dé el mismo HASH...  :o

Como se podrá hacer eso??

Pensé en lo siguiente:
de los colores: xxx yyy zzz TRUNCAR o REDONDEAR los ultimos valores a "0" y truncar.. y que me quede el color así: XX YY ZZ
De esta manera si el valor del color cambia poco, y queda dentro del redondeo, los valores quedarán iguales.. quedará el mismo pixel.. el mismo color... y el HASH (ahora creado en base a xxyyzzxxyyzz...) será el mismo...
Pero volvamos a lo anterior: QUE PASA SI CAMBIA MUCHO un pixel de los que se le toma la muestra (como minimo, porque si cambian mas, dará PEOR) y su valor RGB queda fuera del redondeo y cambia el valor de la centana y/o decena del RGB? el HASH del MD5 volverá a ser demasiado DIFERENTE... y el buscador de imagenes de la base de datos no encontrará un HASH igual.. ya que éste fue muy cambiado...

Aca va una imagen de ejemplo:

En esa imagen, como veran, hice un pequeño punto rojo... mientras que todooooo lo demas en negro..
Cada pixel blanco no es en realdiad blanco, sino es un "INDICADOR" de que pixeles serán los que se les tomará la muestra... imagenen que solamente INDICAN.. o sea.. serán negros realmente...
No recuerdo que valor es en RGB el negro, pero supongamos que es 000 000 000
EN la 1º imagen (miren mas arriba), la imagen es toda negra.. y en donde estan los puntos blancos (que son negros realmente) hará el muestreo el 1º programa y tomará todooosss valores "000 000 000" elavorará un HASH y listo...
Pero con ésta 2º imagen.. como veran hay un pequeño circulo rojo, y ahí caerá un pixel que se le tomará la muestra... por lo tanto, uno de los 100 valores no será "000 000 000" como antes.. sino que será el color ROJO en RGB, y creo que es: "225 000 000"
Ahora en el 2º programa, cuando se le ingrese ésta 2º imagen, elavorará el HASH de ésta iamgen con ese punto rojo y será un HASH totalmeten diferente al de la 1º imagen.. siendo que las imagenes son muy parecidas... y YO QUIERO QUE LAS TOME COMO QUE SON IGUALES... o sea.. que cuando 5 o 6 pixeles tienen valores diferentes, cree un HASH igual al de la imagen original... se entiende???
Ésto serviría por ejemplo si alguien le pone una firma a la imagen.. el 2º programa ignoraría la firma, porque caería en 1 o 2 pixeles.. y elaboraría el HASH igual a la imagen esa sin la firma....

En fin...
El metodo de redondear lo implementaré si o si por varios factores:
1º: me ayudaría mucho cuando un pixel (o todos) cambia/n poco de color.. por ejemplo cuando se le modifica el brillo...
2º: me acelera la elavoracion del HASH (en caso que no use el MD5)
Hasta el metodo de redondeo puede ser por ejemplo, redondear a xxx yyy zzz a solo 6 numeros terminados en valores pares por ejemplo:

123 054 211 ---aplico redondeo normal--->>> 120 050 210 ---al truncar--->>> "12 05 21"
Siguiendo con el mismo ejemplo.. llega otra imagen en donde a los pixeles se los cambiaron un pocoooo los colores.. por el brillo.. y llega 1 de los tantos pixeles así:
122 053 210 ---aplico redondeo normal--->>> 120 050 210 ---al truncar--->>> "12 05 21"
Como veran.. el resultado es el mismo.. sinembargo los pixeles tenian valores parecidos... que en el color la diferencia casi no se nota.. pero dió el mismo valor y dará por ende, el mismo MD5
si llegaría el mismo pixel pero mas cambiado por ejemplo:
126 056 221 y aplico el redondo a que queden desenas PARES, quedaría --->>> 120 060 220 (ya que redondearía hacia el valor mas cercano PAR para la decena) Y ÉSTE MODO, SERÍA MUCHO MAS EFICIENTE QUE EL ANTERIOR... menos CALIBRADO.. ya que los valores realemtne cambiarían mas.. mucho mas.. porque los valores RGB tendrian que tener como 15 puntos de diferencia para que cambie el valor final del pixel... PERO, eso es lo que quiero.. ya que si le cambiamos mucho el brillo, tiene que seguir dando el mismo valor final...

TODO LINDO ASÍ...
Ahora volvamos a la ***** de si cambian totalmente unos pocos pixeles a los que se le tomaron muestra..
de la imagen original: 123 054 211 que quede: 225 255 255, el redondeo sería: 220 220 220
O sea.. NADA QUE VER.. el HASH MD5 cagaría TODO!!!..

Ahora miren porque el MD5 cagaría todo: (aunque ustedes son expertos en éstos y ya lo saben)
el valor 1122334455 en MD5 tiene el siguiente valor: 3TZ9v!͒@o���
el valor 1222334455 en MD5 tiene el siguiente valor: }�]�f��c���fo�u
el valor 1122334456 en MD5 tiene el siguiente valor: ��#�"8��B   �e
Cambió 1 solo numero.. y el valor fue NADA QUE VER...

Para que quiero que de un mismo HASH? para que el 2º buscador genere el mismo HASH y encuentre la imagen en la base de datos.. obviamente... supongo que entienden eso..


Necesito un metodo HASH que devuelva un mismo valor para
111112222233333444445555566666777778888899999000001111122222333334444455555
y para:
000002222233333444445555566666777778888899999000001111122222333334444466666 (cambiaron los 5 primeros numeros solamente)

Alguien tiene idea de como?? de que HASH??


OBVIAMENTE QUE SI NO ENTENDIERON NADA, ME DICEN Y YO EDITO Y MEJORO CON SUPER MAS DETALLES LA EXPLICACION DE LA PARTE QUE NO ENTENDIERON


« Última modificación: 13 Agosto 2009, 13:25 por Skeletron » En línea

Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Re: Necesito elaborar un hash medio complicado
« Respuesta #1 en: 13 Agosto 2009, 12:50 »

Veamos... no se de qué te sorprende que el Hash en MD5 cambie radicalmente de un texto a otro... se nota que nunca has trabajado con MD5 :xD Pero bueno, este no es el tema :P

Respecto al algoritmo que tu pides, la idea de redondear y truncar está muy bien... pero tu rechazas esa idea por el ajuste de brillo que se le pueda aplicar a los pixeles, no es así? Pues la solución está en utilizar al valor del brillo en el 2º programa para que pueda "restaurar" los pixeles a sus valores normales, es decir, sin brillo, y a partir de ahí buscar los pixeles :P


En línea

Crack the bytes, crack yourself
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Necesito elaborar un hash medio complicado
« Respuesta #2 en: 13 Agosto 2009, 13:15 »

Huy dios...
Has dicho 2 incoherencias GIGANTEZCAS!!!!

Gracias por intentar ayudar.. pero..
1º incoherencia:
YO AFIRMO LO DE MD5 y lo he usado muchas veces.. sino como crees que obtuve esos codigos md5??
2º incoherencia:
lo del brillo es totalmente nada que ver..

A ver..
Vamos a explicar lo del brillo:

EL redondeo, ACABA CON EL PROBLEMA DE SI A LA IMAGEN LE MODIFICAN EL BRILLO

El problema, es si agarro la imagen con PAINT y le modifico totalmente algunos pixeles y entre ellos, cae un pixel al que se le hace la muestra... al ser así, el valor RGB cambia mucho y por ende el MD5 cambiaría rotundamente, y no deberia ser así.. es por eso que quito la idea del MD5... Pero necesito una idea de como reemplazarlo...


Ahora miraré el texto que he escrito y mejoraré la explicacion del brillo.. que fue solo un ejemplo..

Me parece que tendrias que leer el texto mas detenidamente
En línea

APOKLIPTICO
Moderador
***
Desconectado Desconectado

Mensajes: 3.781


Toys in the attic.


Ver Perfil
Re: Necesito elaborar un hash medio complicado
« Respuesta #3 en: 28 Agosto 2009, 14:33 »

Por definicion, si cambia aunque sea un pixel en el dibujo, el hash va a dar completamente distinto, es una de las caracteristicas claves de un algoritmo de hash. Lo que podes hacer, es o bien hacer reconocer los cambios al programa que busca en la base de datos, o bien podes hacer un "redondeo" por matrices de pixeles. Podes tomar matrices de 4x4 x ejemplo y sacar de esa matriz 4x4 un promedio redondeado, si no cambia demasiado, entonces debería dar el mismo hash.
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La asociación de comerciantes de Chamberí convoca un concurso para elaborar la G
Desarrollo Web
Mamen2011 0 392 Último mensaje 14 Abril 2011, 10:17
por Mamen2011
bot para el irc medio hecho. Necesito ayuda
Chats; IRC y Messengers
kellogs 1 773 Último mensaje 31 Enero 2012, 18:55
por Last_
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines