1.獲取簽名后的String,生成簽名串后,下面使用MD5進行簽名串的加密,大家可以改成使用RSA或者AES
package com.util;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* 簽名工具類
* @author Administrator
*
*/
public class SignUtils {
/**
* 生成簽名
* @param req 需要簽名的要素
* @return 簽名結果字符串
*/
public static String buildSignature(Map params, String securityKey) {
String prestr = createSignString(params);
prestr = prestr + "&" + MD5Utils.md5(securityKey);
return MD5Utils.md5(prestr);
}
public static String createSignString(Map params) {
List keys = new ArrayList(params.keySet());
Collections.sort(keys);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
String value = params.get(key);
if (value == null) continue;
sb.append(key);
sb.append("=");
sb.append(value);
sb.append("&");
}
return sb.toString().substring(0, sb.length()-1);
}
}
2.RSA與AES加密與解密
package com.util;
import java.util.HashMap;
import java.util.Map;
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//AES加密解密, 一定要16位
/*String AESKey = "lzc1016961351mmm";
String encryptStr = AES.encryptToBase64("我愛你中國", AESKey);
System.out.println(encryptStr);
String str = AES.decryptFromBase64(encryptStr, AESKey);
System.out.println(str);
*/
try {
Map keys = RSA.generateKeyPair();
Map map = new HashMap();
String publicKey = keys.get("publicKey");
String privateKey = keys.get("privateKey");
String encryptStr = RSA.encrypt("*(sdf我愛你中國123434dfdasfds", publicKey);
System.out.println(encryptStr);
String str = RSA.decrypt(encryptStr, privateKey);
System.out.println(str);
String str1 = RSA.decrypt(encryptStr, privateKey);
System.out.println(str);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.關於寫接口的一些想法
對接接口需要用到AES和RSA加密
以下提供一種接口的寫法
使用httppost 請求到后台
后台接口兩個參數
data: 使用RSA公鑰加密的json數據
encryptkey: AES密鑰密文
使用AES解密encryptkey, 得到解密的RSA的privatekey,然后用privatekey去解密data字段
解密之后的到的就是json數據,解密后的數據再和sign簽名判斷是否相等,如果相等則通過驗簽收,sign方法可以根據上面方法修改成自己合適的
RSA的publickey是事先生成的,用於加密,加密和解密的可以根據上面的方法進行操作,由於版權問題,這里RSA加密和解密不給予提供,請諒解