淘先锋技术网

首页 1 2 3 4 5 6 7

md5码如何转换成链接?

首先将一个md5生成32位id的算法。

算法的核心就是通过java的MessageDigest工具类将给定的字符串转换为一个length=16的byte数组。 然后遍历改byte数组, 依次取出每个byte,取该byte的绝对值, 然后转换为16进制格式字符串,如果长度不够2位,就前面补0 , 然后将这些字符串相加, 最后得到32位的一个字符串 。

代码如下:

import java.nio.charset.Charset;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class MD5Builder {

public static String build(String origin ,String charsetName){

if(origin == null )

return null ;

StringBuilder sb = new StringBuilder() ;

MessageDigest digest = null ;

try {

digest = MessageDigest.getInstance("MD5");

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

return null ;

}

//生成一组length=16的byte数组

byte[] bs = digest.digest(origin.getBytes(Charset.forName(charsetName))) ;

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

int c = bs[i] & 0xFF ; //byte转int为了不丢失符号位, 所以&0xFF

if(c < 16){ //如果c小于16,就说明,可以只用1位16进制来表示, 那么在前面补一个0

接下来是根据一个url长链接生成一个短链接的算法。 这种算法在微博、二维码等应用中使用的比较多。

算法思路:

1、将给定的字符串(长链接) 先转换为32位的一个md5字符串。 比如该字符串用A表示

2、将上面的A字符串分为4段处理, 每段的长度为8 , 比如四段分别为 M、N、O、P

3、可以将M字符串当作一个16进制格式的数字来处理, 将其转换为一个Long类型。 比如转换为L

4、此时L的二进制有效长度为32位, 需要将前面两位去掉,留下30位 , 可以 & 0x3fffffff 得到想要的结果

5、此时L的二进制有效长度为30位, 分为6段处理, 每段的长度为5

6、依次取出L的每一段(5位),进行位操作 & 0x0000003D 得到一个 <= 61的数字,来当做index 。根据index 去预定义的字符表里面去取一个字符, 最后能取出6个字符,此时就能那这6个字符相加,成一个字符串。 作为短链接了。

7、根据2重复3、4、5、6 ,总共能得到6个第六步生成的字符串。

取其中任意一个字符串当作短链接都是可以的。

java 16位md5,md5码如何转换成链接