qq_31520675
qq_31520675
采纳率100%
2017-01-13 04:55 阅读 1.3k
已采纳

servlet接口中编码问题,求大神进来解决一下

100

图片说明我在servlet中对一串字符串进行加密,但是编码老是乱码,然后我进行了UTF-8处理图片说明就是这种,但是问题处理的不全面,出现的问题是经常有个别字符乱码图片说明求哪位大神帮忙解决一下

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

9条回答 默认 最新

  • 已采纳
    strongerzhi Kolamu 2017-01-13 05:13

    在传输时对参数进行URL编码或者使用加密方式操作

    点赞 评论 复制链接分享
  • u011606457 _1_1_7_ 2017-01-13 05:10

    像是解密结果少了尾部的几个字节导致的,检查一下你的加解密算法

    点赞 评论 复制链接分享
  • welan123123 奔跑的小鱼儿 2017-01-13 05:27

    utf-8处理语句换一下
    String datastr4 = new String(datastr3.getBytes("ISO-8859-1"), "utf-8");

    点赞 评论 复制链接分享
  • qq_31520675 qq_31520675 2017-01-13 06:01
                        Map<String,String> map = new HashMap<String, String>();
                        map.put("mhtOrderNo",mhtOrderNo);
                        map.put("mhtReqTime",mhtReqTime);
                        map.put("payeeAccType",payeeAccType);
                        map.put("payeeName","祝在哪");
                        map.put("payeeCardNo",payeeCardNo);
                        map.put("mhtOrderAmt",mhtOrderAmt);
                        map.put("agentPayMemo",agentPayMemo);
                        map.put("payeeCardUnionNo",payeeCardUnionNo);
                        srt1 = this.base("appId=" +  Config.appId);
                        map = MapUtils.mapRemoveNull(map);
                        String dataStr = FormDateReportConvertor.postFormLinkReport(map);
                        //String datastr4 = new String(datastr3.getBytes("ISO-8859-1"), "utf-8");
                        String dataStr2=new String(dataStr.getBytes("utf-8"), "GBK");
                        srt2 = EncryDecryUtils.encryptFromDESBase64(DSEKey.trim(), dataStr2.trim());
                        srt3 = this.MD5Message(dataStr, MD5Key);
                        srt3 = this.base(srt3);
                        message1.append(srt1);  
                        message1.append("|");
                        message1.append(srt2); //拼接返回报文
                        message1.append("|");
                        message1.append(srt3);
                        return_mess.append(message1.toString());
                        Report=return_mess.toString().trim();
                        xml = HttpPost.http("https://dby.ipaynow.cn/agentpay/agentPay",Report);
    
    点赞 评论 复制链接分享
  • welan123123 奔跑的小鱼儿 2017-01-13 06:13

    你参考一下这个

        String toRSAStr = FormDateReportConvertor.postFormLinkReport(requestMap);
                message1 = EncryDecryUtils.base64Encrypt(message1);//base64(appId=xxx)
                String message2 = toRSAStr;
                message2 = EncryDecryUtils.encryptFromDESBase64(des3Key,message2);// base64(3DES(报文原文)
                String message3 = EncryDecryUtils.base64Encrypt(EncryDecryUtils.md5(toRSAStr.toString().trim() +"&"+ md5Key));//base64(MD5(报文原文+&+ md5Key))
                String message = message1+"|"+message2+"|"+message3;
    
                System.out.println("==================");                   
                System.out.println(message2);
                System.out.println("==================");
    
    点赞 评论 复制链接分享
  • welan123123 奔跑的小鱼儿 2017-01-13 06:21

    解密方法

     //对返回的数据 先用base64解密 再用3Des解密
        public static String decryptFromBase64DES(String key,String data) {
            String result = null;
            byte[] keyByte = key.getBytes();
            byte[] base64Byte = EncryDecryUtils.getFromBase64byte(data);
            try {
                result =  new String(DESUtils.Union3DesDecrypt(keyByte,base64Byte),"utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
    点赞 评论 复制链接分享
  • xiaoleizhanghahaha 不 死彡邪神 2017-01-13 07:07

    加密算法,是不是你们公司自己的一套算法。

    点赞 评论 复制链接分享
  • qq_31520675 qq_31520675 2017-01-13 07:34
         public static String postFormLinkReport(Map<String,String> dataMap){
    
            StringBuilder reportBuilder = new StringBuilder();
    
            List<String> keyList = new ArrayList<String>(dataMap.keySet());
            Collections.sort(keyList);
    
            for(String key : keyList){
                reportBuilder.append(key+"="+dataMap.get(key)+"&");
            }
    
            reportBuilder.deleteCharAt(reportBuilder.lastIndexOf("&"));
    
            return reportBuilder.toString();
        }
    
    点赞 评论 复制链接分享
  • qq_31520675 qq_31520675 2017-01-13 07:45

    这段代码是处理属性值的,从解密好的字符串中将代码分割,先以&分割再以=号分割

                    String[] str4 = srt.split("\\&");
                        for (int i = 0; i < str4.length; i++) {
                             if("mhtOrderNo".equals(str4[i].toString().split("\\=")[0].toString()))
                             {
                                 mhtOrderNo=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                             }
                             if("mhtReqTime".equals(str4[i].toString().split("\\=")[0].toString()))
                             {
                                 mhtReqTime=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                             }
                             if("payeeAccType".equals(str4[i].toString().split("\\=")[0].toString()))
                             {
                                 payeeAccType=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                             }
                             if("payeeName".equals(str4[i].toString().split("\\=")[0].toString()))
                             {
                                 payeeName=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();
    
                             }
                             if("payeeCardNo".equals(str4[i].toString().split("\\=")[0].toString()))
                             {
                                 payeeCardNo=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                             }
                             if("payeeCardUnionNo".equals(str4[i].toString().split("\\=")[0].toString()))
                             {
                                 payeeCardUnionNo=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                             }
                             if("mhtOrderAmt".equals(str4[i].toString().split("\\=")[0].toString()))
                             {
                                 mhtOrderAmt=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                             }
                             if("agentPayMemo".equals(str4[i].toString().split("\\=")[0].toString()))
                             {
                                 agentPayMemo=str4[i].toString().split("\\=")[1].toString().replaceAll("\0", "").trim();  
                             }
    
    点赞 评论 复制链接分享

相关推荐