MD5算法与sign签证

参考: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();  
        }  
    }  






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值