多方合作时,系统间的交互是怎么做的? 您所在的位置:网站首页 团购平台源码怎么做 多方合作时,系统间的交互是怎么做的?

多方合作时,系统间的交互是怎么做的?

2023-06-16 17:19| 来源: 网络整理| 查看: 265

import java.io.IOException;import java.security.Security;import java.text.ParseException;

import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;

import com.alibaba.fastjson.JSONObject;

import lombok.extern.slf4j.Slf4j;import org.apache.commons.codec.binary.Base64;import org.apache.http.HttpEntity;import org.apache.http.clienthods.CloseableHttpResponse;import org.apache.http.clienthods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicHeader;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import org.bouncycastle.jce.provider.BouncyCastleProvider;

/** * 需要依赖 * * * com.alibaba * fastjson * 1.2.83 * * * * org.bouncycastle * bcprov-jdk15on * 1.56 * * * * commons-codec * commons-codec * 1.14 * */@Slf4jpublic class EncryptUtil {

static { Security.addProvider(new BouncyCastleProvider()); }

private static final String CipherMode = "AES/CBC/PKCS7Padding";

private static final String EncryptAlg = "AES";

private static final String Encode = "UTF-8";

/** * 加密随机盐 */ private static final String AESIV = "ff465fdecc764337";

/** * 加密:有向量16位,结果转base64 * * @param context * @return */ public static String encrypt(String context, String sk) { try { // 下面这行在进行PKCS7Padding加密时必须加上,否则报错 Security.addProvider(new BouncyCastleProvider()); byte[] content = context.getBytes(Encode); Cipher cipher = Cipher.getInstance(CipherMode); cipher.init( Cipher.ENCRYPT_MODE, new SecretKeySpec(sk.getBytes(Encode), EncryptAlg), new IvParameterSpec(AESIV.getBytes(Encode))); byte[] data = cipher.doFinal(content); String result = Base64.encodeBase64String(data); return result; } catch (Exception e) { e.printStackTrace(); } return null; }

/** * 解密 * * @param context * @return */ public static String decrypt(String context, String sk) { try { byte[] data = Base64.decodeBase64(context); Cipher cipher = Cipher.getInstance(CipherMode); cipher.init( Cipher.DECRYPT_MODE, new SecretKeySpec(sk.getBytes(Encode), EncryptAlg), new IvParameterSpec(AESIV.getBytes(Encode))); byte[] content = cipher.doFinal(data); String result = new String(content, Encode); return result; } catch (Exception e) { e.printStackTrace(); } return null; }

public static String sendPost(String url, JSONObject jsonObject, String encoding) throws ParseException, IOException { String body = "";

//创建httpclient对象 CloseableHttpClient client = HttpClients.createDefault(); //创建post方式请求对象 HttpPost httpPost = new HttpPost(url); //装填参数 StringEntity s = new StringEntity(jsonObject.toString(), "utf-8"); s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); //设置参数到请求对象中 httpPost.setEntity(s); log.info("请求地址:" + url); // System.out.println("请求参数:"+nvps.toString());

//设置header信息 //指定报文头【Content-type】、【User-Agent】 // httpPost.setHeader("Content-type", "application/x-www-form-urlencoded"); httpPost.setHeader("Content-type", "application/json"); httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); //执行请求操作,并拿到结果(同步阻塞) CloseableHttpResponse response = client.execute(httpPost); //获取结果实体 HttpEntity entity = response.getEntity(); if (entity != null) { //按指定编码转换结果实体为String类型 body = EntityUtils.toString(entity, encoding); } EntityUtils.consume(entity); //释放链接 response.close(); return body;

}

public static void main(String[] args) { String appId = "appId"; //AES算法支持的密钥长度有128位、192位和256位,其中128位密钥是最常用的。 //因此,如果使用AES算法进行加密和解密,必须确保密钥长度是128位、192位或256位。 //如果使用的是AES-128算法,则密钥长度应该是128位,也就是16个字节; //如果使用的是AES-192算法,则密钥长度应该是192位,也就是24个字节; //如果使用的是AES-256算法,则密钥长度应该是256位,也就是32个字节 String appKey = UUIDUtil.generateString(32); //参数加密 JSONObject jsonObject = new JSONObject(); jsonObject.put("appId", appId); jsonObject.put("appKey", appKey); jsonObject.put("data", "我是内容"); String encrypt = EncryptUtil.encrypt(jsonObject.toJSONString(), appKey); System.out.println("加密后内容=" + encrypt);

//参数界面 System.out.println("解密后内容=" + EncryptUtil.decrypt(encrypt, appKey)); }}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有