Browse Source

新增StringUtil和短信揭发平台工具类,实现短信接发功能

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@1322 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
aof 10 years ago
parent
commit
8f172706d5

+ 42 - 0
src/main/java/com/uas/platform/b2b/core/util/BaseUtil.java

@@ -0,0 +1,42 @@
+package com.uas.platform.b2b.core.util;
+
+import java.util.Random;
+
+import org.springframework.context.ApplicationContext;
+
+public class BaseUtil {
+	// applicationContext
+	private static ApplicationContext context;
+	
+	/**
+	 * 获取bean组件
+	 */
+	public static Object getBean(String beanName) {
+		try {
+			return context.getBean(beanName);
+		} catch (Exception e) {
+			return null;
+		}
+	}
+	/**
+	 * 获得随机长度的字符串
+	 * */
+	public static String randomString(int length) {
+		Random randGen = null;
+		char[] numbersAndLetters = null;
+		if (length < 1) {
+			return null;
+		}
+		if (randGen == null) {
+			randGen = new Random();
+			numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
+			// numbersAndLetters =
+			// ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
+		}
+		char[] randBuffer = new char[length];
+		for (int i = 0; i < randBuffer.length; i++) {
+			randBuffer[i] = numbersAndLetters[randGen.nextInt(71)];
+		}
+		return new String(randBuffer);
+	}
+}

+ 182 - 0
src/main/java/com/uas/platform/b2b/core/util/DesUtil.java

@@ -0,0 +1,182 @@
+package com.uas.platform.b2b.core.util;
+import java.security.Key;
+import java.security.Security;
+import java.util.Random;
+import javax.crypto.Cipher;
+public class DesUtil {
+	  /** 加密工具     */
+	  private Cipher encryptCipher = null;
+
+	  /** 解密工具     */
+	  private Cipher decryptCipher = null;
+	  private String key;
+
+	  /**  
+	   * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]  
+	   * hexStr2ByteArr(String strIn) 互为可逆的转换过程  
+	   *   
+	   * @param arrB  
+	   *            需要转换的byte数组  
+	   * @return 转换后的字符串  
+	   * @throws Exception  
+	   *             本方法不处理任何异常,所有异常全部抛出  
+	   */
+	  
+	  public static String byteArr2HexStr(byte[] arrB) throws Exception {
+	    int iLen = arrB.length;
+	    // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍   
+	    StringBuffer sb = new StringBuffer(iLen * 2);
+	    for (int i = 0; i < iLen; i++) {
+	      int intTmp = arrB[i];
+	      // 把负数转换为正数   
+	      while (intTmp < 0) {
+	        intTmp = intTmp + 256;
+	      }
+	      // 小于0F的数需要在前面补0   
+	      if (intTmp < 16) {
+	        sb.append("0");
+	      }
+	      sb.append(Integer.toString(intTmp, 16));
+	    }
+	    return sb.toString();
+	  }
+
+	public String getKey() {
+		return key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	  public static byte[] hexStr2ByteArr(String strIn) throws Exception {
+	    byte[] arrB = strIn.getBytes();
+	    int iLen = arrB.length;
+
+	    // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2   
+	    byte[] arrOut = new byte[iLen / 2];
+	    for (int i = 0; i < iLen; i = i + 2) {
+	      String strTmp = new String(arrB, i, 2);
+	      arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
+	    }
+	    return arrOut;
+	  } 
+	  /**  
+	   * 默认构造方法,使用默认密钥  
+	   *   
+	   * @throws Exception  
+	   */
+	  public DesUtil() throws Exception {
+		   super();
+		  }
+	  /**  
+	   * 指定密钥构造方法  
+	   *   
+	   * @param strKey  
+	   *            指定的密钥  
+	   * @throws Exception  
+	   */
+	  @SuppressWarnings("restriction")
+	public DesUtil(String strKey) throws Exception {
+	    Security.addProvider(new com.sun.crypto.provider.SunJCE());
+	    Key key = getKey(strKey.getBytes());
+
+	    encryptCipher = Cipher.getInstance("DES");
+	    encryptCipher.init(Cipher.ENCRYPT_MODE, key);
+
+	    decryptCipher = Cipher.getInstance("DES");
+	    decryptCipher.init(Cipher.DECRYPT_MODE, key);
+	  }
+
+	  /**  
+	   * 加密字节数组  
+	   *   
+	   * @param arrB  
+	   *            需加密的字节数组  
+	   * @return 加密后的字节数组  
+	   * @throws Exception  
+	   */
+	  public byte[] encrypt(byte[] arrB) throws Exception {
+	    return encryptCipher.doFinal(arrB);
+	  }
+
+	  /**  
+	   * 加密字符串  
+	   *   
+	   * @param strIn  
+	   *            需加密的字符串  
+	   * @return 加密后的字符串  
+	   * @throws Exception  
+	   */
+	  public String encrypt(String strIn) throws Exception {
+	    return byteArr2HexStr(encrypt(strIn.getBytes()));
+	  }
+
+	  /**  
+	   * 解密字节数组  
+	   *   
+	   * @param arrB  
+	   *            需解密的字节数组  
+	   * @return 解密后的字节数组  
+	   * @throws Exception  
+	   */
+	  public byte[] decrypt(byte[] arrB) throws Exception {
+	    return decryptCipher.doFinal(arrB);
+	  }
+
+	  /**  
+	   * 解密字符串  
+	   *   
+	   * @param strIn  
+	   *            需解密的字符串  
+	   * @return 解密后的字符串  
+	   * @throws Exception  
+	   */
+	  public String decrypt(String strIn) throws Exception {
+	    return new String(decrypt(hexStr2ByteArr(strIn)));
+	  }
+
+	  /**  
+	   * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位  
+	   *   
+	   * @param arrBTmp  
+	   *            构成该字符串的字节数组  
+	   * @return 生成的密钥  
+	   * @throws java.lang.Exception  
+	   */
+	  private Key getKey(byte[] arrBTmp) throws Exception {
+	    // 创建一个空的8位字节数组(默认值为0)   
+	    byte[] arrB = new byte[8];
+
+	    // 将原始字节数组转换为8位   
+	    for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
+	      arrB[i] = arrBTmp[i];
+	    }
+
+	    // 生成密钥   
+	    Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");
+
+	    return key;
+	  }
+	  public static String randomString(int length) {
+		  Random randGen = null;
+		  char[] numbersAndLetters = null;
+	         if (length < 1) {
+	             return null;
+	         }
+	         if (randGen == null) {
+	                randGen = new Random();
+	                numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz" +
+	                   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
+	                  //numbersAndLetters = ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
+	                 }
+	         char [] randBuffer = new char[length];
+	         for (int i=0; i<randBuffer.length; i++) {
+	             randBuffer[i] = numbersAndLetters[randGen.nextInt(71)];
+	         }
+	         return new String(randBuffer);
+	  }
+	
+
+
+}

+ 206 - 0
src/main/java/com/uas/platform/b2b/core/util/SendMsg.java

@@ -0,0 +1,206 @@
+package com.uas.platform.b2b.core.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.rmi.RemoteException;
+import java.security.MessageDigest;
+import javax.xml.rpc.ParameterMode;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.encoding.XMLType;
+import org.apache.axis.client.Call;
+import org.apache.axis.client.Service;
+
+import sun.misc.BASE64Encoder;
+
+@SuppressWarnings("restriction")
+public class SendMsg {
+	public SendMsg() {
+	}
+
+	private String registerUrl = "http://202.105.212.146:8080/jboss-net/services/Register";
+	private String sendUrl = "http://202.105.212.146:8080/jboss-net/services/SendSMS";
+	// private static String callBack = "http://127.0.0.1:8080/Callback";
+	private static String callBack = "http://102.71.103.47:8080/jboss-net/services/CallBack";
+	// final static String PWD="Aa123456";
+	// final static String UC="18098932060";
+	public final static String PWD = "sD456789()";
+	public final static String UC = "18022285520";
+	// 18022285520 密码:SD123456 qiaojing
+
+	public String getRandom() {
+		String rand = "";
+		try {
+			Service srv = new Service();
+			Call call = (Call) srv.createCall();
+			call.setTargetEndpointAddress(new URL(this.registerUrl));
+			call.setOperationName("getRandom");
+			call.setReturnType(XMLType.XSD_STRING);
+			rand = (String) call.invoke(new Object[] {});
+		} catch (ServiceException ex) {
+			System.out.println("createCall:" + ex.getMessage());
+		} catch (MalformedURLException ex) {
+			System.out.println("setTargetEndpointAddress:" + ex.getMessage());
+		} catch (RemoteException ex) {
+			System.out.println("invoke:" + ex.getMessage());
+		}
+		return rand;
+	}
+
+	public String setCallBackAddress(String uc, String pwd, String callbackurl) {
+		String connid = "";
+		String rand = this.getRandom();
+		String md5pwd = this.MD5Encode(rand + pwd + pwd);
+		Service srv = new Service();
+		try {
+			Call call = (Call) srv.createCall();
+			call.setTargetEndpointAddress(new URL(this.registerUrl));
+			call.setOperation("setCallBackAddr");
+			call.addParameter("uc", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("pw", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("rand", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("url", XMLType.XSD_STRING, ParameterMode.IN);
+			call.setReturnType(XMLType.XSD_STRING);
+			connid = (String) call.invoke(new Object[] { uc, md5pwd, rand, callbackurl });
+		} catch (ServiceException ex) {
+			System.out.println("call.createCall" + ex.getMessage());
+		} catch (MalformedURLException ex) {
+			System.out.println("URL" + ex.getMessage());
+		} catch (RemoteException ex) {
+			System.out.println("call.invoke" + ex.getMessage());
+		}
+		return connid;
+	}
+
+	public String sendMsg(String uc, String pwd, String callees, String isReturn, String cont, int msgid,
+			String connid) {
+		String re = "";
+		String rand = this.getRandom();
+		String callee[] = callees.split(",");
+		String md5pwd = this.MD5Encode(rand + pwd + pwd);
+		Service srv = new Service();
+		try {
+			Call call = (Call) srv.createCall();
+			call.setTargetEndpointAddress(new URL(this.sendUrl));
+			call.setOperationName("sendSMS");
+
+			call.addParameter("uc", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("pw", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("rand", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("callee", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("isreturn", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("cont", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("msgid", XMLType.XSD_INT, ParameterMode.IN);
+			call.addParameter("connID", XMLType.XSD_STRING, ParameterMode.IN);
+			call.setReturnType(XMLType.XSD_STRING);
+			re = (String) call
+					.invoke(new Object[] { uc, md5pwd, rand, callee, isReturn, Bey64Ecnode(cont), msgid, connid });// 璋冪敤鏂规硶
+		} catch (ServiceException ex) {
+			System.out.println("createCall" + ex.getMessage());
+		} catch (MalformedURLException ex) {
+			System.out.println("setTargetEndpointAddress" + ex.getMessage());
+		} catch (RemoteException ex) {
+			System.out.println("invoke" + ex.getMessage());
+		}
+		return re;
+	}
+
+	public String sendMsg(String callees, String isReturn, String cont, int msgid, String connid, String msguc,
+			String msgpwd) {
+		String re = "";
+		String rand = this.getRandom();
+		String callee[] = callees.split(",");
+		String md5pwd = this.MD5Encode(rand + msgpwd + msgpwd);
+		Service srv = new Service();
+		try {
+			Call call = (Call) srv.createCall();
+			call.setTargetEndpointAddress(new URL(this.sendUrl));
+			call.setOperationName("sendSMS");
+			call.addParameter("uc", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("pw", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("rand", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("callee", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("isreturn", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("cont", XMLType.XSD_STRING, ParameterMode.IN);
+			call.addParameter("msgid", XMLType.XSD_INT, ParameterMode.IN);
+			call.addParameter("connID", XMLType.XSD_STRING, ParameterMode.IN);
+			call.setReturnType(XMLType.XSD_STRING);
+			re = (String) call
+					.invoke(new Object[] { msguc, md5pwd, rand, callee, isReturn, Bey64Ecnode(cont), msgid, connid });
+		} catch (ServiceException ex) {
+			System.out.println("createCall" + ex.getMessage());
+		} catch (MalformedURLException ex) {
+			System.out.println("setTargetEndpointAddress" + ex.getMessage());
+		} catch (RemoteException ex) {
+			System.out.println("invoke" + ex.getMessage());
+		}
+		return re;
+	}
+
+	private static String Bey64Ecnode(String s) {
+		if (s == null) {
+			return null;
+		}
+		BASE64Encoder en = new BASE64Encoder();
+		try {
+			return en.encode(s.getBytes("GBK"));
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		return "";
+	}
+
+	private String MD5Encode(String origin) {
+		String resultString = null;
+
+		try {
+			resultString = new String(origin);
+			MessageDigest md = MessageDigest.getInstance("MD5");
+			resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
+		} catch (Exception ex) {
+
+		}
+		return resultString;
+	}
+
+	private String byteToHexString(byte b) {
+		int n = b;
+		if (n < 0) {
+			n = 256 + n;
+		}
+		int d1 = n / 16;
+		int d2 = n % 16;
+		return hexDigits[d1] + hexDigits[d2];
+	}
+
+	public String byteArrayToHexString(byte[] b) {
+		StringBuffer resultSb = new StringBuffer();
+		for (int i = 0; i < b.length; i++) {
+			resultSb.append(byteToHexString(b[i]));
+		}
+		return resultSb.toString();
+	}
+
+	private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
+			"e", "f" };
+
+	public void sendSimpleMsg(final String tels, final String msg, final String uc, final String pwd) throws Exception {
+		final SendMsg call = new SendMsg();
+		final String randomstr = BaseUtil.randomString(10);
+		try {
+			final DesUtil des = new DesUtil(randomstr);
+			des.setKey(randomstr);
+			new Thread() {
+				public void run() {
+					String callbackurl = callBack.trim();
+					String cont = msg.trim();
+					String connid = call.setCallBackAddress(uc, pwd, callbackurl);
+					call.sendMsg(tels, "0", cont, 1008, connid, uc, pwd);
+				}
+			}.start();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
+}