1. 程式人生 > >Java學習筆記1:java後臺寫介面,使用AES和RSA

Java學習筆記1:java後臺寫介面,使用AES和RSA

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加密和解密不給予提供,請諒解