FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hola, ante todo agradezco sus respuestas y pido disculpas si mezclé conceptos en mi intento por explicar el problema que necesito resolver. No soy un experto en el tema.
Básicamente, el problema es que tengo una cadena de 28 caracteres que me identifica un proceso y debo convertirla (o comprimirla o codificarla) en otra cadena de menor longitud (8 o 10 caract. aprox.) que tiene que ser impresa en una etiqueta y posteriormente leída e ingresada manualmente por un usuario (sin posib. de utilizar cód. de barra). Imagínense un usuario con la etiqueta en la mano tratando de leer en un espacio reducido y tipeando 28 caracteres. Por esta razón, les consultaba algún algoritmo en Delphi que simule lo que realiza un "acortador de URL's" para que a partir una dirección genera una nueva mas pequeña. Investigando un poco antes de realizar esta consulta, encontré que existen funciones para realizar checksum como ADLER32 o CRC32 que acortan estas cadenas pero que (a mi entender) no son reversibles por lo tanto no puede utilizarse como clave única. Tomando el comentario de Neftali sobre el principio de funcionamiento de los "acortadores de URL's", como puedo generar un código que identifique una entrada única en esta tabla auxiliar con el código de la nueva URL? Existe algún algoritmo para generar este código? Pensando rápido se me ocurre, por ejemplo utilizando ADLER32, que a partir de una cadena generar el código y verificar que no existe ingresado en esta tabla auxiliar. Si existe, volver a aplicar el algoritmo sobre este código generado y volver a chequear que no exista. Este proceso se repetiría hasta tanto se sigan encontrando coincidencias y llevaríamos un contador de nivel para utilizar en la decodificación. Para decodificar, en teoría, deberíamos aplicar el proceso inverso tantas veces como niveles hayamos registrado. Lo estoy pensando a medida que escribo estas líneas. Voy a intentar implementarlo y les cuento. Nuevamente les agradezco por su tiempo y si tienen alguna otra idea o forma, bienvenida! Saludos. |
#2
|
||||
|
||||
Segun tu caso de uso, puedes reusar un acortador de URLS. Solo tienes que crear una tabla que diga HasId=FullId y eso es todo. Si generaste un HashId es porque tienes el FullId, asi que si pasar un valor y no lo encuentras, es porque obviamente nunca fue generado.
__________________
El malabarista. |
#3
|
|||
|
|||
mamcx, gracias por tu respuesta.
Conoces alguna implementación de un acortador de URL's para Delphi? Estuve buscando en Google pero no pude encontrar nada todavía. Gracias. Saludos |
#4
|
|||
|
|||
Estuve investigando un poco y en algunos sitios sugieren usar Base62.
Alguno conoce alguna implementación para Delphi que se pueda utilizar? |
#5
|
||||
|
||||
No sabría por donde irá una solución a tu caso, pero al leer en este hilo sobre hash y colisiones recordé algo que me comentó un especialista de seguridad en Twitter: "las colisiones uno las puede evitar... a menos que sea eso lo que busca" y adjuntaba a sus palabras el siguiente enlace.
El paper en cuestión expone justamente eso, demostrando algunas vulnerabilidades (entre otras que se dieron a conocer) de MD5. Así que... hay que pensarlo bien. Saludos, |
#6
|
||||
|
||||
Pero en el caso que se plantea, no hay que preocuparse mucho por las colisiones
__________________
El malabarista. |
#7
|
||||
|
||||
Cita:
Si es el caso, ¿porqué tu mismo has vuelto a meterlo en la bolsa en uno de tus últimos comentarios?: Cita:
Roman tiró la indirecta al comienzo y Neftali apuntó con la linterna. ¡Si no debe haber colisión, y debe ser reversible, entonces no se trata de un algoritmo de reducción hash! Una reversibilidad apunta más hacia un cifrado que otra cosa. El asunto acá es que no hay tal reversibilidad... pasa por tener una forma de referenciar una cadena de menor longitud por otra de mayor. Necesariamente debe intervernir una tabla que haga esa asociación. Generada alguna cadena corta esta se marca como usada. Listo. No más. ¿Que tiene que intervernir acá un "Hashid"? Saludos, |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
numeración alfanumérica y aleatoria | Aprendiendo | OOP | 5 | 06-09-2011 19:34:25 |
Funcion para borrar la cadena que aparesca repetida dentro de otra cadena | flystar | Varios | 1 | 02-07-2007 23:51:10 |
Funcion para buscar cadena dentro de otra cadena y el numero de veces | flystar | Varios | 3 | 02-07-2007 22:48:08 |
crear una llave alfanumerica con un generador | reina | SQL | 3 | 17-08-2005 19:49:44 |
Extraer números en una string alfanumérica | Tonio | Varios | 4 | 23-10-2003 10:22:04 |
|