package cn.cesar;
import java.io.IOException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* <dl>
* <dt>cn.cesar</dt>
* <dd>Description:对链接的参数进行加密、解密的实现
* 如:http://192.168.1.5:8081/oa/forward.do?loginname=QktOV0AxMjE4OjExNzQ0NjUyNTI6Y2hlbmxpYW5jb25n&action=oahome
* 这里 "QktOV0AxMjE4OjExNzQ0NjUyNTI6Y2hlbmxpYW5jb25n" = BASE64('SECRET'+':'+'TIME'+':'+'USERNAME'
* "SECRET" 这是双方商定的链接密码 密码:BKNW@1218
* "TIME" 这是时间戳,就是自从 1970.1.1 00:00:00 到现在的秒数
* "USERNAME" 这是用户名 </dd>
* <dd>Copyright: Copyright (c) 2006</dd>
* <dd>Company: XXXXXXXX技术有限公司</dd>
* </dl>
*
* @author 陈联聪 Cesar
* @version 1.0
*/
public class LinkEncrypt {
/**
* 双方协定的连接密码
*/
private final String SECRET = "BKNW@1218";
/**
* @param args
*/
public static void main(String[] args) {
LinkEncrypt le = new LinkEncrypt();
String ln = null;
// 生成加密参数
try {
ln = le.createPar(le.SECRET, "chenliancong");
} catch (Exception e) {
e.printStackTrace();
}
// 解密参数
try {
String[] uln = le.unPar(ln);
System.out.println(uln[0]);
System.out.println(uln[1]);
System.out.println(uln[2]);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* <dl>
* <dt>unPar</dt>
* <dd>TODO 2007-3-21 下午04:08:52</dd>
* <dd>Description:将加密参数进行解密,并返回</dd>
* </dl>
*
* @author 陈联聪 Cesar
* @version 1.0
* @param loginName
* 加密的参数
* @return 解密后的参数
* @throws IOException
*/
public String[] unPar(String loginName) throws IOException {
if (loginName == null || loginName.trim().equals(""))
return null;
String str = unEncrypt(loginName);
System.out.println("解密后的字符串: " + str);
if (str == null || str.trim().equals(""))
return null;
return str.split(":");
}
/**
* <dl>
* <dt>createPar</dt>
* <dd>TODO 2007-3-21 下午03:43:10</dd>
* <dd>Description:生成加密后的传递参数字符串</dd>
* </dl>
*
* @author 陈联聪 Cesar
* @version 1.0
* @param secret
* 双方协定的连接密码
* @param userName
* 用户名
* @return 返回 [双方协定的连接密码]+[:]+[系统时间]+[:]+[用户名]
* @throws Exception
*/
public String createPar(String secret, String userName) throws Exception {
if (secret == null || secret.trim().equals(""))
return "";
if (userName == null || userName.trim().equals(""))
return "";
String time = String.valueOf(System.currentTimeMillis() / 1000);
// time 是时间戳,就是自从 1970.1.1 00:00:00 到现在的秒数
StringBuffer sb = new StringBuffer();
sb.append(secret).append(":");
sb.append(time).append(":");
sb.append(userName);
System.out.println("生成的字符串: " + sb.toString());
String loginName = encrypt(sb.toString());
System.out.println("加密后的字符串: " + loginName);
return loginName;
}
/**
* <dl>
* <dt>encrypt</dt>
* <dd>TODO 2007-3-21 下午03:40:19</dd>
* <dd>Description:对字符串进行BASE64加密</dd>
* </dl>
*
* @author 陈联聪 Cesar
* @version 1.0
* @param str
* 需加密的字符串
* @return 返回加密后的字符串
* @throws Exception
*/
private String encrypt(String str) throws Exception {
if (str == null || str.equals("")) {
return "";
}
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(str.getBytes());
}
/**
* <dl>
* <dt>unEncrypt</dt>
* <dd>TODO 2007-3-21 下午03:41:36</dd>
* <dd>Description:对BASE64加密后的字符串进行解密</dd>
* </dl>
*
* @author 陈联聪 Cesar
* @version 1.0
* @param str
* 需解密的字符串
* @return 返回解密后的字符串
* @throws IOException
*/
private String unEncrypt(String str) throws IOException {
if (str == null || str.equals("")) {
return "";
}
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(str);
return new String(b);
}
}