Posted on 2009-05-12 18:15
Gavin.lee 阅读(1419)
评论(0) 编辑 收藏 所属分类:
java SE & EE
“主要就是BASE64Encoder、BASE64Decoder两个类,我们只需要知道使用对应的方法即可。另,BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。”
package com.Gavin.tools.util.jiami;
import java.io.IOException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* @descripte 该类包含了简单的BASE64加/解密方法;
* 【约定密码:当前时间的秒数:用户名】的加/解密
* 也对通信双方串进行连接检查
* @author Gavin.lee
* @date 09-5-12 pm
*
*
*/
public class LinkEncrypt {
/**
* 双方协定的连接密码
*/
private static final String SECRET = "yuedingPWD";
/**
* 将加密参数进行解密,并返回
* @param loginName 加密的参数
*
*/
public String[] unPar(String loginName){
if (loginName == null || loginName.trim().equals(""))
return null;
try {
String str = unEncrypt(loginName);
if (str == null || str.trim().equals("")) {
return null;
}
return str.split(":");
} catch (Exception e) {
System.out.println("LinkEncrypt unPar method IOExcepiton");
}
return null;
}
/**
*
* 生成加密后的传递参数字符串
* @param secret
* 双方协定的连接密码
* @param userName
* 用户名
* @return 返回 [双方协定的连接密码]+[:]+[系统时间]+[:]+[用户名]
*/
public String createPar(String secret, String userName){
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);
String loginName = encrypt(sb.toString());
return loginName;
}
/**
* 对字符串进行BASE64加密
*/
private String encrypt(String str) {
if (str == null || str.equals("")) {
return "";
}
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(str.getBytes());
}
/**
* 对BASE64加密后的字符串进行解密
*/
private String unEncrypt(String str){
if (str == null || str.equals("")) {
return "";
}
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(str);
return new String(b);
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
public static void main(String[] args) {
LinkEncrypt le = new LinkEncrypt();
String str = "waitJIAMI";
System.out.println(le.encrypt(str)); //简单的串加密
System.out.println(le.unEncrypt(le.encrypt(str))); //简单的解密
System.out.println(le.createPar(SECRET, "Gavin.lee")); //连接检查串加密
System.out.println(le.unPar(le.createPar(SECRET, "Gavin.lee"))[0]); //连接检查串解密
}
}