mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 21:03:17 +08:00
155 lines
8.5 KiB
Java
155 lines
8.5 KiB
Java
|
|
package com.example.filedemo.util.fuwufang;
|
||
|
|
|
||
|
|
|
||
|
|
import com.example.filedemo.util.MD5Util;
|
||
|
|
import com.example.filedemo.util.RSAUtil;
|
||
|
|
import sun.misc.BASE64Decoder;
|
||
|
|
import sun.misc.BASE64Encoder;
|
||
|
|
|
||
|
|
public class Tx {
|
||
|
|
|
||
|
|
public static void main(String[] args) throws Exception {
|
||
|
|
// 公钥
|
||
|
|
String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCDTQjKgrHLJ6bHlkC/Z1yLBCkXf1xPlGqE5Y4OzyD0ltGpOtEEKGgS1dqRVIL4KB2ZcJ4YNeinK1OIF1VXQN89JRdp9RILpXmCR3I62oPFbLllYBWxOWQrybLDIiMLortHSQuEDihXfoCPIqJmpLruDYOqinc+ERh/1Ovy2j4JHwIDAQAB";
|
||
|
|
// 私钥
|
||
|
|
String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALoeWEJKePYPWAQtJn4A+aI59/CfZtAfFZYnkF47v7j+JskM6aUoGkLixrbL6+hRgXw29PvndjthaoMw01SHwicipqfNxZHBYubaI9j9V+x+TUdlMuLPTnDJ8hn4G/gSjbHVNv7fxzKz9LABqiirElPgZnXuaOMckbTqr9JVTGaXAgMBAAECgYBIpQd1+HN2N073clgP3nmRZGbuOIl8umVGknK7FT8kCa9B0hRwLlLxwGondzjBGO8deKXunM19J+zW//u8hrC0wud/wKbxEaf4hjBADuLqTyh2XyEEWgtm+8+AdiuDUlt3VS5RHjBzam5+/XJUjxo7gtYmvN8R3kp4Ey1cILuGQQJBAOsYC7oofAr8/ZWMZApW5fPShCoapdigRJOfGlaAB5ppmc3U4/xl7KqpDaR76eWiAXRNaBB6L6T1VsMoTe7XQykCQQDKq12WFq6+/pGT7QVuRURUFt6JSCkoUlSm08bFKDvo11ZFYApZqBzlNUhVj73GsRs/m0KZD3/QMldfZg7Y81O/AkBlHpGkv9ci7tCwK5O4Msp0Bp+ccJvXQpBcorm0bRtYGoXyV9i8bqbOfSqGDlp70CQp/0V8mOG3ZWOtS7/BtMuJAkAnErDBTfA0vGmeplSktM/+kkYnG3Vr46uUWkH5Is+iDVoBmAmGzYV8nzAp5sOEugJx2eIWFkni/sGfj9KO+yKLAkEAvBGuPTz8yqUX8pAkB4qJQ1/pvnVPOt/r+cT1k+tuVoPtjGxbaLd1D/wNWsVdUFq6vrRYEioFnA9iGqjmCed7Lg==";
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 加密及获取签名
|
||
|
|
*/
|
||
|
|
//源报文(未加密)
|
||
|
|
// String msg = "{\n" +
|
||
|
|
// " \"CLD_HEADER\":{\n" +
|
||
|
|
// " \"CLD_TX_CHNL\":\"YS44000007000524\",\n" +
|
||
|
|
// " \"CLD_TX_TIME\":\"20191112145911\",\n" +
|
||
|
|
// " \"CLD_TX_CODE\":\"svc_occMebOrderPush\",\n" +
|
||
|
|
// " \"CLD_TX_SEQ\":\"\"\n" +
|
||
|
|
// " },\n" +
|
||
|
|
// " \"CLD_BODY\":{\n" +
|
||
|
|
// " \"USR_TEL\":\"18242028306\",\n" +
|
||
|
|
// " \"DCCP_AVY_ID\":\"00001\",\n" +
|
||
|
|
// " \"DCCP_BSC_INF_SN\":\"00001\",\n" +
|
||
|
|
// " }\n" +
|
||
|
|
// "}";
|
||
|
|
// msg = "{\n" +
|
||
|
|
// "\"CLD_HEADER\":{\n" +
|
||
|
|
// "\"CLD_TX_CHNL\":\"YS44000007000524\",\n" +
|
||
|
|
// "\"CLD_TX_TIME\":\"20191112145911\",\n" +
|
||
|
|
// "\"CLD_TX_CODE\":\"svc_occMebOrderPush\",\n" +
|
||
|
|
// "\"CLD_TX_SEQ\":\"\"\n" +
|
||
|
|
// "},\n" +
|
||
|
|
// "\"CLD_BODY\":{\n" +
|
||
|
|
// "\"USR_TEL\":\"18242028306\",\n" +
|
||
|
|
// "\"DCCP_AVY_ID\":\"00001\",\n" +
|
||
|
|
// "\"DCCP_BSC_INF_SN\":\"00001\",\n" +
|
||
|
|
// "}\n" +
|
||
|
|
// "}";
|
||
|
|
// msg = "{" +
|
||
|
|
// "\"CLD_HEADER\":{" +
|
||
|
|
// "\"CLD_TX_CHNL\":\"YS44000007000524\"," +
|
||
|
|
// "\"CLD_TX_TIME\":\"20191112145911\"," +
|
||
|
|
// "\"CLD_TX_CODE\":\"svc_occMebOrderPush\"," +
|
||
|
|
// "\"CLD_TX_SEQ\":\"\"" +
|
||
|
|
// "}," +
|
||
|
|
// "\"CLD_BODY\":{" +
|
||
|
|
// "\"USR_TEL\":\"18242028306\"," +
|
||
|
|
// "\"DCCP_AVY_ID\":\"00001\"," +
|
||
|
|
// "\"DCCP_BSC_INF_SN\":\"00001\"," +
|
||
|
|
// "}" +
|
||
|
|
// "}";
|
||
|
|
// msg = "{\n" +
|
||
|
|
// "\"CLD_HEADER\":{\n" +
|
||
|
|
// "\"CLD_TX_CHNL\":\"YS44000007000524\",\n" +
|
||
|
|
// "\"CLD_TX_TIME\":\"20191112145911\",\n" +
|
||
|
|
// "\"CLD_TX_CODE\":\"svc_occMebOrderPush\",\n" +
|
||
|
|
// "\"CLD_TX_SEQ\":\"\"\n" +
|
||
|
|
// "},\n" +
|
||
|
|
// "\"CLD_BODY\":{\n" +
|
||
|
|
// "\"USER_ID\":\"0001\",\n" +
|
||
|
|
// "\"ORDER_ID\":\"1231\",\n" +
|
||
|
|
// "\"ORDER_DT\":\"20220427120000\",\n" +
|
||
|
|
// "}\n" +
|
||
|
|
// "}";
|
||
|
|
String msg = "{\n" +
|
||
|
|
" \"CLD_HEADER\":{\n" +
|
||
|
|
" \"CLD_TX_CHNL\":\"YS44000009000327\",\n" +
|
||
|
|
" \"CLD_TX_TIME\":\"20191112145911\",\n" +
|
||
|
|
" \"CLD_TX_CODE\":\"svc_occMebOrderPush\",\n" +
|
||
|
|
" \"CLD_TX_SEQ\":\"\"\n" +
|
||
|
|
" },\n" +
|
||
|
|
" \"CLD_BODY\":{\n" +
|
||
|
|
" \"USER_ID\":\"0001\",\n" +
|
||
|
|
" \"ORDER_ID\":\"1231\",\n" +
|
||
|
|
" \"ORDER_DT\":\"20220427120000\",\n" +
|
||
|
|
" }\n" +
|
||
|
|
"}";
|
||
|
|
msg = "{\"CLD_HEADER\":{\"CLD_TX_CHNL\":\"YS44000009000327\",\"CLD_TX_TIME\":\"20220809173259\",\"CLD_TX_CODE\":\"svc_occMebOrderPush\",\"CLD_TX_SEQ\":\"202208091732596048392\"},\"CLD_BODY\":{\"USER_ID\":\"ZF0055975697X\",\"ORDER_ID\":\"202208091732596048392\",\"ORDER_DT\":\"20220809173259\",\"TOTAL_AMT\":\"0.01\",\"PAY_AMT\":\"0.00\",\"DISCOUNT_AMT\":\"0.00\",\"ORDER_STATUS\":\"0\",\"REFUND_STATUS\":\"0\",\"MCT_NM\":\"院线通\"}}";
|
||
|
|
// msg = "{\n" +
|
||
|
|
// " \"CLD_HEADER\":{\n" +
|
||
|
|
// " \"CLD_TX_CHNL\":\"YS44000009000327\",\n" +
|
||
|
|
// " \"CLD_TX_TIME\":\"20191112145911\",\n" +
|
||
|
|
// " \"CLD_TX_CODE\":\"svc_occWhiteListUpdate\",\n" +
|
||
|
|
// " \"CLD_TX_SEQ\":\"\"\n" +
|
||
|
|
// " },\n" +
|
||
|
|
// " \"CLD_BODY\":{\n" +
|
||
|
|
// " \"UWL_ID\":\"18242028306\",\n" +
|
||
|
|
// " \"UWL_STATUS\":\"1000000000000000\"\n" +
|
||
|
|
// " }\n" +
|
||
|
|
// "}";
|
||
|
|
//String msg = "{\"CLD_BODY\":{\"BRANCHID\":\"\",\"CUSTOMERID\":\"\",\"EDDT_TM\":\"\",\"MSGRP_JRNL_NO\":\"810000719394\",\"ONLN_PY_TXN_ORDR_ID\":\"WAP2022012415285709902\",\"PAGE\":1,\"POS_CODE\":\"\",\"POS_ID\":\"\",\"SCN_IDR\":\"\",\"STDT_TM\":\"\",\"TXN_PRD_TPCD\":\"06\",\"TXN_STATUS\":\"00\",\"TX_TYPE\":\"0\"},\"CLD_HEADER\":{\"CLD_TX_CHNL\":\"YS44000009000547\",\"CLD_TX_CODE\":\"svc_occPlatOrderQry\",\"CLD_TX_SEQ\":\"YSTEST0120220412094349000000\",\"CLD_TX_TIME\":\"20220412094349\"}}";
|
||
|
|
|
||
|
|
//msg = "{\"CLD_HEADER\":{\"CLD_TX_CHNL\":\"YS44000008000559\",\"CLD_TX_TIME\":\"20220524155153\",\"CLD_TX_CODE\":\"svc_occMebOrderPush\",\"CLD_TX_SEQ\":\"d114f967-f4cb-4331-8f40-6e396d6680ef\"},\"CLD_BODY\":{\"USER_ID\":\"123\",\"ORDER_ID\":\"371944\",\"ORDER_DT\":\"20220524155153\",\"TOTAL_AMT\":\"0.01\",\"ORDER_STATUS\":\"1\",\"REFUND_STATUS\":\"0\",\"MCT_NM\":\"宁波方太营销有限公司\"}}";
|
||
|
|
|
||
|
|
// msg = "{\"CLD_BODY\":\n" +
|
||
|
|
// "{\"ONLN_PY_TXN_ORDR_ID\":\"1563461616486464648\",\n" +
|
||
|
|
// "\"PAGE\":\"1\",\n" +
|
||
|
|
// "\"TXN_PRD_TPCD\":\"06\",\n" +
|
||
|
|
// "\"TXN_STATUS\":\"02\",\n" +
|
||
|
|
// "\"TX_TYPE\":\"0\"\n" +
|
||
|
|
// "},\n" +
|
||
|
|
// "\"CLD_HEADER\":{\n" +
|
||
|
|
// "\"CLD_TX_CHNL\":\"YS44000008000605\",\n" +
|
||
|
|
// "\"CLD_TX_CODE\":\"svc_occPlatOrderQry\",\n" +
|
||
|
|
// "\"CLD_TX_TIME\":\"20220530091747\",\n" +
|
||
|
|
// "\"CLD_TX_SEQ\":\"\"}\n" +
|
||
|
|
// "}";
|
||
|
|
|
||
|
|
// 公钥加密得到密文并使用base64处理
|
||
|
|
String enc_msg = RSAUtil.encrypt(msg, publicKey);
|
||
|
|
BASE64Encoder encoder = new BASE64Encoder();
|
||
|
|
enc_msg = encoder.encode(enc_msg.getBytes("UTF-8"));
|
||
|
|
enc_msg = enc_msg.replaceAll("\r\n", "").replaceAll("\r", "").replaceAll("\n", "");
|
||
|
|
|
||
|
|
|
||
|
|
System.out.println("公钥加密得到密文并使用base64处理(cnt):");
|
||
|
|
System.out.println(enc_msg);
|
||
|
|
|
||
|
|
// 根据源报文+私钥获得MD5签名
|
||
|
|
String mac_info = MD5Util.getMD5(msg + privateKey);
|
||
|
|
|
||
|
|
System.out.println("根据源报文+私钥获得MD5签名(mac):");
|
||
|
|
System.out.println(mac_info);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 解密及验签
|
||
|
|
*/
|
||
|
|
// base64逆处理并用私钥解密
|
||
|
|
BASE64Decoder decoder = new BASE64Decoder();
|
||
|
|
//enc_msg = "blM2REE0RUdYazlVaDN1RWRQamNOUmFUUE5aUkNsN2xieVZYNjNZWFZKUlRLc1JIbjlEWVdmUzZuSi93TUFTSmZwaHhvWjRyZ1FubwpQQmtQZWJXSzQzWFZnb3RqdkhYL2I2eWhtOWt3S0dsSTFmQzJVczZ4SWpLTHU1Zm1rT3RVZUFkSDIxMDdMbENxK3JmRklqVkVpZTBMCnA3NmdEVnUwbDVUV1R1STJ0UVFxRDJwT3BkR0J6c1NESGhRdlBVN2tOaWlKTTdkQzFXaG5Sc3ZRUEpFcUw0eVVhNFQ0REFPSWRFVEIKSy92WWtIY1ZWbjUrcXZFb0krQmZwYXdaTzExQmdYVTcya1FXRFBTYkZBaWlXakZWeVRmM2dXbTMxVXVCWjN3S2tWOHcwZVFCMzB2cApSdTlqWTNqZSs2WEdVNXRPT0Vhcndhak0yN1B3NjRxVjdRU0diUT09Cg==";
|
||
|
|
enc_msg = new String(decoder.decodeBuffer(enc_msg),"UTF-8");
|
||
|
|
String dec_msg = RSAUtil.decrypt(enc_msg, privateKey);
|
||
|
|
|
||
|
|
System.out.println("base64逆处理并用私钥解密:");
|
||
|
|
System.out.println(dec_msg);
|
||
|
|
|
||
|
|
// 验签
|
||
|
|
String dec_mac = MD5Util.getMD5(dec_msg + privateKey);
|
||
|
|
if (mac_info.equals(dec_mac)) {
|
||
|
|
System.out.println("验签通过");
|
||
|
|
} else {
|
||
|
|
System.out.println("验签失败");
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|