/*
* 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
* http://dlog4j.sourceforge.net
*
*/
package com.liusoft.dlog4j.upgrade;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class StringUtils extends org.apache.commons.lang.StringUtils{
/**
* ���ϵͳ�д��ھɰ汾�����ݣ����ֵ�����ģ������ڽ������������ʱ�����
*/
private static final String PASSWORD_CRYPT_KEY = "__jDlog_";
private final static String DES = "DES";
/**
* �ж��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==0 || (idx+1)==email.length())
return false;
if(email.indexOf('@', idx+1)!=-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();
*/
}
/**
* ����
* @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
* @return
* @throws Exception
*/
public final static String decrypt(String data){
try {
return new String(decrypt(hex2byte(data.getBytes()),PASSWORD_CRYPT_KEY.getBytes()));
}catch(Exception e) {
}
return null;
}
/**
* �������
* @param password
* @return
* @throws Exception
*/
public final static String encrypt(String password){
try {
return byte2hex(encrypt(password.getBytes(),PASSWORD_CRYPT_KEY.getBytes()));
}catch(Exception e) {
}
return null;
}
/**
* ������ת�ַ���
* @param b
* @return
*/
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; 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();
}
public static void main(String[] args) {
String pwd = decrypt("B5947D180FF18B990EB65C9107FBC8FB");
System.out.println("pwd="+pwd);
}
}