package com.mandi.common;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class BasicMethod {
public static String byte2hexStr(byte[] buf){
if(buf==null)
return null;
StringBuffer sb=new StringBuffer();
for(int i=0;i<buf.length;i++){
String hex=Integer.toHexString(buf[i]&0xff);
if(hex.length()==1)
{
hex='0'+hex;
}
sb.append(hex);
}
return sb.toString();
}
public static byte[] hexStr2bytes(String str){
if(str==null||str.length()<1)
return null;
byte[] result=new byte[str.length()>>1];
for(int i=0;i<str.length();i+=2){
int high=Integer.parseInt(str.substring(i, i+1),16);
int low=Integer.parseInt(str.substring(i+1, i+2),16);
result[i>>1]=(byte)(((high<<4)&0xf0)+low);
}
return result;
}
/**
* Aes åŠ å¯†
* @param source
* @param password
* @return
*/
public static String encryptAES(String source,String password){
if(source==null||password==null)
return null;
try {
KeyGenerator keygen=KeyGenerator.getInstance("AES");
SecureRandom sr=SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(password.getBytes());
keygen.init(128,sr);
SecretKey key=keygen.generateKey();
byte[] keyendoce=key.getEncoded();
SecretKeySpec keyspec=new SecretKeySpec(keyendoce, "AES");
Cipher cipher=Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE,keyspec );
byte[] sbytes=null;
try {
sbytes = cipher.doFinal(source.getBytes("utf8"));
} catch (UnsupportedEncodingException e) {
System.out.println("åŠ å¯†è¿‡ç¨‹ä¸ï¼Œgetbyte有错误!");
e.printStackTrace();
}
return byte2hexStr(sbytes); //这里也å¯ä»¥ç”¨base64æ¥è¡¨ç¤º,è¿™æ ·è§£å¯†çš„æ—¶å€™åè§£æžbase64
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return "";
}
public static String decryptAES(String source,String password)
{
if(source==null||password==null)
return "";
byte[] sbytes=hexStr2bytes(source);
try {
KeyGenerator keygen=KeyGenerator.getInstance("AES");
SecureRandom sr=SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(password.getBytes());
keygen.init(128,sr);
SecretKey key=keygen.generateKey();
byte[] keyendoce=key.getEncoded();
SecretKeySpec keyspec=new SecretKeySpec(keyendoce, "AES");
Cipher cipher=Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, keyspec);
byte[] dbytes=cipher.doFinal(sbytes);
try {
return new String(dbytes,"utf8");
} catch (UnsupportedEncodingException e) {
System.out.println("解密过程ä¸ï¼Œç¼–ç 错误!");
e.printStackTrace();
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return "";
}
public static String encryptSHA(String source)//SHA 摘è¦ï¼Œä¸å¯é€†
{
if(source==null)
return null;
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-256");
byte[] bytes=md.digest(source.getBytes());
return byte2hexStr(bytes);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
public static String encryptMD5(String source)//SHA 摘è¦ï¼Œä¸å¯é€†
{
if(source==null)
return null;
MessageDigest md;
try {
md = MessageDigest.getInstance("md5");
byte[] bytes=md.digest(source.getBytes("utf-8"));
return byte2hexStr(bytes);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
public static String encryptSHA1(String source)//SHA 摘è¦ï¼Œä¸å¯é€†
{
if(source==null)
return null;
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-1");
byte[] bytes=md.digest(source.getBytes());
return byte2hexStr(bytes);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
public static boolean checkEmailFormat(String email)
{
if(email==null)
return false;
String patterns="[a-zA-Z]+([-.][a-zA-Z0-9_-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*" +"(\\.[A-Za-z]{2,3})$";
Pattern p=Pattern.compile(patterns);
Matcher m=p.matcher(email);
if(m.matches())
return true;
return false;
}
public static boolean checkvalidusername(String username)
{
if(username==null)
return false;
String patterns="^[a-zA-Z][a-zA-Z0-9._-]{5,50}";
Pattern p=Pattern.compile(patterns);
Matcher m=p.matcher(username);
if(m.matches())
return true;
return false;
}
public static boolean checkIP(String ip)
{
if(ip==null)
return false;
String pattern="^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(ip);
if(m.matches())
return true;
return false;
}
/**
* 判æ–date是å¦å¤„äºŽå½“å‰æ—¶é—´-dayså‰
* @param date
* @param days
* @return
*/
public static boolean before(Date date, int days)
{
if(date==null)
return false;
Date now=new Date(System.currentTimeMillis());
Calendar nowcal=Calendar.getInstance();
nowcal.setTime(now);
Calendar datecal=Calendar.getInstance();
datecal.setTime(date);
nowcal.add(Calendar.DAY_OF_MONTH, -days);
if(datecal.before(nowcal))
return true;
return false;
}
/**
* 判æ–date是å¦å¤„äºŽå½“å‰æ—¶é—´+daysåŽ
* @param date
* @param days
* @return
*/
public static boolean after(Date date,int days)
{
if(date==null)
return false;
Date now=new Date(System.currentTimeMillis());
Calendar nowcal=Calendar.getInstance();
nowcal.setTime(now);
Calendar datecal=Calendar.getInstance();
datecal.setTime(date);
nowcal.add(Calendar.DAY_OF_MONTH, days);
if(datecal.after(nowcal))
return true;
return false;
}
/**
* 讲stringå—符串,规整化掉sql里é¢çš„特殊å—符'å’Œ\
*/
public static String sqlformat(String param)
{
if(param==null)
return null;
param=param.trim();
String t=param.replaceAll("'", "\\\\'");
t=t.replaceAll("\"", "\\\\\"");
return t;
}
/**
* 使用Jsoup包解æžhtml content,并æå–出所有的img超链接
* @param content
* @return
*/
public static String parseimgs(String content)
{
if(content==null)
return null;
Document doc=Jsoup.parse(content);
Elements eles=doc.select("img");
Iterator<Element> ele=eles.iterator();
Set<String> set=new HashSet<String>();
while(ele.hasNext())
{
Element e=ele.next();
set.add(e.attr("src"));
}
if(set.size()>0)
return Jacksonmethod.tojson(set, false);
return null;
}
public static int countDays(Date stime,Date etime){
if(stime==null||etime==null)
return 0;
return (int)((etime.getTime() - stime.getTime()) / (1000L * 60L * 60L * 24L));
}
public static String randomstr(int length)
{
if(length<=0)
return null;
char[] chars = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z' };
Random r=new Random(System.currentTimeMillis());
int charlength=chars.length;
StringBuffer sb=new StringBuffer();
for (int i = 0; i <length; i++) {
int ri=r.nextInt(charlength);
sb.append(chars[ri]);
}
return sb.toString();
}
public static String first2Upper(String str)
{
if(str==null)
return null;
char[] cs=str.toCharArray();
cs[0]-=32;
return String.valueOf(cs);
}
public static String getNow(Date now,String format){
Date d=new Date();
if(now!=null){
d=now;
}
SimpleDateFormat sdf=new SimpleDateFormat(format==null?"yyyy-MM-dd HH:mm:ss":format);
return sdf.format(d);
}
}