加密解密思路

 

数据+密钥+加密密码-用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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值