twittear link imagen for enlaces enlace direcciones corto con como agregar acortador java url url-shortener

java - link - Algoritmo de acortamiento de URL



https t (2)

Bueno, ¿qué quieres decir con acortamiento de URL?

Hay técnicas muy diferentes. La mayoría de los sitios web, AFAIK, utilizan la técnica para simplemente colocar la clave principal de la base de datos (tal vez en algún código) en la URL en una posición en la que se puede analizar mediante una expresión regular y simplemente mejorar el resto con palabras clave.

Ejemplo de Amazon: http://www.amazon.de/Bauknecht-WA-PLUS-614-Waschmaschine/dp/B003V1JDU8/

Puede ingresar cualquier cosa en lugar del nombre del producto, solo la identificación al final es importante.

Sin embargo, es posible que desee mantener sus enlaces limpios y verificar si son correctos y hacer el reenvío 301 a la URL real o colocar una URL canónica si aparece una URL incorrecta.

Sin embargo:

Si quieres hacer algo como TinyURL , mi respuesta es un no definitivo.

No es suficientemente bueno.

Bueno, eso depende.

No es "seguro". Sería bastante fácil adivinar las URL. Un mejor enfoque sería utilizar alguna función criptográfica como SHA-1 / MD5.

Cuando se trata de colisiones realmente no puedo decir. GUID fue diseñado para no tener colisiones, pero solo estás usando los primeros 6 caracteres. No sé qué representan exactamente en el algoritmo. Pero definitivamente no es óptimo.

¿Por qué, sin embargo, no solo usas la base de datos de la clave primaria de incremento automático? Si la seguridad es importante, definitivamente también tiene que ir con más de 6 caracteres.

En un proyecto que hice usé algo como

/ database-primary-key / hash-of-primary-key-some-token-or-client-information /

De esta manera, podía buscar directamente la clave principal en la base de datos, que era la forma más rápida posible, pero también podía verificar que el enlace no había sido detectado por la fuerza bruta forzada por el hash. En mi caso, el hash era la suma SHA-1 del token secreto del cliente y la clave principal.

Ahora, esto no es estrictamente sobre el acortamiento de URL, pero mi propósito es tal de todos modos, así que vamos a verlo así. Por supuesto, los pasos para acortar URL son:

  1. Toma la URL completa
  2. Genere una cadena corta única para que sea la clave de la URL
  3. Almacene la URL y la clave en una base de datos (una tienda de valor-clave sería una coincidencia perfecta aquí)

Ahora, sobre el segundo punto. Esto es lo que he encontrado:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); UUID uuid = UUID.randomUUID(); dos.writeLong(uuid.getMostSignificantBits()); String encoded = new String(Base64.encodeBase64(baos.toByteArray()), "ISO-8859-1"); String shortUrlKey = StringUtils.left(encoded, 6); // returns the leftmost 6 characters // check if exists in database, repeat until it does not

¿Es esto suficientemente bueno?


Para una aplicación de carga de archivos que escribí, también necesitaba esta funcionalidad. Después de leer este artículo SO , decidí seguir con solo algunos números aleatorios y comprobar si existen en la base de datos.

Así que tu enfoque es similar a lo que hice.