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 '
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 `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.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;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
......@@ -190,10 +189,6 @@ public class MidSignApiController {
log.info("mid resp:" + bodyJson.toJSONString());
return Rest.ok(bodyJson.toJSONString());
}
}
} catch (Exception 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
"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