Package com.liusoft.dlog4j.util

Source Code of com.liusoft.dlog4j.util.Base64Code

/*
*  StringUtils.java
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Library General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*  Author: Winter Lau (javayou@gmail.com)
*  http://dlog4j.sourceforge.net
*/
package com.liusoft.dlog4j.util;

import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;

/**
* �ַ������߼���
* @author Winter Lau
*/
public class StringUtils extends org.apache.commons.lang.StringUtils {

  /**
   * ���ϵͳ�д��ھɰ汾�����ݣ����ֵ�����޸ģ������ڽ������������ʱ�����
   */
    private static final String PASSWORD_CRYPT_KEY = "__jDlog_";
  private final static String DES = "DES";
    private final static String ISO8859_1 = "8859_1";
 
  private final static NodeFilter nodeFilter = new NodeFilter() {
    public boolean accept(Node node) {
      return true;
    }
  };

  /**
   * retrive the extend name of the given filename
   * @param fn
   * @return
   */
  public static String getFileExtend(String fn){
    if(isEmpty(fn))
      return null;
    int idx = fn.lastIndexOf('.')+1;
    if(idx==0 || idx >= fn.length())
      return null;
    return fn.substring(idx);
  }
 
  /**
   * ���ַ�����ch�ָ�������
   * @param tags
   * @param ch
   * @return
   */
  public static List stringToList(String tags, String ch){
    if(tags==null)
      return null;
    ArrayList tagList = new ArrayList();
    StringTokenizer st = new StringTokenizer(tags, ch);
    while(st.hasMoreElements()){
      tagList.add(st.nextToken());
    }
    return tagList;
  }

  /**
   * ���ַ����ÿո�ָ�������
   * @param tags
   * @return
   */
  public static List stringToList(String tags){
    if(tags==null)
      return null;
    ArrayList tagList = new ArrayList();
    StringTokenizer st = new StringTokenizer(tags);
    while(st.hasMoreElements()){
      tagList.add(st.nextToken());
    }
    return tagList;
  }

  /**
   * BASE64����
   * @param s
   * @return String
   */
  public static byte[] enBASE64(byte[] bytes){
    return Base64Code.encode(bytes);
  }
  /**
   * BASE64������
   * @param bytes
   * @return byte[]
   */
  public static byte[] deBASE64(byte[] bytes){
    return Base64Code.decode(bytes);
  }
  /**
   * BASE64����
   * @param s
   * @return String
   */
  public static String enBASE64(String s) {
    if (s != null) {
      byte abyte0[] = s.getBytes();
      abyte0 = Base64Code.encode(abyte0);
      s = new String(abyte0);
      return s;
    }
    return null;
  }
  /**
   * BASE64������
   * @param s
   * @return String
   */
  public static String deBASE64(String s) {
    if (s != null) {
      byte abyte0[] = s.getBytes();
      abyte0 = Base64Code.decode(abyte0);
      s = new String(abyte0);
      abyte0 = null;
      return s;
    }
    return null;
  }
  /**
   * HTML������ݸ�ʽת��
   * @param content
   * @return
   */
  public static String formatContent(String content) {
        if(content==null)
            return "";       
    String randomStr = String.valueOf(System.currentTimeMillis());
    String html = StringUtils.replace(content," ",randomStr);   
    html = StringUtils.replace(html, "&", "&");
    html = StringUtils.replace(html, "'", "'");
    html = StringUtils.replace(html, "\"", """);
    html = StringUtils.replace(html, "\t", "  ");// �滻����
    html = StringUtils.replace(html, " ", " ");// �滻�ո�
    html = StringUtils.replace(html, "<", "&lt;");
    html = StringUtils.replace(html, ">", "&gt;");
    return StringUtils.replace(html,randomStr,"&nbsp;").trim();
  }

    /**
    * ��ȡ���ı���Ϣ
    * @param inputHtml
    * @return
    */
  public static String extractText(String inputHtml) throws Exception {
    StringBuffer text = new StringBuffer();
    Parser parser = new Parser();
    parser.setInputHTML(new String(inputHtml.getBytes(),ISO8859_1));
    //Parser parser = Parser.createParser(new String(inputHtml.getBytes(),ISO8859_1));
    //�������еĽڵ�
    NodeList nodes = parser.extractAllNodesThatMatch(nodeFilter);
    for(int i=0;i<nodes.size();i++){
      Node node = nodes.elementAt(i);
      text.append(new String(node.toPlainTextString().getBytes(ISO8859_1)));
    }
    return text.toString();
  }

  /**
   * �ж��Dz���һ���Ϸ��ĵ����ʼ���ַ
   * @param email
   * @return
   */
  public static boolean isEmail(String email){
    if(email==null)
      return false;
    email = email.trim();
    if(email.indexOf(' ')!=-1)
      return false;
   
    int idx = email.indexOf('@');
    if(idx==-1 || idx==0 || (idx+1)==email.length())
      return false;
    if(email.indexOf('@', idx+1)!=-1)
      return false;
        if(email.indexOf('.')==-1)
            return false;
    return true;
    /*
    Pattern emailer;
    if(emailer==null){
      String check = "^([a-z0-9A-Z]+[-|\\._]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
      emailer = Pattern.compile(check);
    }
      Matcher matcher = emailer.matcher(email);
      return matcher.matches();
    */
  }
 
  /**
   * �ж��ַ����Ƿ���һ��IP��ַ
   * @param addr
   * @return
   */
  public static boolean isIPAddr(String addr){
    if(isEmpty(addr))
      return false;
    String[] ips = split(addr, '.');
    if(ips.length != 4)
      return false;
    try{
      int ipa = Integer.parseInt(ips[0]);
      int ipb = Integer.parseInt(ips[1]);
      int ipc = Integer.parseInt(ips[2]);
      int ipd = Integer.parseInt(ips[3]);
      return ipa >= 0 && ipa <= 255 && ipb >= 0 && ipb <=255 && ipc >= 0
          && ipc <= 255 && ipd >= 0 && ipd <=255;
    }catch(Exception e){}
    return false;
  }
  /**
   * ����
   * @param src ����Դ
   * @param key ��Կ�����ȱ�����8�ı���
   * @return    ���ؼ��ܺ������
   * @throws Exception
   */
  public static byte[] encrypt(byte[] src, byte[] key)
    throws Exception {
    //    DES�㷨Ҫ����һ�������ε������Դ
    SecureRandom sr = new SecureRandom();
    // ��ԭʼ�ܳ����ݴ���DESKeySpec����
    DESKeySpec dks = new DESKeySpec(key);
    // ����һ���ܳ׹�����Ȼ��������DESKeySpecת����
    // һ��SecretKey����
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
    SecretKey securekey = keyFactory.generateSecret(dks);
    // Cipher����ʵ����ɼ��ܲ���
    Cipher cipher = Cipher.getInstance(DES);
    // ���ܳ׳�ʼ��Cipher����
    cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
    // ���ڣ���ȡ���ݲ�����
    // ��ʽִ�м��ܲ���
    return cipher.doFinal(src);
  }
 
  /**
   * ����
   * @param src  ����Դ
   * @param key  ��Կ�����ȱ�����8�ı���
   * @return    ���ؽ��ܺ��ԭʼ����
   * @throws Exception
   */
  public static byte[] decrypt(byte[] src, byte[] key)
    throws Exception {
    //    DES�㷨Ҫ����һ�������ε������Դ
    SecureRandom sr = new SecureRandom();
    // ��ԭʼ�ܳ����ݴ���һ��DESKeySpec����
    DESKeySpec dks = new DESKeySpec(key);
    // ����һ���ܳ׹�����Ȼ��������DESKeySpec����ת����
    // һ��SecretKey����
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
    SecretKey securekey = keyFactory.generateSecret(dks);
    // Cipher����ʵ����ɽ��ܲ���
    Cipher cipher = Cipher.getInstance(DES);
    // ���ܳ׳�ʼ��Cipher����
    cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
    // ���ڣ���ȡ���ݲ�����
    // ��ʽִ�н��ܲ���
    return cipher.doFinal(src);
  }
    /**
     * ���ݽ���
     * @param data
     * @param key ��Կ
     * @return
     * @throws Exception
     */
    public final static String decrypt(String data, String key){
      if(data!=null)
        try {
            return new String(decrypt(hex2byte(data.getBytes()),key.getBytes()));
        }catch(Exception e) {
          e.printStackTrace();
        }
        return null;
    }
    /**
     * ���ݼ���
     * @param data
     * @param key ��Կ
     * @return
     * @throws Exception
     */
    public final static String encrypt(String data, String key){
      if(data!=null)
        try {
            return byte2hex(encrypt(data.getBytes(),key.getBytes()));
        }catch(Exception e) {
          e.printStackTrace();
        }
        return null;
    }
    /**
     * �������
     * @param data
     * @return
     * @throws Exception
     */
    public final static String decryptPassword(String data){
      if(data!=null)
        try {
            return new String(decrypt(hex2byte(data.getBytes()),PASSWORD_CRYPT_KEY.getBytes()));
        }catch(Exception e) {
          e.printStackTrace();
        }
        return null;
    }
    /**
     * �������
     * @param password
     * @return
     * @throws Exception
     */
    public final static String encryptPassword(String password){
      if(password!=null)
        try {
            return byte2hex(encrypt(password.getBytes(),PASSWORD_CRYPT_KEY.getBytes()));
        }catch(Exception e) {
          e.printStackTrace();
        }
        return null;
    }
  /**
   * ������ת�ַ���
   * @param b
   * @return
   */
    public static String byte2hex(byte[] b) {
    String hs = "";
    String stmp = "";
    for (int n = 0; b!=null && n < b.length; n++) {
      stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
      if (stmp.length() == 1)
        hs = hs + "0" + stmp;
      else
        hs = hs + stmp;
    }
    return hs.toUpperCase();
  }
   
    public static byte[] hex2byte(byte[] b) {
        if((b.length%2)!=0)
            throw new IllegalArgumentException("���Ȳ���ż��");
    byte[] b2 = new byte[b.length/2];
    for (int n = 0; n < b.length; n+=2) {
        String item = new String(b,n,2);
        b2[n/2] = (byte)Integer.parseInt(item,16);
    }
        return b2;
    }
   
    /**
     * ��Сд�޹ص��ַ����滻����
     * @param str
     * @param src
     * @param obj
     * @return
     */
    public static String replaceIgnoreCase(String str, String src, String obj){
      String l_str = str.toLowerCase();
      String l_src = src.toLowerCase();
      int fromIdx = 0;
      StringBuffer result = new StringBuffer();
      do{
        int idx = l_str.indexOf(l_src, fromIdx);
        if(idx==-1)
          break;
        result.append(str.substring(fromIdx, idx));
        result.append(obj);
        fromIdx = idx + src.length();
      }while(true);
      result.append(str.substring(fromIdx));
      return result.toString();
    }

  /**
   * ���ݺ����ַ���ñʻ���,ƴ���ͷǷ��ַ�Ĭ��Ϊ0
   * @param charcator
   * @return int
   */
  public static int getStrokeCount(char charcator) {
    byte[] bytes = (String.valueOf(charcator)).getBytes();
    if (bytes == null || bytes.length > 2 || bytes.length <= 0) {
      // ��������,�ǺϷ��ַ�
      return 0;
    }
    if (bytes.length == 1) {
      // Ӣ���ַ�
      return 0;
    }
    if (bytes.length == 2) {
      // �����ַ�
      int highByte = 256 + bytes[0];
      int lowByte = 256 + bytes[1];
      return getStrokeCount(highByte, lowByte);
    }

    // δ֪����
    return 0;
  }

   /**
    * @param highByte ��λ�ֽ�
    * @param lowByte ��λ�ֽ�
    * @return int
    */
  private static int getStrokeCount(int highByte, int lowByte) {
    if (highByte < 0xB0 || highByte > 0xF7 || lowByte < 0xA1
        || lowByte > 0xFE) {
      // ��GB2312�Ϸ��ַ�
      return -1;
    }
    int offset = (highByte - 0xB0) * (0xFE - 0xA0) + (lowByte - 0xA1);
    return Constants.gb2312StrokeCount[offset];
  }

  /**
   * �÷�������һ���ַ�����ƴ��������Ҫ��������
   * ���ʱӦ��һ����һ��������ȡ��ƴ�������޷�
   * ��֪ÿ���ֶ�Ӧ��ƴ����
   * @param word
   * @return String
   */
  public static String getPinyin(String word) {
    String pinyin = "";
    for (int i = 0; i < word.length(); i++)
      pinyin += getPinyin2(getCode(word.charAt(i)));
    return pinyin;
  }
  /**
   * �÷�������һ���ַ���DBCS����ֵ
   * @param cc
   * @return int
   */
  protected static int getCode(char cc) {
    byte[] bs = String.valueOf(cc).getBytes();
    int code = (bs[0] << 8) | (bs[1] & 0x00FF);
    if(bs.length < 2)
      code = (int)cc;
    bs = null;
    return code;
  }
  /**
   * �÷���ͨ��DBCS�ı���ֵ����ϣ���в�ѯ�õ���Ӧ��ƴ����
   * @param hz
   * @return String
   */
  protected static String getPinyin2(int hz) {
    String py = "";
    if (hz > 0 && hz < 160)
      py += hz;
    //else if (hz < -20319 || hz > -10247);
    else if (hz <= -10247 && hz >= -20319){
      PinyinCode pc = null;
      int i = Constants.pinyin.size() - 1;
      for (; i >= 0; i--) {
        pc = (PinyinCode) Constants.pinyin.get(i);
        if (pc.code <= hz)
          break;
      }
      if (i >= 0)
        py = pc.pinyin;
    }
    return py;
  }
 
    /**
     * �û������������ֻ�����ĸ�Ľ��
     * @param username
     * @return
     */
    public static boolean isLegalUsername(String username) {
        for(int i=0;i<username.length();i++){
            char ch = username.charAt(i);
            if(!isAscii(ch)&&
                ch != '.' &&
                ch != '_' &&
                ch != '-' &&
                ch != '+' &&
                ch != '(' &&
                ch != ')' &&
                ch != '*' &&
                ch != '^' &&
                ch != '@' &&
                ch != '%' &&
                ch != '$' &&
                ch != '#' &&
                ch != '~' &&
                ch != '-')
                return false;
        }
        return true;
    }
   
    /**
     * �ж��Ƿ�����ĸ�����ֵĽ��
     * @param name
     * @return
     */
    public static boolean isAsciiOrDigit(String name){
        for(int i=0;i<name.length();i++){
            char ch = name.charAt(i);
            if(!isAscii(ch))
              return false;
        }
        return true;
    }
   
    public static boolean isAscii(char ch){
      return (ch >='a' && ch <='z') || (ch >='A' && ch <='Z') || (ch >='0' && ch <='9');
    }
   
    /**
     * ����������ƴ������ĸ
     * @param username
     * @return
     */
    public static String getTxlUserPinyin(String username) {
        if(username.getBytes().length == (2 * username.length())){
            //������
            StringBuffer pinyin = new StringBuffer();
            for(int i=0;i<username.length();i++){
                String py = StringUtils.getPinyin(String.valueOf(username.charAt(i)));
                if(py!=null &&  py.length()>0)
                    pinyin.append(py.charAt(0));
                else
                    pinyin.append('V');
            }
            return pinyin.toString().toUpperCase();
        }
        else
        if(username.getBytes().length == username.length()){
            int len = (username.length()>3)?3:username.length();
            return username.substring(0,len).toUpperCase();
        }
        else{
            StringBuffer pinyin = new StringBuffer();
            for(int i=0;i<username.length();i++){
                char ch = username.charAt(i);
                try{
                    String py = StringUtils.getPinyin(String.valueOf(ch));
                    if(py!=null &&  py.length()>0)
                        pinyin.append(py.charAt(0));
                    else
                        pinyin.append(ch);
                }catch(ArrayIndexOutOfBoundsException e){}
                if(pinyin.length()>=3)
                    break;
            }
            return pinyin.toString().toUpperCase();
        }
       
    }

  
}

/**
* BASE64�������ʵ����
* @author liusoft
* created on 2002-12-19
*/
class Base64Code {


  protected static byte[] _encode_map =
    {
    (byte)'A', (byte)'B', (byte)'C', (byte)'D', (byte)'E', (byte)'F', (byte)'G',
    (byte)'H', (byte)'I', (byte)'J', (byte)'K', (byte)'L', (byte)'M', (byte)'N',
    (byte)'O', (byte)'P', (byte)'Q', (byte)'R', (byte)'S', (byte)'T', (byte)'U',
    (byte)'V', (byte)'W', (byte)'X', (byte)'Y', (byte)'Z',

    (byte)'a', (byte)'b', (byte)'c', (byte)'d', (byte)'e', (byte)'f', (byte)'g',
    (byte)'h', (byte)'i', (byte)'j', (byte)'k', (byte)'l', (byte)'m', (byte)'n',
    (byte)'o', (byte)'p', (byte)'q', (byte)'r', (byte)'s', (byte)'t', (byte)'u',
    (byte)'v', (byte)'w', (byte)'x', (byte)'y', (byte)'z',

    (byte)'0', (byte)'1', (byte)'2', (byte)'3', (byte)'4',
    (byte)'5', (byte)'6', (byte)'7', (byte)'8', (byte)'9',

    (byte)'+', (byte)'/' };
 
  protected static byte _decode_map[] = new byte[128];
  static {
    /*
     * Fill in the decode map
     */
    for (int i = 0; i < _encode_map.length; i++) {
      _decode_map[_encode_map[i]] = (byte)i;
    }
  }


  /**
   * This class isn't meant to be instantiated.
   */
  private Base64Code ()
  {

  }



  /**
   * This method encodes the given byte[] using the Base64 encoding
   *
   *
   * @param  data the data to encode.
   * @return the Base64 encoded <var>data</var>
   */
  public final static byte[] encode (byte[] data) {

    if (data == null) {
      return (null);
    }

    /*
     * Craete a buffer to hold the results
     */
    byte dest[] = new byte[((data.length + 2) / 3) * 4];


    /*
     * 3-byte to 4-byte conversion and
     * 0-63 to ascii printable conversion
     */
    int i, j;
    int data_len = data.length - 2;
    for (i = 0, j = 0; i < data_len; i += 3) {

      dest[j++] = _encode_map[(data[i] >>> 2) & 077];
          dest[j++] = _encode_map[(data[i + 1] >>> 4) & 017 |
        (data[i] << 4) & 077];
          dest[j++] = _encode_map[(data[i + 2] >>> 6) & 003 |
        (data[i + 1] << 2) & 077];
          dest[j++] = _encode_map[data[i + 2] & 077];
    }
 
    if (i < data.length) {
      dest[j++] = _encode_map[(data[i] >>> 2) & 077];

      if (i < data.length-1) {
          dest[j++] = _encode_map[(data[i + 1] >>> 4) & 017 |
            (data[i] << 4) & 077];
          dest[j++] = _encode_map[(data[i + 1] << 2) & 077];
          } else {
          dest[j++] = _encode_map[(data[i] << 4) & 077];
      }
    }


    /*
     * Pad with "=" characters
     */
    for ( ; j < dest.length; j++) {
      dest[j] = (byte)'=';
    }

    return (dest);
  }


  /**
   * This method decodes the given byte[] using the Base64 encoding
   *
   *
   * @param  data the Base64 encoded data to decode.
   * @return the decoded <var>data</var>.
   */
  public final static byte[] decode (byte[] data) {

    if (data == null)
      return (null);

    /*
     * Remove the padding on the end
     */
    int ending = data.length;
    if (ending < 1) {
      return (null);
    }
    while (data[ending - 1] == '=')
      ending--;

    /*
     * Create a buffer to hold the results
     */
    byte dest[] = new byte[ending - data.length / 4];


    /*
     * ASCII printable to 0-63 conversion
     */
    for (int i = 0; i < data.length; i++) {
      data[i] = _decode_map[data[i]];
    }

 
    /*
     * 4-byte to 3-byte conversion
     */
    int i, j;
    int dest_len = dest.length - 2;
    for (i = 0, j = 0; j < dest_len; i += 4, j += 3) {
      dest[j] = (byte) (((data[i] << 2) & 255) |
         ((data[i + 1] >>> 4) & 003));
      dest[j + 1] = (byte) (((data[i + 1] << 4) & 255) |
        ((data[i + 2] >>> 2) & 017));
          dest[j + 2] = (byte) (((data[i + 2] << 6) & 255) |
          (data[i + 3] & 077));
    }

    if (j < dest.length) {
      dest[j] = (byte) (((data[i] << 2) & 255) |
        ((data[i + 1] >>> 4) & 003));
    }

    j++;
    if (j < dest.length) {
      dest[j] = (byte) (((data[i + 1] << 4) & 255) |
        ((data[i + 2] >>> 2) & 017));
    }

    return (dest);
  }
   
}
TOP

Related Classes of com.liusoft.dlog4j.util.Base64Code

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.