md5算法

第一种
import org.springframework.util.DigestUtils;
public class StringUtilTest {  
  
    static final String TARGET = "changeme";      
      
    /*  
     * 不可逆算法  MD5  
     */    
    @Test    
    public void Md5()    
    {    
        String str = DigestUtils.md5DigestAsHex(TARGET.getBytes());    
        System.out.println("md5Hex:     "+str);    
    }    
}

结果:

md5Hex:     4cb9c8a8048fd02294477fcb1a41191a

第二种 

import java.security.MessageDigest;

@Test  
public void test()   
{  
    try   
    {  
        String password = "12345psw";  
          
        //MD5表示加密算法,可以选择其他参数,如SHA-1等  
        MessageDigest digest = MessageDigest.getInstance("MD5");  
        //先调用update,再调动digest  
        digest.update(password.getBytes());  
        byte[] byteResult = digest.digest();  
          
        //因为加密完为字节数组,需要转化为字符串  
        String result = convertbyte2String(byteResult);  
          
        System.out.println(result);  
    }  
    catch (NoSuchAlgorithmException e)   
    {  
        e.printStackTrace();  
    }  
      
}  
  
//将字节数组转化为字符串  
private String convertbyte2String(byte[] byteResult)   
{  
    char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' };  
      
    //4位代表一个16进制,所以长度需要变为原来2倍  
    char[] result = new char[byteResult.length*2];  
      
    int index = 0;  
    for(byte b:byteResult)  
    {  
        //先转换高4位  
        result[index++] = hexDigits[(b>>>4)& 0xf];  
        result[index++] = hexDigits[b& 0xf];  
    }  
    return new String(result);  
}  

第三种commons-codec

public class UtilTest {  
  
    static final String TARGET = "中文123abc,./";      
      
    /*  
     * 不可逆算法  MD5  
     */    
    @Test    
    public void Md5()    
    {    
        String str = DigestUtils.md5Hex(TARGET);    
        System.out.println("md5Hex:     "+str);    
    }    
    /*  
     * 不可逆算法  SHA1  
     */    
    @Test    
    public void Sha1()    
    {    
        String str = DigestUtils.shaHex(TARGET);    
        print("shaHex:     "+str);    
        str = DigestUtils.sha256Hex(TARGET);    
        print("sha256Hex:  "+str);    
        str = DigestUtils.sha384Hex(TARGET);    
        print("sha384Hex:  "+str);    
        str = DigestUtils.sha512Hex(TARGET);    
        print("sha512Hex:  "+str);    
    }    
        
       
     /*  
      * 可逆算法  BASE64  
      */  
         
    @Test    
    public void Base64()    
    {    
        //加密    
        byte[] b = Base64.encodeBase64(TARGET.getBytes(), true);    
        String str = new String(b);    
        print("BASE64:     "+str);    
            
        //解密    
        byte[] b1 = Base64.decodeBase64(str);    
        print("解密之后内容为:  "+new String(b1));    
    }    
    public void print(Object obj)    
    {    
        System.out.println(obj);    
    }    
} 

结果:

原始字符串为:中文123abc,./
MD5加密为:9ba58cffe5815ea9f365b86a3f473ad5
Sha1加密为:ec2f9a1f8f601dd5e6889d65204a7a998a0aa389
Base64加密为:5Lit5paHMTIzYWJjLC4v
Base64解密为:中文123abc,./

 

例子:

    public static void main(String[] args) {
        String str = DigestUtils.md5DigestAsHex("123qwe".getBytes());
        System.out.println("str:     "+str);
        MessageDigest md = null;
        String str1 = "";
        try {
            md = MessageDigest.getInstance("MD5");
            str1 = toHex(md.digest("123qwe".getBytes("UTF-8")));
            System.out.println("str1:    "+str1);
        }catch(Exception e){
            e.printStackTrace();
        }
}

    public static String toHex(byte input[]){
        StringBuffer output = new StringBuffer(input.length * 2);
        for(int i = 0; i < input.length; i++){
            int current = input[i] & 0xff;
            if(current < 16)
                output.append("0");
            output.append(Integer.toString(current, 16));
        }
        return output.toString();
    }

结果:

str: 46f94c8de14fb36680850768ff1b7f2a
str1: 46f94c8de14fb36680850768ff1b7f2a

 

posted @ 2019-03-08 18:18  盟约  阅读(268)  评论(0编辑  收藏  举报