import java.security.Key; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class DESUtil { private static final Logger logger = Logger.getLogger(DESUtil.class); private static final String ENCODE = "GBK"; public static final String DEFAULT_KEY = "1234567890123456789012345"; //長度爲25位 private String key; public DESUtil() { } public DESUtil(String key) { this.key = key; } /** * 加密 * @param strMing String明文輸入 * @return String密文輸出 */ private String encryptStr(String strMing) { byte[] bOut = null; try { Key deskey = null; byte[] keyBytes = key.getBytes(); byte[] data = strMing.getBytes(ENCODE); DESedeKeySpec spec = new DESedeKeySpec(keyBytes); SecretKeyFactory keyfactory = SecretKeyFactory .getInstance("DESede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, deskey); bOut = cipher.doFinal(data); } catch (Exception e) { logger.debug("DES加密異常!" + e.getMessage()); } return new BASE64Encoder().encode(bOut); } /** * 解密 * * @param strMi * String密文輸入 * @return String明文輸出 */ private String decryptStr(String strMi) { String strMing = null; try { Key deskey = null; byte[] keyBytes = key.getBytes(); byte[] data = new BASE64Decoder().decodeBuffer(strMi); DESedeKeySpec spec = new DESedeKeySpec(keyBytes); SecretKeyFactory keyfactory = SecretKeyFactory .getInstance("DESede"); deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, deskey); byte[] bOut = cipher.doFinal(data); strMing = new String(bOut, ENCODE); } catch (Exception e) { logger.debug("DES解密異常!" + e.getMessage()); } return strMing; } /** * 描述:加密 * @param param 明文 * @return 密文 */ public static String getEncryptStr(String desKey, String param) { // 騰付通接口密鑰 if (StringUtils.isEmpty(desKey)) desKey = DEFAULT_KEY; final DESUtil desUtil = new DESUtil(desKey); if (StringUtils.isNotEmpty(param)) { return desUtil.encryptStr(param.trim()); } return desUtil.encryptStr(StringUtils.EMPTY); } /** * 描述:解密 * @param param 密文 * @return 明文 * @throws Exception */ public static String getDecryptStr(String desKey, String param) throws Exception { // 騰付通接口密鑰 if (StringUtils.isEmpty(desKey)) desKey = DEFAULT_KEY; final DESUtil desUtil = new DESUtil(desKey); if (StringUtils.isNotEmpty(param)) { String desStr = desUtil.decryptStr(param); if (StringUtils.isNotEmpty(desStr)) { return desStr.trim(); } return desStr; } return StringUtils.EMPTY; } }
贊成的URL地址:
java
getURLEncode(DESUtil.getEncryptStr(DESUtil.DEFAULT_KEY, agree))
獲取agree原字符串apache
/** * 方法描述: 組裝請求參數 * 做 者: yiming.zhang * 日 期: 2013-12-12-下午02:48:20 * @param orderNo * @param invalidTimeStr * @param authorAccount * @param authResult * @return * 返回類型: String */ private static String obtainURLParamsStr(String orderNo, String invalidTimeStr,String authorAccount,String authResult) { String urlPamamsStr = ""; Map<String,String> map = new HashMap<String,String>(); map.put(ORDER_NO, orderNo); map.put(INVALID_TIME, invalidTimeStr); map.put(AUTHOR_ACCOUNT, authorAccount); map.put(AUTH_RESULT, authResult); StringBuilder sb = new StringBuilder(); for (String key : map.keySet()) { sb.append(key).append("=").append(map.get(key)).append("&"); } if(sb.length() > 0){ urlPamamsStr = sb.substring(0, sb.length() - 1); } return urlPamamsStr; }
getURLEncode方法:app
/** * 方法描述: URL地址編碼一次 * 做 者: yiming.zhang * 日 期: 2013-12-12-下午02:36:31 * @param str * @return * 返回類型: String */ public static String getURLEncode(String str){ String s = ""; try { s = URLEncoder.encode(str,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return s; }