Java学习笔记1:java后台写接口,使用AES和RSA

来源:互联网 发布:jpeg量化矩阵 编辑:程序博客网 时间:2024/05/22 02:26

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 blocke.printStackTrace();}}    }




3.关于写接口的一些想法

对接接口需要用到AES和RSA加密
以下提供一种接口的写法

使用httppost 请求到后台
后台接口两个参数
data:   使用RSA公钥加密的json数据
encryptkey: AES密钥密文


使用AES解密encryptkey, 得到解密的RSA的privatekey,然后用privatekey去解密data字段
解密之后的到的就是json数据,解密后的数据再和sign签名判断是否相等,如果相等则通过验签收,sign方法可以根据上面方法修改成自己合适的


RSA的publickey是事先生成的,用于加密,加密和解密的可以根据上面的方法进行操作,由于版权问题,这里RSA加密和解密不给予提供,请谅解



0 0
原创粉丝点击