最初的自定义简单数据防篡改

作者: Dora404 | 来源:发表于2016-07-19 13:25 被阅读685次

由于公司要求接口安全升级,从自定义防篡改数据MD5加密验证,到使用RSA加密。

原始的MD5防数据篡改的方式:

将所有参数拼接起来,然后在某一字节后加入自定义的字串(混淆码),然后进行MD5加密生成一个str_md5_client值,客户端将加密后的str_md5_client作为一个参数传给后台,后台将其他参数也进行相同的方式拼接混淆加密,生成str_md5_service,将str_md5_client和str_md5_service进行equals比较。true时进行业务操作,false时数据被篡改。

    /**
     * 生成混淆码 参数拼接,在第二字节加入混淆码,进行MD5加密(可在加密后再加入字节排序)
     * 
     * @author zhaofh 2016-07-06
     * 
     * @param 参数数组
     * @return str_md5
     */
    public static String getAppKey(Object[] args) {
        try {
            StringBuffer sb = new StringBuffer();
            String Key = "123456";// 混淆码
            String str = "";
            if (args.length <= 0) {
                sb.append(Key);
                str = sb.toString();
                System.out.println(str);
            } else {
                for (int i = 0; i < args.length; i++) {
                    sb.append(String.valueOf(args[i]));
                }
                str = sb.toString();
                if (str.length() <= 2) {// 第二个字节后加入混淆码
                    str = str + Key;
                } else {
                    str = str.substring(0, 2) + Key + str.substring(2);
                }
            }
            System.out.println(str);
            String md5Key = Encryption.Md5(URLEncoder.encode(str, "UTF-8")
                    .replace("+", "%20"), 32);// 兼容IOS将中文做转码
            System.out.println(md5Key);
            return md5Key;
        } catch (UnsupportedEncodingException e) {
            AppLogger.loggerError(e);
        }
        return "";
    }

MD5方法

      /**
     *MD5加密 
     * @author zhaofh 2016-07-06
     * 
     * @param plainText 明文
         * @param length 加密长度 16  、32
     * @return str_md5
     */
    public static String Md5(String plainText,int length ) { 
        String result = "";
        Logger logger = Logger.getLogger(Encryption.class);
        try { 
            MessageDigest md = MessageDigest.getInstance("MD5"); 
            md.update(plainText.getBytes()); 
            byte b[] = md.digest(); 
            int i; 
            StringBuffer buf = new StringBuffer(""); 
            for (int offset = 0; offset < b.length; offset++) { 
            i = b[offset]; 
            if(i<0) i+= 256; 
            if(i<16) 
            buf.append("0"); 
            buf.append(Integer.toHexString(i)); 
            } 
            if(length==32) {
                //32位加密
                result = buf.toString();
            }else if(length==16) {
                //16位加密
                result = buf.toString().substring(8, 24);
            }else {
                return "";
            }
        } catch (NoSuchAlgorithmException e) { 
            AppLogger.loggerError(e);
        } 
        return result;
    } 

相关文章

  • 最初的自定义简单数据防篡改

    由于公司要求接口安全升级,从自定义防篡改数据MD5加密验证,到使用RSA加密。 原始的MD5防数据篡改的方式: 将...

  • 2018-06-13浅谈大数据防篡改机制与区块链防篡改技术

    大数据的传统的防篡改机制 一般的防篡改机制是基于加密算法的。选择密文安全(chosen ciphertext se...

  • TreeMap 踩坑

    背景 A系统与第三方系统(C)进行数据对接,需要解决数据防篡改问题,因此一个最为简单的解决方案就是,将要传输的数据...

  • 表单提交数据防篡改

    概述 有些情况数据需要更高的安全性,需要避免第三方工具抓包进行对数据修改,因此在表单提交/ajax提交数据时需要数...

  • 融媒体数据的防篡改

    传统的媒体数据保护是依靠人事制度和防火墙,人事工作有出错的可能,防火墙有被攻破的可能。在区块链技术出现之前,海量媒...

  • js的sm-crypto和 java的bcprov-jdk16-

    前言 1. 需求: Vue 网页端实现数据数据安全,关键数据加密,防篡改等 Apk 手机端实现数据安全,关键数据加...

  • API防篡改

    在设计API时,一直在想,如果被抓包了,修改数据,重新发送请求怎么办,今天脑补了一下。 重放攻击 我们在设计接口的...

  • Flutter 防篡改

    Flutter打出的包,目前看来不需要做额外的加固处理,因为都是so文件。我们需要做的,是防止他人在so包外层恶意...

  • 数据库订单金额防篡改

  • 解释区块链

    区块链很简单,就是历史记录不能篡改的数据库技术

网友评论

    本文标题:最初的自定义简单数据防篡改

    本文链接:https://www.haomeiwen.com/subject/ndpmjttx.html