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 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加密和解密不给予提供,请谅解



你可能感兴趣的:(Java)