Posted on 2009-05-12 18:15
Gavin.lee 閱讀(1422)
評論(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]); //連接檢查串解密
}
}