Commit f0fd6959 authored by 赵啸非's avatar 赵啸非

添加国密4加解密接口

parent 20bfcbd5
...@@ -227,3 +227,12 @@ ALTER TABLE mortals_sys_site_matter ADD COLUMN `agent` tinyint(2) DEFAULT ' ...@@ -227,3 +227,12 @@ ALTER TABLE mortals_sys_site_matter ADD COLUMN `agent` tinyint(2) DEFAULT '
ALTER TABLE mortals_sys_site_matter ADD COLUMN `agentName` varchar(64) COMMENT '代办姓名'; ALTER TABLE mortals_sys_site_matter ADD COLUMN `agentName` varchar(64) COMMENT '代办姓名';
ALTER TABLE mortals_sys_site_matter ADD COLUMN `agentPhone` varchar(32) COMMENT '代办电话'; ALTER TABLE mortals_sys_site_matter ADD COLUMN `agentPhone` varchar(32) COMMENT '代办电话';
ALTER TABLE mortals_sys_site_matter ADD COLUMN `agentPost` varchar(64) COMMENT '职务'; ALTER TABLE mortals_sys_site_matter ADD COLUMN `agentPost` varchar(64) COMMENT '职务';
-- ----------------------------
2024-02-29
-- ----------------------------
UPDATE mortals_sys_skin_base SET imageResolution="1920x1080" WHERE imageResolution="1";
UPDATE mortals_sys_skin_base SET imageResolution="1080x1920" WHERE imageResolution="2";
UPDATE mortals_sys_skin_base SET imageResolution="1280x1280" WHERE imageResolution="3";
\ No newline at end of file
package com.mortals.xhx.busiz.message;
import com.mortals.xhx.busiz.req.MessageReq;
import com.mortals.xhx.busiz.rsp.MessageResp;
public interface MessageService {
MessageReq decryptMessage(MessageReq req);
MessageReq encryptMessage(MessageReq req);
MessageResp signMessage(MessageReq req);
}
\ No newline at end of file
package com.mortals.xhx.busiz.message.impl;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.SM2;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.exception.AppException;
import com.mortals.xhx.busiz.message.MessageService;
import com.mortals.xhx.busiz.req.MessageReq;
import com.mortals.xhx.busiz.rsp.MessageResp;
import com.mortals.xhx.common.utils.RSAUtils;
import com.mortals.xhx.common.utils.ServicePlatformInvoker;
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.http.*;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.AlgorithmParameters;
import java.security.Security;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Collections;
import java.util.List;
/**
* DeviceService
* 设备 service实现
*
* @author zxfei
* @date 2022-03-09
*/
@Service("messageService")
@Slf4j
public class MessageServiceImpl implements MessageService {
private RestTemplate restTemplate = new RestTemplate();
@Override
public MessageReq decryptMessage(MessageReq req) {
if ("RSA".equalsIgnoreCase(req.getAlgorithm())) {
String decryptContent = RSAUtils.decode(req.getContent(), req.getPassword());
MessageReq messageReq = new MessageReq();
messageReq.setKey(req.getKey());
messageReq.setDecryptContent(decryptContent);
return messageReq;
} else if ("SM4".equalsIgnoreCase(req.getAlgorithm())) {
String decryptContent = null;
try {
decryptContent = decrypt(req.getKey(), req.getContent());
} catch (Exception e) {
log.error("异常", e);
throw new AppException(e);
}
/* SM4 sm4 = SmUtil.sm4(req.getPassword().getBytes());
String decryptContent = sm4.decryptStr(req.getContent());*/
/* SM4Utils sm4Utils = new SM4Utils();
sm4Utils.setHexString(false);
sm4Utils.setSecretKey(req.getPassword());
log.info("password:{},secretKey:{},keybytes:{}",req.getPassword(),sm4Utils.getSecretKey(),sm4Utils.getSecretKey().getBytes());
String decryptContent = sm4Utils.decryptData_ECB(req.getContent());*/
MessageReq messageReq = new MessageReq();
messageReq.setKey(req.getKey());
messageReq.setDecryptContent(decryptContent);
return messageReq;
} else if ("SM2".equalsIgnoreCase(req.getAlgorithm())) {
/* SM2 sm2 = SmUtil.sm2();
byte[] sign = sm2.sign(req.getContent().getBytes(), req.getPassword().getBytes());
// SM2 sm2 = SmUtil.sm2(req.getPassword().getBytes());
// String decryptContent = sm4.decryptStr(req.getContent());
*//* SM4Utils sm4Utils = new SM4Utils();
sm4Utils.setHexString(false);
sm4Utils.setSecretKey(req.getPassword());
log.info("password:{},secretKey:{},keybytes:{}",req.getPassword(),sm4Utils.getSecretKey(),sm4Utils.getSecretKey().getBytes());
String decryptContent = sm4Utils.decryptData_ECB(req.getContent());*//*
MessageReq messageReq = new MessageReq();
messageReq.setKey(req.getKey());
messageReq.setDecryptContent(decryptContent);
return messageReq;*/
}
return req;
}
@Override
public MessageReq encryptMessage(MessageReq req) {
MessageReq messageReq = new MessageReq();
if ("RSA".equalsIgnoreCase(req.getAlgorithm())) {
String decryptContent = RSAUtils.decode(req.getContent(), req.getPassword());
messageReq.setKey(req.getPassword());
messageReq.setDecryptContent(decryptContent);
return messageReq;
} else if ("SM4".equalsIgnoreCase(req.getAlgorithm())) {
String decryptContent = null;
try {
decryptContent = encryptSM4(req.getPassword(), req.getContent());
} catch (Exception e) {
throw new AppException("加密异常" + e.getMessage());
}
messageReq.setKey(req.getKey());
messageReq.setDecryptContent(decryptContent);
return messageReq;
}
return messageReq;
}
public String encryptSM4(@NonNull String key, String content) throws Exception {
Assert.hasText(key, "密钥不能为空");
if (content == null) {
return null;
}
Cipher cipher = Cipher.getInstance("SM4/ECB/PKCS7Padding", new BouncyCastleProvider());
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "SM4"), (AlgorithmParameters) null);
return Base64.getEncoder().encodeToString(cipher.doFinal(content.getBytes(StandardCharsets.UTF_8)));
}
public String decrypt(@NonNull String key, String encryptContent) throws Exception {
Assert.hasText(key, "密钥不能为空");
if (encryptContent == null) {
return null;
}
Cipher cipher = null;
cipher = Cipher.getInstance("SM4/ECB/PKCS7Padding", new BouncyCastleProvider());
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "SM4"), (AlgorithmParameters) null);
return new String(cipher.doFinal(Base64.getDecoder().decode(encryptContent)), StandardCharsets.UTF_8);
}
@Override
public MessageResp signMessage(MessageReq req) {
MessageResp messageResp = new MessageResp();
if ("RSA".equalsIgnoreCase(req.getAlgorithm())) {
return messageResp;
} else if ("SM2".equalsIgnoreCase(req.getAlgorithm())) {
String content = req.getContent();
JSONObject jsonObject = JSON.parseObject(content);
String access_key = jsonObject.getString("access_key");
String biz_content = jsonObject.getString("biz_content");
String format = jsonObject.getString("format");
String request_id = jsonObject.getString("request_id");
String timestamp = jsonObject.getString("timestamp");
String version = jsonObject.getString("version");
// 封装数据
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.set("access_key", access_key);
params.add("biz_content", biz_content);
params.add("format", format);
params.add("request_id", request_id);
params.add("timestamp", timestamp);
params.add("version", version);
// 获取签名字符串
List<String> signSourceParams = new ArrayList<>();
params.forEach((key, values) -> {
if (values != null && values.size() > 0) {
Object value = values.get(0);
if (value != null) {
String valueStr = value.toString();
if (!valueStr.isEmpty()) {
signSourceParams.add(String.format("%s=%s", key, valueStr));
}
}
}
});
Collections.sort(signSourceParams);
String sign = null;
try {
String paramStr = String.join("&", signSourceParams);
// String paramStr = "access_key=DYZWFWZX&biz_content={\"aaz001\":\"1701142468806\",\"appid\":\"uRsNCSjIRWaN\",\"data\":\"{\\\"aaz001\\\":\\\"1701049617366\\\",\\\"data\\\":\\\"K7JVkCiKcUyv3VcKx8WZXvY3E+P2pXMFE3QDkhiVhJDgmJWN+NMwoQhoVjBSmO9fWdO+4kG6iYYc8JEefgYn4g==\\\",\\\"serviceCode\\\":\\\"00500100101\\\",\\\"appid\\\":\\\"uRsNCSjIRWaN\\\"}\"}&format=json&request_id=2be36a654da24cc8bb20&timestamp=1701049618303&version=1.0";
log.info("paramStr==>" + paramStr);
byte[] paramStrBytes = paramStr.getBytes(StandardCharsets.UTF_8);
byte[] signBytes = null;
signBytes = ServicePlatformInvoker.SignUtils.sm2Sign(req.getPassword(), paramStrBytes);
sign = Base64.getEncoder().encodeToString(signBytes);
} catch (Exception e) {
log.error("异常", e);
}
log.info("signStr encode==>{}", sign);
messageResp.setSign(sign);
return messageResp;
}
return messageResp;
}
public static void main(String[] args) throws Exception {
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);
Security.addProvider(new BouncyCastleProvider());
MessageReq req = new MessageReq();
req.setPassword("MIICSwIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////v////////////////////8AAAAA//////////8wRAQg/////v////////////////////8AAAAA//////////wEICjp+p6dn140TVqeS89lCafzl4n1FauPkt28vUFNlA6TBEEEMsSuLB8ZgRlfmQRGajnJlI/jC7/yZgvhcVpFiTNMdMe8Nzai9PZ3nFm9zuNraSFT0KmHfMYqR0AC3zLlITnwoAIhAP////7///////////////9yA99rIcYFK1O79Ak51UEjAgEBBIIBVTCCAVECAQEEIL0TuUlJwA2kCWlXlb+zSd/2Rpt4kf42vIJWq5VGH5NXoIHjMIHgAgEBMCwGByqGSM49AQECIQD////+/////////////////////wAAAAD//////////zBEBCD////+/////////////////////wAAAAD//////////AQgKOn6np2fXjRNWp5Lz2UJp/OXifUVq4+S3by9QU2UDpMEQQQyxK4sHxmBGV+ZBEZqOcmUj+MLv/JmC+FxWkWJM0x0x7w3NqL09necWb3O42tpIVPQqYd8xipHQALfMuUhOfCgAiEA/////v///////////////3ID32shxgUrU7v0CTnVQSMCAQGhRANCAATFqcMDO2aQJzPnu3LIm8uYBlNh8RwZfwEGBHiez2GFedbSDORLvkdagF0tLhlwXlU5KmM4fudIZoJVRNccY1pq");
req.setContent("{\"access_key\":\"DYZWFWZX\",\"biz_content\":\"{\\\"appid\\\":\\\"uRsNCSjIRWaN\\\",\\\"aaz001\\\":\\\"202311246\\\",\\\"data\\\":\\\"0cHyD1AaGPJZQlkNbOBDdYZDOJG9ZKgfQx+Cg402jLG9k2dvIHUyIhczyilsD8V5AgEsRxySmCbP8QcA+l7p1aeOSJxCWZt\\\\\\/GEQrRFCWEAv9HgHRMUmaVPPn8DHtfS2zZSH\\\\\\/aNERu4SIfyl19GJVygjWglDixUwyRNvW0U0ZM6HMFZEqWV005hRbhk4APeZ+PH9t1wU0A2nGZnvzdrX6RRMYKboqkHPYl18nczQB3cA=\\\"}\",\"format\":\"json\",\"request_id\":\"2023112454559857\",\"timestamp\":\"1700811926506\",\"version\":\"1.0\"}");
req.setAlgorithm("SM2");
/* MessageServiceImpl messageService = new MessageServiceImpl();
MessageResp messageResp = messageService.signMessage(req);
System.out.println(messageResp.getSign());*/
String content = req.getContent();
JSONObject jsonObject = JSON.parseObject(content);
String access_key = jsonObject.getString("access_key");
String biz_content = jsonObject.getString("biz_content");
String format = jsonObject.getString("format");
String request_id = jsonObject.getString("request_id");
String timestamp = jsonObject.getString("timestamp");
String version = jsonObject.getString("version");
StringBuilder signSb = new StringBuilder();
signSb.append("access_key").append("=").append(access_key).append("&");
signSb.append("biz_content").append("=").append(biz_content).append("&");
signSb.append("format").append("=").append(format).append("&");
signSb.append("request_id").append("=").append(request_id).append("&");
signSb.append("timestamp").append("=").append(timestamp).append("&");
signSb.append("version").append("=").append(version).append("&");
String signStr = signSb.substring(0, signSb.length() - 1);
signStr = "access_key=DYZWFWZX&biz_content={\"aaz001\":\"1701142468806\",\"appid\":\"uRsNCSjIRWaN\",\"data\":\"{\\\"aaz001\\\":\\\"1701049617366\\\",\\\"data\\\":\\\"K7JVkCiKcUyv3VcKx8WZXvY3E+P2pXMFE3QDkhiVhJDgmJWN+NMwoQhoVjBSmO9fWdO+4kG6iYYc8JEefgYn4g==\\\",\\\"serviceCode\\\":\\\"00500100101\\\",\\\"appid\\\":\\\"uRsNCSjIRWaN\\\"}\"}&format=json&request_id=2be36a654da24cc8bb20&timestamp=1701049618303&version=1.0";
log.info("signStr==>{}", signStr);
// ServicePlatformInvoker invoker = new ServicePlatformInvoker("url", "DYZWFWZX", "MIICSwIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////v////////////////////8AAAAA//////////8wRAQg/////v////////////////////8AAAAA//////////wEICjp+p6dn140TVqeS89lCafzl4n1FauPkt28vUFNlA6TBEEEMsSuLB8ZgRlfmQRGajnJlI/jC7/yZgvhcVpFiTNMdMe8Nzai9PZ3nFm9zuNraSFT0KmHfMYqR0AC3zLlITnwoAIhAP////7///////////////9yA99rIcYFK1O79Ak51UEjAgEBBIIBVTCCAVECAQEEIL0TuUlJwA2kCWlXlb+zSd/2Rpt4kf42vIJWq5VGH5NXoIHjMIHgAgEBMCwGByqGSM49AQECIQD////+/////////////////////wAAAAD//////////zBEBCD////+/////////////////////wAAAAD//////////AQgKOn6np2fXjRNWp5Lz2UJp/OXifUVq4+S3by9QU2UDpMEQQQyxK4sHxmBGV+ZBEZqOcmUj+MLv/JmC+FxWkWJM0x0x7w3NqL09necWb3O42tpIVPQqYd8xipHQALfMuUhOfCgAiEA/////v///////////////3ID32shxgUrU7v0CTnVQSMCAQGhRANCAATFqcMDO2aQJzPnu3LIm8uYBlNh8RwZfwEGBHiez2GFedbSDORLvkdagF0tLhlwXlU5KmM4fudIZoJVRNccY1pq", ServicePlatformInvoker.SignAlgorithm.SM2, false);
byte[] bytes = ServicePlatformInvoker.SignUtils.sm2Sign(req.getPassword(), signStr.getBytes());
log.info("signStr encode==>{}", Base64.getEncoder().encodeToString(bytes));
SM2 sm2 = SmUtil.sm2(req.getPassword(), null);
//sm2.setMode(SM2Engine.Mode.C1C3C2);
//sm2.setEncoding(new PlainDSAEncoding());
byte[] sign = sm2.sign(signStr.getBytes(), null);
log.info("signStr encode==>{}", Base64.getEncoder().encodeToString(sign));
//SM2 sm2 = new SM2(privateKeyParameters, null);
/* String content = req.getContent();
JSONObject jsonObject = JSON.parseObject(content);
String access_key = jsonObject.getString("access_key");
String biz_content = jsonObject.getString("biz_content");
String format = jsonObject.getString("format");
String request_id = jsonObject.getString("request_id");
String timestamp = jsonObject.getString("timestamp");
String version = jsonObject.getString("version");
SM2 sm2 = SmUtil.sm2(req.getPassword(), null);
byte[] sign = sm2.sign(signStr.getBytes(), null);
log.info("signStr encode==>{}", Base64.getEncoder().encodeToString(sign));*/
/*
ECPrivateKeyParameters privateKeyParameters = BCUtil.toSm2Params(req.getPassword());
//创建sm2 对象
SM2 sm2 = new SM2(privateKeyParameters, null);
//这里需要手动设置,sm2 对象的默认值与我们期望的不一致 , 使用明文编码
sm2.usePlainEncoding();
sm2.setMode(SM2Engine.Mode.C1C2C3);
String content = req.getContent();
JSONObject jsonObject = JSON.parseObject(content);
String access_key = jsonObject.getString("access_key");
String biz_content = jsonObject.getString("biz_content");
String format = jsonObject.getString("format");
String request_id = jsonObject.getString("request_id");
String timestamp = jsonObject.getString("timestamp");
String version = jsonObject.getString("version");
StringBuilder signSb = new StringBuilder();
signSb.append("access_key").append("=").append(access_key).append("&");
signSb.append("biz_content").append("=").append(biz_content).append("&");
signSb.append("format").append("=").append(format).append("&");
signSb.append("request_id").append("=").append(request_id).append("&");
signSb.append("timestamp").append("=").append(timestamp).append("&");
signSb.append("version").append("=").append(version).append("&");
// String dataBytes = signSb.substring(0, signSb.length() - 1);
String dataBytes = signSb.substring(0, signSb.length() - 1);
byte[] sign = sm2.sign(dataBytes.getBytes(), null);
System.out.println("数据: " + HexUtil.encodeHexStr(dataBytes));
System.out.println("签名: " + HexUtil.encodeHexStr(sign));
*/
/* String password = "1234567890123456";
String content = "12313";
SM4 sm4 = SmUtil.sm4(password.getBytes());
String encryptContent = sm4.encryptBase64(content);
System.out.println("encryptContent:" + encryptContent);
sm4 = SmUtil.sm4(password.getBytes());
String decryptContent = sm4.decryptStr(encryptContent);
System.out.println("decryptContent:" + decryptContent);*/
}
}
\ No newline at end of file
package com.mortals.xhx.busiz.req;
import lombok.Data;
/**
* 工作流请求头信息
*
* @author: zxfei
* @date: 2021/8/25 9:50
*/
@Data
public class ApiReq<T> {
/**
* 业务平台标识(唯一)
*/
private String tenantId;
/**
* 实体数据()
*/
private T entity;
}
package com.mortals.xhx.busiz.req;
import lombok.Data;
import java.io.Serializable;
@Data
public class MessageReq implements Serializable {
/**
* key
*/
private String key;
/**
* 加解密方式(如RSA,AES)
*/
private String algorithm;
/**
* 秘钥
*/
private String password;
private String private_key;
/**
* 内容
*/
private String content;
/**
* 解密内容
*/
private String decryptContent;
private String url;
private String dataSecret="QZTiVtyFIUjMCVLs";
public static void main(String[] args) {
// DeviceReq deviceReq = new DeviceReq();
// deviceReq.setIsAdmin();
// deviceReq.seti
}
}
package com.mortals.xhx.busiz.req;
import lombok.Data;
import java.io.Serializable;
/**
* 请求对象
*
* @author liuyang05
*/
@Data
public class PayApiRequestEntityVO implements Serializable {
private static final long serialVersionUID = -3968797265834488447L;
/**
* 应用ID
*/
private String appid;
/**
* 请求流水号
*/
private String aaz001;
/**
* 请求参数数据
*/
private String data;
}
\ No newline at end of file
package com.mortals.xhx.busiz.rsp;
import lombok.Data;
/**
* @author karlhoo
*/
@Data
public class ApiResp<T> {
/**
* 结果编码
*/
private int code;
/**
* 结果描述
*/
private String msg;
/**
* 响应数据
*/
private T data;
}
package com.mortals.xhx.busiz.rsp;
import lombok.Data;
import java.io.Serializable;
@Data
public class MessageResp implements Serializable {
/**
* content(AES加密)
*/
private String content;
private String sign;
}
package com.mortals.xhx.busiz.web; package com.mortals.xhx.busiz.web;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method; import cn.hutool.http.Method;
...@@ -190,10 +189,6 @@ public class MidSignApiController { ...@@ -190,10 +189,6 @@ public class MidSignApiController {
log.info("mid resp:" + bodyJson.toJSONString()); log.info("mid resp:" + bodyJson.toJSONString());
return Rest.ok(bodyJson.toJSONString()); return Rest.ok(bodyJson.toJSONString());
} }
} }
} catch (Exception e) { } catch (Exception e) {
log.error("透传请求异常", e); log.error("透传请求异常", e);
......
package com.mortals.xhx.busiz.web;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.SM2;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mortals.xhx.busiz.message.MessageService;
import com.mortals.xhx.busiz.req.MessageReq;
import com.mortals.xhx.busiz.rsp.ApiResp;
import com.mortals.xhx.busiz.rsp.MessageResp;
import com.mortals.xhx.common.code.ApiRespCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/api")
public class SecurityApiController {
@Autowired
private MessageService messageService;
/**
* 解密
*
* @param req
* @return
*/
@PostMapping("decrypt")
public String decrypt(@RequestBody MessageReq req) {
log.info("【解密】【请求体】--> " + JSONObject.toJSONString(req));
ApiResp<MessageReq> rsp = new ApiResp<>();
rsp.setCode(ApiRespCodeEnum.SUCCESS.getValue());
try {
MessageReq messageReq = messageService.decryptMessage(req);
rsp.setData(messageReq);
} catch (Exception e) {
log.error("接收数据失败", e);
rsp.setCode(ApiRespCodeEnum.FAILED.getValue());
rsp.setMsg(e.getMessage());
return JSON.toJSONString(rsp);
}
log.info("响应【解密】【响应体】--> " + JSONObject.toJSONString(rsp));
return JSON.toJSONString(rsp);
}
/**
* 批量解密
*
* @param reqList
* @return
*/
@PostMapping("decryptBatch")
public String decryptBatch(@RequestBody List<MessageReq> reqList) {
log.info("【批量解密】【请求体】--> " + JSONObject.toJSONString(reqList));
ApiResp<List<MessageReq>> rsp = new ApiResp<>();
rsp.setCode(ApiRespCodeEnum.SUCCESS.getValue());
try {
List<MessageReq> respList=new ArrayList<>();
reqList.stream().forEach(req->{
MessageReq messageReq = messageService.decryptMessage(req);
respList.add(messageReq);
});
rsp.setData(respList);
} catch (Exception e) {
log.error("接收数据失败", e);
rsp.setCode(ApiRespCodeEnum.FAILED.getValue());
rsp.setMsg(e.getMessage());
return JSON.toJSONString(rsp);
}
log.info("响应【批量解密】【响应体】--> " + JSONObject.toJSONString(rsp));
return JSON.toJSONString(rsp);
}
/**
* 加密
*
* @param req
* @return
*/
@PostMapping("encrypt")
public String encrypt(@RequestBody MessageReq req) {
log.info("【加密】【请求体】--> " + JSONObject.toJSONString(req));
ApiResp<MessageReq> rsp = new ApiResp<>();
rsp.setCode(ApiRespCodeEnum.SUCCESS.getValue());
try {
MessageReq messageReq = messageService.encryptMessage(req);
rsp.setData(messageReq);
} catch (Exception e) {
log.error("接收数据失败", e);
rsp.setCode(ApiRespCodeEnum.FAILED.getValue());
rsp.setMsg(e.getMessage());
return JSON.toJSONString(rsp);
}
log.info("响应【加密】【响应体】--> " + JSONObject.toJSONString(rsp));
return JSON.toJSONString(rsp);
}
/**
* 批量加密
*
* @param reqList
* @return
*/
@PostMapping("encryptBatch")
public String encryptBatch(@RequestBody List<MessageReq> reqList) {
log.info("【批量加密】【请求体】--> " + JSONObject.toJSONString(reqList));
ApiResp<List<MessageReq>> rsp = new ApiResp<>();
rsp.setCode(ApiRespCodeEnum.SUCCESS.getValue());
try {
List<MessageReq> respList=new ArrayList<>();
reqList.stream().forEach(req->{
MessageReq messageReq = messageService.encryptMessage(req);
respList.add(messageReq);
});
rsp.setData(respList);
} catch (Exception e) {
log.error("接收数据失败", e);
rsp.setCode(ApiRespCodeEnum.FAILED.getValue());
rsp.setMsg(e.getMessage());
return JSON.toJSONString(rsp);
}
log.info("响应【批量加密】【响应体】--> " + JSONObject.toJSONString(rsp));
return JSON.toJSONString(rsp);
}
/**
* 签名
*
* @param req
* @return
*/
@PostMapping("sign")
public String sign(@RequestBody MessageReq req) {
log.info("【签名】【请求体】--> " + JSONObject.toJSONString(req));
ApiResp<MessageResp> rsp = new ApiResp<>();
rsp.setCode(ApiRespCodeEnum.SUCCESS.getValue());
try {
MessageResp messageResp = messageService.signMessage(req);
rsp.setData(messageResp);
} catch (Exception e) {
log.error("接收数据失败", e);
rsp.setCode(ApiRespCodeEnum.FAILED.getValue());
rsp.setMsg(e.getMessage());
return JSON.toJSONString(rsp);
}
log.info("响应【签名】【响应体】--> " + JSONObject.toJSONString(rsp));
return JSON.toJSONString(rsp);
}
public static void main(String[] args) {
SM2 sm2 = SmUtil.sm2();
String content="{\"access_key\":\"DYZWFWZX\",\"biz_content\":\"{\\\"appid\\\":\\\"uRsNCSjIRWaN\\\",\\\"aaz001\\\":\\\"202311246\\\",\\\"key_set\\\":\\\"0cHyD1AaGPJZQlkNbOBDdYZDOJG9ZKgfQx+Cg402jLG9k2dvIHUyIhczyilsD8V5AgEsRxySmCbP8QcA+l7p1aeOSJxCWZt\\\\\\/GEQrRFCWEAv9HgHRMUmaVPPn8DHtfS2zZSH\\\\\\/aNERu4SIfyl19GJVygjWglDixUwyRNvW0U0ZM6HMFZEqWV005hRbhk4APeZ+PH9t1wU0A2nGZnvzdrX6RRMYKboqkHPYl18nczQB3cA=\\\"}\",\"format\":\"json\",\"request_id\":\"2023112454559857\",\"timestamp\":\"1700811926506\",\"version\":\"1.0\"}";
String password="MIICSwIBADCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////v////////////////////8AAAAA//////////8wRAQg/////v////////////////////8AAAAA//////////wEICjp+p6dn140TVqeS89lCafzl4n1FauPkt28vUFNlA6TBEEEMsSuLB8ZgRlfmQRGajnJlI/jC7/yZgvhcVpFiTNMdMe8Nzai9PZ3nFm9zuNraSFT0KmHfMYqR0AC3zLlITnwoAIhAP////7///////////////9yA99rIcYFK1O79Ak51UEjAgEBBIIBVTCCAVECAQEEIL0TuUlJwA2kCWlXlb+zSd/2Rpt4kf42vIJWq5VGH5NXoIHjMIHgAgEBMCwGByqGSM49AQECIQD////+/////////////////////wAAAAD//////////zBEBCD////+/////////////////////wAAAAD//////////AQgKOn6np2fXjRNWp5Lz2UJp/OXifUVq4+S3by9QU2UDpMEQQQyxK4sHxmBGV+ZBEZqOcmUj+MLv/JmC+FxWkWJM0x0x7w3NqL09necWb3O42tpIVPQqYd8xipHQALfMuUhOfCgAiEA/////v///////////////3ID32shxgUrU7v0CTnVQSMCAQGhRANCAATFqcMDO2aQJzPnu3LIm8uYBlNh8RwZfwEGBHiez2GFedbSDORLvkdagF0tLhlwXlU5KmM4fudIZoJVRNccY1pq";
byte[] sign = sm2.sign(content.getBytes(), password.getBytes());
System.out.println(Base64.getEncoder().encodeToString(sign));
}
}
...@@ -192,3 +192,7 @@ Content-Type: application/json ...@@ -192,3 +192,7 @@ Content-Type: application/json
"secondOrganize": "hongqi" "secondOrganize": "hongqi"
} }
###字典获取
GET {{baseUrl}}/param/dict?first=SkinBase&second=imageResolution
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment