java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串
java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串
package com.zdz.test; import java.math.BigInteger;
import java.security.MessageDigest; import javax.security.sasl.SaslException; /**
* 短链接生成器
*
* @author zdz8207
* @version v1.0,2017-01-11
* @since v1.0
*/
public class ShortUrlGenerator { /**
* 生成短链接
* @param url 长链接
* @return 四个短地址数组,取任意一个即可
*/
public static String[] getShortUrl(String url) { // 可以自定义生成 MD5 加密字符传前的混合 KEY
String key = "zdz8207"; // 要使用生成 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 sMD5EncryptResult = getMD5(key + url); String hex = sMD5EncryptResult;
String[] resUrl = new String[4]; //生成4个短地址,8位一组
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 = ""; //生成6次-6位短地址
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; } /**
* 根据短链接获得key值
* @param shortUrl 短链接
* @return key值 String
*/
public static String getShortKey(String shortUrl) {
String key = shortUrl.substring(shortUrl.lastIndexOf("/") + 1,shortUrl.length());
return key;
} /**
* 对字符串md5加密
* @param str
* @return
* @throws SaslException
*/
public static String getMD5(String str){
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
System.out.println("MD5加密出现错误");
return "";
}
} //测试函数
public static void main(String[] args) {
// 长连接:http://www.cnblogs.com/zdz8207/
// 解析后的四个短地址数组,取任意一个即可 String sLongUrl = "http://www.cnblogs.com/zdz8207/";
String[] aResult = getShortUrl(sLongUrl); // 打印出结果,四个短地址数组,取任意一个即可
for (int i = 0; i < aResult.length; i++) {
System.out.println(aResult[i]);
}
// FjIjqm
// bEjyay
// jaUJFf
// ZNBrEz //根据短链接获得key值
String key = getShortKey("http://www.cnblogs.com/FjIjqm");
System.out.println("key="+key);//key=FjIjqm }
}
------------------------------
本人微信公众帐号: 心禅道(xinchandao)



本人微信公众帐号:双色球预测合买(ssqyuce)
java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串的更多相关文章
- 腾讯短链接url生成接口/腾讯短网址在线生成/新浪微博短链接生成器的分享
在通常情况下,URL是由系统生成的,通常包括URI路径,多个查询参数,可以对参数进行加密和解密. 当人们要分享某个URL,比如短信,邮件,社交媒体,这就需要短URL.而短网址,顾名思义就是在长度上比较 ...
- Python 中的POST/GET包构建以及随机字符串的生成-乾颐堂
现在,我们来用Python,创建GET包和POST包. 至于有什么用处,大家慢慢体会. Python 中包含了大量的库,作为一门新兴的语言,Python 对HTTP有足够强大的支持. 现在,我们引入新 ...
- URL长链接转换为短链接
URL长链接转换为段链接的工具非常多,可是.小编还是要给大家唠一种方法的: 操作过程例如以下,打开腾讯微博或者其它微,将自己的URL地址值按图片操作:
- Java根据链接生成二维码
Java根据链接生成二维码 相关 jar 包: core-3.1.0.jar 源码及 jar 包下载:http://files.cnblogs.com/files/liaolongjun/qrcode ...
- UrlUtils工具类,Java URL工具类,Java URL链接工具类
UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...
- 短网址(t.cn、url.cn)生成,网址缩短接口API
简要说明 短网址api接口有很多格式,不同的接口生成的短网址格式也不同,比如常见的t.cn.url.cn.w.url.cn等格式.总而言之短网址接口就是用来将一个冗长的链接缩短成10个字符以内的短链接 ...
- PHP实现URL长连接转短连接方法总结
短链接,通俗来说,就是将长的URL 网址,通过程序计算等方式,转换为简短的网址字符串. 这样的话其好处为:1.内容需要:2.用户友好:3.便于管理. 实现短网址(short URL)系统比较流行的算法 ...
- 链接生成二维码-PHP
原文:http://www.upwqy.com/details/20.html 链接生成二维码 首先下载phpqrcode phpqrcode.zip 我这里使用的是TP5,把下载好的类库 放入到ex ...
- 将Qt5.5 动态链接生成的exe及依赖dll打包方法
Qt静态编译链接生成的exe文件,不需依赖七大姑八大姨的一堆dll,可以独立运行,发布很方便.但绝大多数用的都是Qt开源版本,如果用静态链接,会有些限制.那有没有办法即能享受静态编译的方便,又不受开源 ...
随机推荐
- Django---路由如何配置
具体配置在项目配置文件夹下的 urls.py: from index import views urlpatterns = [ path('admin/', admin.site.urls), pat ...
- 【技术开放日】msup携手HPE揭秘全球测试中心背后的12条技术实践
保证软件产品质量是软件测试永恒的目标. 以控制为出发点的传统IT时代正在快速的向以激活生产力为目的的移动互联时代转变.这不仅是技术的升级,更是思想意识的巨大变革,也对软件技术的发展带来的更高的要求和更 ...
- HDFS Snapshots
Overview HDFS Snapshots are read-only point-in-time copies of the file system. Snapshots can be take ...
- iOS-多语言版本开发(二)(转载)
题记 iOS 多语言版本的开发(一) 中我们完成了让应用跟随系统语言进行切换,而用户自己却不能切换的功能,也基本上算是实现了多语言版本:可是,对于某些应用来说,实现跟随系统语言切换的同时, 也想要 ...
- Python 字典 setdefault() 方法
描述 Python 字典 setdefault() 方法和 get() 方法类似,返回指定键的值,如果键不在字典中,将会添加键并将值设置为一个指定值,默认为None. get() 和 setdefau ...
- Pots--poj(bfs,输出路径)
http://poj.org/problem?id=3414 题意: 给你两个容量为a,b的杯子:有3个操作: 1:FILL(i):把第i个杯子从水库中装满: 2:DROP(i):把第i个杯子清空: ...
- Python开发【笔记】:获取mp3文件获取信息
import eyed3 def main(): mp3 = '8200031001_13429822982_1_00163e086216990b11e82403f00d3d9a.mp3' xx = ...
- cookie的封装写法
设置cookie 三个参数分别代表:键,值,过期时间,这个封装方法可以完成cookie的储存 以及cookie的删除(过期时间设为赋值) function setCookie(cname,cval ...
- 洛谷P2801 教主的魔法 分块
正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...
- (四)Web应用开发---系统架构图
系统宏观架构:EASYUI+MVC 系统架构图一. 系统架构图二.