{"agetId":"61000000103774","pdata":"gkRATaaAXDlbTO2mDcOHTI5HISHVCL+0nk+UCSstv9meu+20vjTBc08DxhKmueAKyY5ocdu481HQWZsVLnqaHGZHGitVYwZ4z1cMT4nvR1CWNH19484tTcPUGOumtgo917bOO/k8/SLUj2K2RCcSdnKkyNKfkJ2IBG/HCXZalMzClwqd+1gBWySeTvMuDNKbasxPTnNsx4BNCVGK/wAMAHwdOPWPf3/GJk6aA54WoDQJMpjoix2lrtRt7YR7NNlAmMRbim5m3PMGgHOMw3quTnfeP0EE37R2+VdbkFcesB9thJIpm2hSWAN96pdvuje5uXkJH+eq15Cw2c1LLg+kuljsd5pn+va1QGeBQWK0ZhYrYK+bg82dnp1tQ7swhTyRdpw56bCdxdHroZWf1E4HzdYJ4nPn1VXb5Mx4P6IONXK8ZgvYHc1oHtkzHUuGM7g05uAnJb9Batsiq7U1DEcTNHwFoikmkPVfWUmM6KZi7NnOFWOw4AAo+2qgeoxQC2GXCTL95jAtDotNFjX+PROXu4rIzbetz8nXNWfd3kbOAOhCqJ8KB7AAQr4AyXSznOt2oEXGWEIDUMxu0bvIopJomoswL44FyoBzb24u4UjpAJZ8rDR4L0paHmInRzZ/8Lp9lzMHM2t+LYEHz26l2lGPqX5I8dliOgU4IUvMYJMiGgRkH1WZOVSlencnSXi2ufknpe0HSM+WNDUY/6N+uHZAEl1fFzZpbrEdNk7MsJCMCoyZyjzxahgFN/Ms4yW6ZVnaGuy5QlqYjtpUrAJs74xj0SOMmuJ7cUGxtkhCOBuodn1NlThNyFRh6nPaowk/IYKxvgaavYlxu86MGN+rlGQz9o+PQzNP6IZAzfeZ6l0HKQocA43BOc7FcxMp34vY2P8sYlZRLu0MB3LMgHxlw4oHjSTaklVkC3NjsLBCCSCqgkhNgb/VJ3cDuWOuNeDLefjIfsVhF5pSHjHv04ujs00lZpfSGjUXtRN2kXWy90uW/oH6BKSVx40TUQ5gLIyfjROpJZvMN82LcybotvV3BKPLlj9137wKGNKx8V/kE+JKRxKHeTxjycasBHpdz5zBPO2mmograPwTjWzmGzP3Vp3H+W2ZNbcPAo8rWnL6mDFLMiuvhfGKloL/eUcZv0S9bNHCQ7QSiXVrgopHpSFgynjOkgaO0a6MSZ9qaWspf0TBCn6ITYhL3PtoAiofyQ1nMSj/VjpRVSyW46yJIhQ4YS7JfmRG5Ps5w7lemR4CTc0umPzeyOZPVmuCoPzb9A8rzqorzX1eb5nACygPH4G0K1p1n0bF2RkQKosVrgvPWPR8zHTwm+d5G6jsm4ChpjGLm3qT8k/JgfYmY4OLwBnYcT9SgFBN/McFwHMC3c5ln6qghjp2QqrFVZ069ZrGaJKteJZfDrwYTBANJ8GWRXpA8/OzKu+jx0OWQgxr3vo0aTpWt8woZhHR2mEmeU74zSRKsuWmW3lM/q+U+2c6Hgkjl2/da32AuK7MQi1k4TYZhtexLgWMyCAnbshtcYWVXKkcbpqLG6oQiAS56gKnRCKT9nDkFHPIibTKCl6aFTvytqpP3BKiRS3xYBIHXxhXi9Nvhu8qg08HDkGfl7IxIcHUGSplSCQlmFxh7yok6omvuoJp53VbKBuBthW6L3hoh2KdXxNm6v3WJQi7Wq8qY3rMWr8W0579QlnHJ6LVGtkMnv+9i8yMcOQgL27jn/tQTCIwlQaXnRewG+GRgRlnmALnFykZMW6n44aES4zgWNWIGPAEQEDiXr4v3F2C6yJXAaCy1IjjpZUDCucbl2108WSucv/TMQV7pfrIqhKSGqiLNL+xd/P8Siqh+uDqH44hdYPH5UHIsGG3Meibt6J8iN7reHoFedn88XINgmqEj73WZFlP0CfF22MEAa2NPS2/QtRew2wuf4EbUO6fgorTlYmQqoB340C7FHUhxNQd+h28DNG8JwES4qNBH5V1VzfoHRldmTlp+UCziAsEV01avlJdejA3o6/qZaanmA08E9860bNH0yFsVxkq4fAsxARH5+pUkdVEauLIfHVlCMkEzVeCXOpZLllWIukm8/h3nfa6lnND1CyGmcr0TNscNtAWsu195FvVq2uV3gcddFG4J28Yn15cZFKw4/ut4GlsmsPhRyWfdw8Zcc4GJ7rXKK/bSZ2XY/OGNYFo210nO3vsQSP4nXIe3GmaeD4eeYH9JmSWVZHz6sLjV1LYmWRNU5JZNdZGMc4QHNxJ86rT4xw6RjvSbul41iLptWRYki3QgbcZLuHpsGk5j04+SwRqjhMrpTez1XsLupHSYBiRiLFFX65YJAqKEm4tat31zINiFOi/PzuOzpFAZ6FMlflEssABHhozmDX9Y3WxFOXGwXt1m4GKqdnoAUDwaU16HKASDxJh7WH26K2i2mJV1zFKLoTDP4M5QGfQkFi5g/LDYcApur/0UC6HeODLMqyqFfvccQNW/qPMzs3oF9yhJemjeAUzUzJbHbFKc4l3Q0P7bsSo6uxTvA99O+iS0ZSwuU3vDojrhPZwnQB/V6II482gtrvtdSCcKIGa+yg6nvmtuiADvDs6TWXvT5biG2rhU8QoH77ZvEvzQE7aCTPu6rWQPf51sfIjmUQjvkRV+ns6b5sgVPLKN4Oa5TEXoE2IF02KDrU7dlkPOkLRdmzB6r8Ngl7M6M5rs3ZtSD4SwV2TkiF+zeCnQN8RrKg9H/++pmU2QOqGG57CG4k="}
{"ACCOUNT_NAME":"王玉茹","ACCOUNT_NO":"6215699120","AGE_CUST_ID":"61000000103774","AGE_NAME":"郑秀华收单01一级","AUTH_DATE":"2025-11-08 17:07:10","AUTH_RESULT":"00","AUTH_TYPE":"0","BANK_NAME":"BOC","BUS_NAME":"福建合码通信息服务有限责任公司","CUST_ID":"60000001056036","CUST_TYPE":"1","IND_TYPE":"计算机软件开发、系统集成、数据处理服务,7372","IS_SIGNAXQ":"0","MERGER_ID":"","MERGER_NAME":"","MERGER_PH":"","NOT_THROW_REASON":"","PHONE":"1378372","THIRD_NO":"85735017372U03H","sign":"nxz/UodhiAIPrBkoc3QWGeFMe6YjNrFiwtrjCZ9Dp1gtWMZs9fAOk+IwrVReSDS+SIW44UU/5/VX6PmTfIooXghiYx40zhPwbMDEmDWkSZ0SW1h9VzE+uZfi8gMJGy35NYQvl9O0ShYVBw2hnEUyD9JGd+TlGOHsZ6eRgYXlDguepceN9JV4OuMKM7jDP/wFUNuB292S0rM1MtolJmjrfNTgvxwTvRu1ykz+L/QLpM5N0PJnGmpPOkV0ij4/UALGArH+yV2YOgPekzFbP0WZJyY4LI/fSVPN8/Qk7W0wu5dzsVAnRNWNyAq4kAECRzABOZRlrKVJLeimwL2PmKr7Rw=="}
ACCOUNT_NAME=王玉茹&ACCOUNT_NO=6215699120&AGE_CUST_ID=61000000103774&AGE_NAME=郑秀华收单01一级&AUTH_DATE=2025-11-08 17:07:10&AUTH_RESULT=00&AUTH_TYPE=0&BANK_NAME=BOC&BUS_NAME=福建合码通信息服务有限责任公司&CUST_ID=60000001056036&CUST_TYPE=1&IND_TYPE=计算机软件开发、系统集成、数据处理服务,7372&IS_SIGNAXQ=0&MERGER_ID=&MERGER_NAME=&MERGER_PH=&NOT_THROW_REASON=&PHONE=1378372&THIRD_NO=85735017372U03H
94af9639c04c9343d1f8627950baece652274722c4377f62e201e73c7e6fef67
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.ArrayUtils;
import sun.misc.BASE64Decoder;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.TreeMap;
/**
* 公钥解签
*/
@Log4j2
public class RUtil {
/**
* 公钥解密过程
*
* @param key 公钥
* @param data 密文数据
* @return 明文
* @throws Exception 解密过程中的异常信息
*/
public static String decrypt(String key, String data) throws Exception {
if (key == null) {
throw new Exception("解密公钥为空, 请设置");
}
PublicKey publicKey = getPublicKey(key);
byte[] cipherData = Base64Util.decode(data);
Cipher cipher = null;
try {
// 使用默认RSA
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] buf = (byte[]) null;
for (int i = 0; i < cipherData.length; i += 256) {
byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(cipherData, i, i + 256));
if(buf == null) {
buf = doFinal;
} else {
buf = addBytes(buf,doFinal);
}
}
return new String(buf);
} catch (NoSuchAlgorithmException e) {
throw new Exception("无此解密算法");
} catch (NoSuchPaddingException e) {
e.printStackTrace();
return null;
} catch (InvalidKeyException e) {
throw new Exception("解密公钥非法,请检查");
} catch (IllegalBlockSizeException e) {
throw new Exception("密文长度非法");
} catch (BadPaddingException e) {
throw new Exception("密文数据已损坏");
}
}
/**
* 数组拼接
* @param data1 数组1
* @param data2 数组2
* @return
*/
public static byte[] addBytes(byte[] data1, byte[] data2) {
byte[] data3 = new byte[data1.length + data2.length];
System.arraycopy(data1, 0, data3, 0, data1.length);
System.arraycopy(data2, 0, data3, data1.length, data2.length);
return data3;
}
/**
* 验证sign
* plainText 返回数据报文
* publicKey 公钥
* @return
*/
public static boolean checkSign(String plainText,String publicKey) throws Exception {
TreeMap<String ,Object> map = JSONObject.parseObject(plainText, new TypeReference<TreeMap<String, Object>>(){});
System.out.println(JSONObject.toJSONString(map));
StringBuilder sb = new StringBuilder();
String sign = "";
for (String key : map.keySet()){
if("sign".equals(key)){
sign =(String) map.get(key);
continue;
}
sb.append(key).append("=").append(map.get(key)).append("&");
}
String res = sb.substring(0,sb.lastIndexOf("&"));
log.info("拼接字符串:"+res);
String sha256 = SHA256.getSHA256(res);
log.info("拼接串的SHA256:"+sha256);
String decodeSha256 = decrypt(publicKey,sign);
log.info("sign解密的SHA256:"+decodeSha256);
return sha256.equals(decodeSha256);
}
/**
* 得到公钥
*
* @param key 密钥字符串(经过base64编码)
* @throws Exception
*/
public static PublicKey getPublicKey(String key) throws Exception {
byte[] keyBytes;
keyBytes = new BASE64Decoder().decodeBuffer(key);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
}{
"rspCod": "000000",
"rspMsg": "success"
}