Java學習筆記1:java後臺寫介面,使用AES和RSA
阿新 • • 發佈:2019-02-10
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<String, String> params, String securityKey) { String prestr = createSignString(params); prestr = prestr + "&" + MD5Utils.md5(securityKey); return MD5Utils.md5(prestr); } public static String createSignString(Map<String, String> params) { List<String> keys = new ArrayList<String>(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<String, String> keys = RSA.generateKeyPair(); Map<String, String> map = new HashMap<String, String>(); 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加密和解密不給予提供,請諒解