数据+密钥+加密密码-用java,jdk进行相应算法的加密解密实现
1,randomkey 加密/解密密码 随机定义,加密传给解密时用
2,RSA 私钥(解密)/公钥(加密) 事先给好
3,sign生成逻辑一样
私钥用来解密key,key用来解密数据
加密:
加密公钥+加密密码
key 随机数
publicKey 密钥
encryptkey = RSAUtils.encrypt(key, publicKey); 先对随机数加密(加密或解密密码)(公钥用来加密key)
aesContent= AESUtils.encrypt(contentStr,key); 再用随机数对内容加密,两次加密用不同的方法 相当于密码和内容都加密传输 key用来加密数据
解密:
解密私钥+加密密码
encryptKey 加密时的随机数
houbankPrivateKey 解密私钥
String deContent = AESUtils.decrypt(encryptContent, RSAUtils.decrypt(encryptKey, houbankPrivateKey)); 私钥用来解密key,key用来解密数据
数据+密钥用java,jdk进行相应算法的加密解密实现
示例:
==========加密
@Test public void withholdresult() { String aa="{\"type\":4,\"params\":{\"orderNo\": \"A000000001\", \"totalAmount\": 100000,\"withholdStatus\": 3, \"statusDesc\": \"代扣成功\", \"withholdDealTime\": 13410294851}}"; JSONObject body = JSONObject.parseObject(aa); body.get("type"); JSONObject bb =(JSONObject)body.get("params"); bb.get("orderNo"); Map<String, Object> content = Maps.newHashMap(); content.put("reqNo", "N2018072417502134562855"); content.put("name", "张三"); content.put("idNo", "410628201106126666"); content.put("cardNo", "6218853020010251"); content.put("phone", "15229069293"); content.put("status", "1"); String contentStr = aa;//JSON.toJSONString(content); // String aesKey = "e5dT7Y811x905884"; // String aesContent = AESAndMD5Util.encrypt(contentStr, aesKey); String aesContent=""; // String key = "bankApi"; String key = "3848907749222967"; String encryptkey = ""; try{ encryptkey = RSAUtils.encrypt(key, publicKey); aesContent= AESUtils.encrypt(contentStr,key); }catch (Exception e){ } Map<String, Object> params = Maps.newHashMap(); params.put("source", "HB20180515182115"); // 商户号 params.put("version", "1.0");// 协议版本 params.put("method", "borrow.account.withdrawals.notice");// 方法名 params.put("timestamp", "2018-06-05 17:40:52");// 时间戳 params.put("content", aesContent); params.put("key", encryptkey); String md5Key = "5635i0vBjcR707L28p7283ANzcJ951ew099Xz2uf012N"; String sign = AESAndMD5Util.md5(params, md5Key); params.put("sign", sign); String url = "http://192.168.18.51:8010/bank-api/openapi/notify";//"http://192.168.18.51:8010/bank-api/openapi/notify";//"http://localhost:8081/bank-api/openapi/notify";"//"http://192.168.18.51:8010/bank-api/openapi/notifywithholdresult"; String result = HttpClientUtil.httpJsonPost(url, JSON.toJSONString(params)); System.out.println(result); }
======================解密
private JSONObject notifywithholdresult(@RequestBody JSONObject response) throws Exception { JSONObject jsonObject = new JSONObject(); try { LOGGER.info("随手记代扣结果回调参数加密前:{}", response); String encryptContent = response.getString("content");// 这个哪里来???? String encryptKey = response.getString("key"); if (StringUtils.isNotBlank(encryptContent) && StringUtils.isNotBlank(encryptKey)) { String deContent = AESUtils.decrypt(encryptContent, RSAUtils.decrypt(encryptKey, houbankPrivateKey)); JSONObject body = JSONObject.parseObject(deContent); boolean status=false; Integer type= Integer.valueOf(body.get("type")+""); if(type==4){ status = suisjAccountService.notifywithholdresult(deContent); LOGGER.info("随手记代扣结果回调参数加密后:{}", deContent); } if (status) { jsonObject.put("returnCode", CodeEnum.CODE_000000.getCode()); jsonObject.put("detailMessage", CodeEnum.CODE_000000.getMsg()); } else { jsonObject.put("returnCode", CodeEnum.CODE_0001.getCode()); jsonObject.put("detailMessage", CodeEnum.CODE_0001.getMsg()); } } } catch (Exception e) { LOGGER.error("随手记代扣结果回调异常", e); jsonObject.put("result", false); } return jsonObject; }