package *.*.*.util;
import java.security.MessageDigest;
import java.util.Random;
import org.apache.log4j.Logger;
public class ShortUrlUtil {
private static Logger logger = Logger.getLogger(ShortUrlUtil.class);
public static String getShortURL(String url){
String[] aResult = convertUrl(url);//将产生4组6位字符串
Random random=new Random();
//随机取一个作为短链
int j=random.nextInt(4);//产成4以内随机数
logger.info("短链接:"+aResult[j]+";长链接:"+url);
return aResult[j];
}
private static String[] convertUrl(String url) {
// 可以自定义生成 MD5 加密字符传前的混合 KEY
String key = "qiuyouzone";
// 要使用生成 URL 的字符
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"
};
// 对传入网址进行 MD5 加密
String hex = md5ByHex(key + url);
String[] resUrl = new String[4];
for (int i = 0; i < 4; i++) {
// 把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算
String sTempSubString = hex.substring(i * 8, i * 8 + 8);
// 这里需要使用 long 型来转换,因为 Inteper .parseInt() 只能处理 31 位 , 首位为符号位 ,
// 如果不用long ,则会越界
long lHexLong = 0x3FFFFFFF & Long.parseLong(sTempSubString, 16);
String outChars = "";
for (int j = 0; j < 6; j++) {
// 把得到的值与 0x0000003D 进行位与运算,取得字符数组 chars 索引
long index = 0x0000003D & lHexLong;
// 把取得的字符相加
outChars += chars[(int) index];
// 每次循环按位右移 5 位
lHexLong = lHexLong >> 5;
}
// 把字符串存入对应索引的输出数组
resUrl[i] = outChars;
}
return resUrl;
}
/**
* MD5加密(32位大写)
*
* @param src
* @return
*/
private static String md5ByHex(String src) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] b = src.getBytes();
md.reset();
md.update(b);
byte[] hash = md.digest();
String hs = "";
String stmp = "";
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 (Exception e) {
return "";
}
}
}
分享到:
相关推荐
- **文本消息**:短信或邮件中插入短链接,方便接收者快速访问目标页面。 #### 四、注意事项 - **安全性考虑**:虽然短链接便于分享,但也存在一定的安全风险。建议使用可信的服务提供商,并对生成的短链接进行审核...
文章深入探讨了URL重定向机制以及解决哈希碰撞的问题策略,确保生成短链接的安全性和可靠性。针对可能存在的关键字过滤问题提出了具体解决方案。 适用人群:软件开发者、互联网产品经理和服务架构师 使用场景及目标...
如微博限定字数140、短信按照发文长短收费等2、我们经常需要将链接转成二维码的形式分享给他人,如果是长链的话二维码密集难识别,短链就不存在这个问题了。3、 链接太长在有些平台上无法自动识别为超链接; 如钉钉...
在互联网中,长链接有时可能会显得冗长且不便分享,尤其是在社交媒体、短信或电子邮件等有限字符数的场景下。为了解决这个问题,链接缩短器服务应运而生。"link-shortener"项目就是一个典型的实现,它使用Python和...
在互联网中,长链接有时可能会带来不便,尤其是在社交媒体、短信或电子邮件中,短链接则更为实用。"url-shortener"项目正是为了解决这个问题,它提供了一个服务,可以将长网址转换为简短的、易分享的短网址。这个...
【fso:快速链接缩短器】是一个基于C语言编写的程序,主要功能是将长链接转化为短链接,方便在各种社交媒体、短信或者电子邮件中分享。这个工具可能使用了URL编码和哈希算法来实现链接的缩短。在互联网上,长链接有时...
在互联网上,长链接有时会带来不便,尤其是在社交媒体、电子邮件或者短信中分享链接时。短链接不仅更易于分享,还能节省空间,提高美观度。Shorty-crx插件选择tinyurl.com作为其URL缩短服务提供商。Tinyurl是一家...
这款插件的出现,旨在解决网络上长链接不便分享、记忆和管理的问题,尤其对于社交媒体、电子邮件或者短信等场景,短链接显得更为实用。 在描述中提到,该插件使用Lnkfy.com的服务来实现URL缩短功能。Lnkfy.com是一...
在实际使用中,用户可以通过输入或粘贴长链接到应用程序,然后点击“缩短”按钮,后台JavaScript代码会处理这个请求,生成短链接,并将其显示给用户。用户还可以自定义短链接的别名,以创建更具个性化和记忆性的短...
在互联网上,长链接有时会显得冗长且不友好,而短链接则更方便在有限的字符限制下进行分享,如社交媒体平台或短信中。通过这个项目,我们可以了解到JavaScript在Web开发中的应用以及短链接服务的工作原理。 【核心...
在互联网上,长网址往往在分享时显得冗长且不便记忆,尤其在社交媒体、邮件或者短信中,短网址的使用可以提高链接的可读性和易传播性。百度短网址服务利用百度公司的技术,将复杂的长网址转化为简洁的短链,同时保持...
同意,即使你只是发表这样的URL在你的评论,通过邮件或短信发送,这将是有问题的,它看起来不是很...因此,你所有的问题,一个长的URL地址将解决我们独特的服务,可以减少或甚至隐藏你的任何链接,它会变得更可读和...