版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/zyzn1425077119/article/details/79401099

参考:TS_A1的博客,网址:http://blog.csdn.net/typa01_kk/article/details/49152173

1 问题说明

sign签证的可以解决,参数被修改。让服务器端和客户端都有相同的生成sign的方法,只有前端和后端生成的sign相同,则说明,没有被修改。

如参数为:

{"option":{"reqtime":xxx},"content":{"password":"222","username":"111"}},之后通过对该字符串签证,如对该串进行MD5加密,如MD5 64位加密,生成sign。放到

{"option":{"reqtime":xxx},"content":{"password":"222","username":"111"},"sign":"XXX生成的加密"}

下面实例如果jdk为8以下,则会出现sun.misc.BASE64Encoder包,查找不到,

因为sun.misc.BASE64Encoder/BASE64Decoder类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用,在eclipse中需要项目->Build Path->JRE System Library,第一行 Edit后,添加允许 Accessible输入:**,即可。

2  实例

MD5有16、32、64位加密。

package com.util;

import java.io.UnsupportedEncodingException;  
import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
 
import sun.misc.BASE64Encoder;  
 
/**
 * MD5 encrypt algorithm. <br>
 * Encryption irreversible.
 * @author Tony_tian
 * @version 0.0.1 <br> 2015-10-15 12:57:12
 * */  
public final class MD5 {  
      
    /**Determine encrypt algorithm MD5*/  
    private static final String ALGORITHM_MD5 = "MD5";  
    /**UTF-8 Encoding*/  
    private static final String UTF_8 = "UTF-8";  
      
    /**
     * MD5 16bit Encrypt Methods.
     * @param readyEncryptStr ready encrypt string
     * @return String encrypt result string
     * @throws NoSuchAlgorithmException  
     * */  
    public static final String MD5_16bit(String readyEncryptStr) throws NoSuchAlgorithmException{  
        if(readyEncryptStr != null){  
            return MD5.MD5_32bit(readyEncryptStr).substring(8, 24);  
        }else{  
            return null;  
        }  
    }  
      
    /**
     * MD5 32bit Encrypt Methods.
     * @param readyEncryptStr ready encrypt string
     * @return String encrypt result string
     * @throws NoSuchAlgorithmException  
     * */  
    public static final String MD5_32bit(String readyEncryptStr) throws NoSuchAlgorithmException{  
        if(readyEncryptStr != null){  
            //Get MD5 digest algorithm's MessageDigest's instance.  
            MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);  
            //Use specified byte update digest.  
            md.update(readyEncryptStr.getBytes());  
            //Get cipher text  
            byte [] b = md.digest();  
            //The cipher text converted to hexadecimal string  
            StringBuilder su = new StringBuilder();  
            //byte array switch hexadecimal number.  
            for(int offset = 0,bLen = b.length; offset < bLen; offset++){  
                String haxHex = Integer.toHexString(b[offset] & 0xFF);  
                if(haxHex.length() < 2){  
                    su.append("0");  
                }  
                su.append(haxHex);  
            }  
            return su.toString();  
        }else{  
            return null;  
        }  
    }  
      
    /**
     * MD5 32bit Encrypt Methods.
     * @param readyEncryptStr ready encrypt string
     * @return String encrypt result string
     * @throws NoSuchAlgorithmException  
     * */  
    public static final String MD5_32bit1(String readyEncryptStr) throws NoSuchAlgorithmException{  
        if(readyEncryptStr != null){  
            //The cipher text converted to hexadecimal string  
            StringBuilder su = new StringBuilder();  
            //Get MD5 digest algorithm's MessageDigest's instance.  
            MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);  
            byte [] b = md.digest(readyEncryptStr.getBytes());  
            int temp = 0;  
            //byte array switch hexadecimal number.  
            for(int offset = 0,bLen = b.length; offset < bLen; offset++){  
                temp = b[offset];  
                if(temp < 0){  
                    temp += 256;  
                }  
                int d1 = temp / 16;  
                int d2 = temp % 16;  
                su.append(Integer.toHexString(d1) + Integer.toHexString(d2)) ;  
            }  
            return su.toString();  
        }else{  
            return null;  
        }  
    }  
      
    /**
     * MD5 32bit Encrypt Methods.
     * @param readyEncryptStr ready encrypt string
     * @return String encrypt result string
     * @throws NoSuchAlgorithmException  
     * */  
    public static final String MD5_32bit2(String readyEncryptStr) throws NoSuchAlgorithmException{  
        if(readyEncryptStr != null){  
            //The cipher text converted to hexadecimal string  
            StringBuilder su = new StringBuilder();  
            //Get MD5 digest algorithm's MessageDigest's instance.  
            MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);  
            //Use specified byte update digest.  
            md.update(readyEncryptStr.getBytes());  
            byte [] b = md.digest();  
            int temp = 0;  
            //byte array switch hexadecimal number.  
            for(int offset = 0,bLen = b.length; offset < bLen; offset++){  
                temp = b[offset];  
                if(temp < 0){  
                    temp += 256;  
                }  
                if(temp < 16){  
                    su.append("0");  
                }  
                su.append(Integer.toHexString(temp));  
            }  
            return su.toString();  
        }else{  
            return null;  
        }  
    }  
      
    /**
     * MD5 16bit Encrypt Methods.
     * @param readyEncryptStr ready encrypt string
     * @return String encrypt result string
     * @throws NoSuchAlgorithmException  
     * @throws UnsupportedEncodingException  
     * */  
    public static final String MD5_64bit(String readyEncryptStr) throws NoSuchAlgorithmException, UnsupportedEncodingException{  
        MessageDigest md = MessageDigest.getInstance(ALGORITHM_MD5);  
        BASE64Encoder base64Encoder = new BASE64Encoder();  
        return base64Encoder.encode(md.digest(readyEncryptStr.getBytes(UTF_8)));  
    }  
      
    public static void main(String[] args) {  
        try {  
            String md516 = MD5.MD5_16bit("kaka123");  
            System.out.println("16bit-md5:\n" + md516); //  
            String md532 = MD5.MD5_32bit("kaka123");  
            String md5321 = MD5.MD5_32bit1("kaka123");  
            String md5322 = MD5.MD5_32bit2("kaka123");  
            System.out.println("32bit-md5:"); //5d052f1e32af4e4ac2544a5fc2a9b992  
            System.out.println("1:  " + md532);  
            System.out.println("2:  " + md5321);  
            System.out.println("3:  " + md5322);  
            String md564 = MD5.MD5_64bit("kaka123");  
            System.out.println("64bit-md5:\n" + md564); // 
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

MD5算法与sign签证相关推荐

  1. 漫画:什么是MD5算法

    转载自 玻璃猫 程序员小灰 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按照规则,把参数名和 ...

  2. 漫画:什么是MD5算法?

    来自:梦见(微信号:dreamsee321) 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户.当然,实际应用中的参数肯定比这多得多,这里只是做了简化. 2.按 ...

  3. 用js将待签名数据以UTF-8的格式转字节流,对字节流进行MD5算法得到的签名字节流,再经过Base64转换为字符串

    最近碰到一个接口是要数字签名的,给的示范是用java写的.一开始没明白直接用了对字节流进行了md5加密,后面在java里面把这段代码运行了一遍才发现md5加密后仍然是字节流,然后在md5中找到了这个 ...

  4. [js] MD5算法

    js版md5算法: /** * * MD5 (Message-Digest Algorithm) * http://www.webtoolkit.info/ * **/var MD5 = functi ...

  5. MD5算法之C#程序

    MD5算法比较特别,最适合用汇编语言来写,好多高级语言对之无能无力或效率极低. 比如我最开始尝试用Python和Euphoria编写,发现不太容易.相比而言,C#作为C家簇 中新兴的一门.net语言, ...

  6. T-SQL MD5算法实现

    转自:http://www.cnblogs.com/yeagen/archive/2009/02/08/1386374.html 函数代码: /**************************** ...

  7. MD5算法了解(JAVA实现)

    MD5算法:尽管已经被破解,但任然广泛应用于各个领域中 如文件校验:当我们下载文件时为了保证文件的安全性,我们能够在其站点上找到相应的md5值进行校验,假设md5值不一致,也就是说文件被人动过(一般都 ...

  8. C#的加密解密算法,包括Silverlight的MD5算法

    C#的加密解密算法,包括Silverlight的MD5算法 下面是一段加密解密工具类,其中的WinFormMD5Encrypt方法可以使得Winform和WebForm下的MD5加密结果一致,默认他们 ...

  9. java md5包_JAVA中有没有提供MD5算法的包啊?

    拉莫斯之舞 有,在java.security包的MessageDigest类.例子:import java.security.MessageDigest;public class Test2 {pub ...

最新文章

  1. 本地连接虚拟机数据库或远程数据库
  2. php isoptional,entity-framework – 实体框架7 Fluent API无法识别IsOptional()
  3. 关于label在ie8,9下的兼容问题???
  4. 【洛谷5284】[十二省联考2019] 字符串问题(后缀树优化建边)
  5. Android游戏开发
  6. conda pip 安装NumPy速度不佳解决方案
  7. Fortran95学习总结
  8. 自制光猫超级密码解密工具
  9. 谈电子信息系统机房设计规范——访中国电子工程设计院副总工程师钟景华
  10. JAVA钓鱼游戏_java如何实现纸牌游戏之小猫钓鱼算法
  11. 查看 Chrome 下载的文件的真实下载地址
  12. 人工智能是否会改写商业规则
  13. linux生成.so库,调用.so库函数
  14. 数据结构笔记_34 赫夫曼编码压缩、解压文件
  15. 还在找icon吗,这里有你想要的一切!!!
  16. 关于UITableView的Cell复用谈谈我的一些心得滴水穿石
  17. Paypal收款扣手续费计算方法,终于遇到了次
  18. Kaggle添加竞赛数据集到自己的kaggle notebook
  19. 找出汉字的拼音,既有各汉字的首字母和所有汉字的全拼
  20. 5款相见恨晚的在线设计工具,原型海报流程图轻松搞定

热门文章

  1. Android项目:基于Android家庭理财系统手机软件设计(计算机毕业设计)
  2. Linux命令小抄(适合打印)
  3. 华南理工大学计算机专业博导老师,华南理工大学2017年计算机科学与工程学院博士招生目录.pdf...
  4. 终于找到blender渲染总是崩溃的原因了
  5. 博客园定制CSS代码
  6. Chris and Magic Square
  7. ➽Swift-02字符串与字符
  8. R语言【简单相关系数、散布矩阵图和偏相关系数、典型相关分析】
  9. 敏捷项目管理实战之进度管理
  10. Nginx-域名跳转到另外一个域名