Red de conocimiento informático - Material del sitio web - Cómo generar enlaces cortos usando java

Cómo generar enlaces cortos usando java

Debido a las necesidades de promoción de la empresa, necesitamos un programa de generación de enlaces cortos. Hace unos días vi a alguien publicando una versión .net del algoritmo de enlaces cortos en MSDN, así que lo convertí a Java. . Versión, sácala y disfrútala ***

Ideas de generación:

1. Combina "enlace original (enlace largo) + clave (cadena personalizada para evitar fugas de algoritmo)". Cifrado MD5

2. Opere los caracteres cifrados de acuerdo con la configuración hexadecimal de 8 bits con el bit 0x3FFFFFFF. El valor obtenido se combina con el bit 0x0000003D para obtener el índice de caracteres de la matriz de caracteres y la suma de. los caracteres. , cada ciclo se desplaza hacia la derecha 5 bits y coloca la cadena correspondiente al índice en la matriz de salida (4 grupos de cadenas de 6 dígitos)

3. dígitos y extráigalo de la matriz de entrada Saque la cadena correspondiente al número aleatorio, úsela como un enlace corto y guárdela en la base de datos o NoSql

Análisis

Escribir un programa de procesamiento web de ur (por ejemplo: al analizar el enlace corto, haga coincidir el enlace corto analizado (zAnuAn) con el enlace original en la base de datos, haga coincidir el enlace corto (zAnuAn) con el enlace original almacenado en la base de datos y luego redirigirlo al enlace original coincidente

paquete com.bjdata.test;

importar java.security.MessageDigest;

importar java.util.Random;

clase pública ShortUrlTest {

public static void main(String[] args) {

String sLongUrl = "/bbs/_t_278433840/" // Enlace sin formato;

System.println( "longUrl: "+sLongUrl);

String[] aResult = shortUrl(sLongUrl);// Generará 4 grupos de cadenas de 6 dígitos

//Imprime los resultados

for (int i = 0; i < aResult.println ("Enlace corto: "+aResult[j]);//toma uno aleatorio como resultado corto link

}

public static String[] shortUrl(String url) {

//Puedes personalizar la generación de caracteres de cifrado MD5 antes de pasar la CLAVE mixta

String key = "test";

//Para usar los caracteres de URL generados

String[] chars = new String[] { "a", "b", "c", "d", "e", "f", "g", "h",

"i", "j", "k", "l" , "m", "n", "o", "p", "q", "r", "s", "t",

"u", "v", "w ",x","y","z"," 0","1","2","3","4","5",

"6","7 ","8","9","A", "B", "C", "D", "E", "F", "G", "H",

" I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",

"U", "V", "W ", "X", "Y", "Z"

};

//Cifrar la URL de entrada con MD5

Cadena hexadecimal = md5ByHex(ke

y + url);

String[] resUrl = new String[4];

for (int i = 0; i < 4; i++) {

// Convierte los bits de caracteres cifrados a 0x3FFFFFFF hexadecimal de 8 dígitos

String sTempSubString = hex.substring(i * 8, i * 8 + 8);

// Aquí tienes Es necesario utilizar el tipo largo para la conversión, porque Inteper .parseInt() solo puede manejar 31 bits, el primer bit es el bit de signo, el segundo bit es el bit de signo y el primer bit es el bit de signo.

El primer bit es el bit de signo. Si no se usa long, estará fuera de los límites

long lHexLong = 0x3FFFFFFFF & Long.parseLong(sTempSubString, 16);

String outChars. = "";

for (int j = 0; j < 6; j++) {

// Realice la operación de suma de bits en 0x0000003D para obtener el índice de los caracteres de la matriz de caracteres

long index = 0x0000003D & lHexLong;

// Agrega los caracteres obtenidos

outChars += chars[(int) index];

// Cada segundo bucle, desplazamiento hacia la derecha 5 bits

lHexLong = lHexLong >> 5;

}

// Almacena la cadena en el matriz de salida en el índice correspondiente

resUrl[i] = outChars;

}

return resUrl;

}

/**

* Cifrado MD5 (mayúsculas de 32 bits)

* @param src

* @return

*

cadena estática pública md5ByHex(String src) {

prueba {

MessageDigest md = MessageDigest.getInstance("MD5");

byte[] b = src.getBytes();

md.reset();

md.update(b);

byte[] hash = md .digest();

md.update(b)digest();

Cadena hs = "";

Cadena stmp = "";

p>

for (int i = 0; i <. hash.length; i++) {

stmp = Integer.toHexString(hash[i] & 0xFF );

if (stmp.length() == 1)

hs = hs + "0" + stmp;

else {

hs = hs + stmp;

}

}

return hs.toUpperCase();

} catch (Excepción e) {

regresar "";

}

}

}

}

}

}

}

}

}

}

Resultados de ejecución

Enlace largo:/bbs/_t_278433840/

[0]:fa6bUr

[1]:ryEfeq

[ 2]:zAnuAn

[3]:auIJne

Enlace corto:zAnuAn