BASE64加密、解密的实现

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);
 }
}

你可能感兴趣的:(sun)