精华内容
下载资源
问答
  • 主要介绍了java中常用工具类之字符串操作类和MD5加密解密类,需要的朋友可以参考下
  • javamd5加密工具类

    2019-02-18 10:00:00
    private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", ... String result = MD5Util.MD5Encode("密码", "UTF-8"); System.out.println("result="+result); }
  • MD5解密工具類

    2018-05-05 15:39:34
    MD5解密MD5解密MD5解密 MD5解密 MD5解密
  • java MD5加密工具类

    2015-01-30 16:20:08
    java md5加密示例,包括页面,servlet和加密工具类
  • javamd5加密工具类

    2018-05-31 15:36:45
    1.解压; 2.将该jar包导入到项目中; 3.加密 DigestUtils.md5Hex("Marydon")
  • MD5解密加密工具类

    2021-03-09 08:22:15
    import java.security.MessageDigest;public class MD5Util {/*** Title: MD5加密 生成32位md5码* Description: TestDemo* @author lu* @date 2016年6月23日 下午2:36:07* @param inStr* @return 返回32位m...

    package com.fastech.ws;

    import java.security.MessageDigest;

    public class MD5Util {

    /**

    * Title: MD5加密 生成32位md5码

    * Description: TestDemo

    * @author lu

    * @date 2016年6月23日 下午2:36:07

    * @param inStr

    * @return 返回32位md5码

    * @throws Exception

    */

    public static String md5Encode(String inStr) throws Exception {

    MessageDigest md5 = null;

    try {

    md5 = MessageDigest.getInstance("MD5");

    } catch (Exception e) {

    System.out.println(e.toString());

    e.printStackTrace();

    return "";

    }

    byte[] byteArray = inStr.getBytes("UTF-8");

    byte[] md5Bytes = md5.digest(byteArray);

    StringBuffer hexValue = new StringBuffer();

    for (int i = 0; i < md5Bytes.length; i++) {

    int val = ((int) md5Bytes[i]) & 0xff;

    if (val < 16) {

    hexValue.append("0");

    }

    hexValue.append(Integer.toHexString(val));

    }

    return hexValue.toString();

    }

    /**

    * Title: MD5加密

    * Description: TestDemo

    * @author lu

    * @date 2016年6月23日 下午2:43:31

    * @param inStr

    * @return

    */

    public static String string2MD5(String inStr) {

    MessageDigest md5 = null;

    try {

    md5 = MessageDigest.getInstance("MD5");

    } catch (Exception e) {

    System.out.println(e.toString());

    e.printStackTrace();

    return "";

    }

    char[] charArray = inStr.toCharArray();

    byte[] byteArray = new byte[charArray.length];

    for (int i = 0; i < charArray.length; i++)

    byteArray[i] = (byte) charArray[i];

    byte[] md5Bytes = md5.digest(byteArray);

    StringBuffer hexValue = new StringBuffer();

    for (int i = 0; i < md5Bytes.length; i++) {

    int val = ((int) md5Bytes[i]) & 0xff;

    if (val < 16)

    hexValue.append("0");

    hexValue.append(Integer.toHexString(val));

    }

    return hexValue.toString();

    }

    /**

    * Title: 加密解密算法 执行一次加密,两次解密

    * Description: TestDemo

    * @author lu

    * @date 2016年6月23日 下午2:37:29

    * @param inStr

    * @return

    */

    public static String convertMD5(String inStr) {

    char[] a = inStr.toCharArray();

    for (int i = 0; i < a.length; i++) {

    a[i] = (char) (a[i] ^ 't');

    }

    String s = new String(a);

    return s;

    }

    public static String md5Decode(String str) {

    return convertMD5(convertMD5(str));

    }

    public static void main(String[] args) {

    String s = new String("123456");

    System.out.println(md5Decode("a6aeb3ffa55fc7d664406af9c3bd0f1b"));

    System.out.println("原始:" + s);

    System.out.println("MD5后:" + string2MD5(s));

    System.out.println("加密的:" + convertMD5(s));

    System.out.println("解密的:" + convertMD5(convertMD5(s)));

    }

    }

    展开全文
  • Java Md5加密工具类

    2021-04-07 19:17:21
    Java Md5加密工具类
  • java MD5完整加解密工具类

    千次阅读 2019-03-19 10:37:45
    #第一部分 package ... import java.io.ByteArrayOutputStream; public class Base64 { private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G'...
    #第一部分
    package com.yiban.rec.bill.parse.util;
    
    import java.io.ByteArrayOutputStream;
    
    public class Base64 {
    
        private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
                                                               'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
                                                               'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                                                               'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
                                                               'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
                                                               '8', '9', '+', '/' };
    
        private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
                                                               -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
                                                               -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1,
                                                               -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1,
                                                               -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
                                                               13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1,
                                                               -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
                                                               37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
                                                               -1, -1, -1, -1, -1 };
    
        private Base64() {}
    
        public static synchronized String encode(byte[] data) {
            int len = data.length;
            int i = 0;
            int b1, b2, b3;
            StringBuilder sb = new StringBuilder(len);
    
            while (i < len) {
                b1 = data[i++] & 0xff;
                if (i == len) {
                    sb.append(base64EncodeChars[b1 >>> 2]);
                    sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
                    sb.append("==");
                    break;
                }
                b2 = data[i++] & 0xff;
                if (i == len) {
                    sb.append(base64EncodeChars[b1 >>> 2]);
                    sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
                    sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
                    sb.append("=");
                    break;
                }
                b3 = data[i++] & 0xff;
                sb.append(base64EncodeChars[b1 >>> 2]);
                sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
                sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
                sb.append(base64EncodeChars[b3 & 0x3f]);
            }
            return sb.toString();
        }
    
        public static synchronized byte[] decode(String str) {
            byte[] data = str.getBytes();
            int len = data.length;
            ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
            int i = 0;
            int b1, b2, b3, b4;
    
            while (i < len) {
    
                /* b1 */
                do {
                    b1 = base64DecodeChars[data[i++]];
                } while (i < len && b1 == -1);
                if (b1 == -1) {
                    break;
                }
    
                /* b2 */
                do {
                    b2 = base64DecodeChars[data[i++]];
                } while (i < len && b2 == -1);
                if (b2 == -1) {
                    break;
                }
                buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4)));
    
                /* b3 */
                do {
                    b3 = data[i++];
                    if (b3 == 61) {
                        return buf.toByteArray();
                    }
                    b3 = base64DecodeChars[b3];
                } while (i < len && b3 == -1);
                if (b3 == -1) {
                    break;
                }
                buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
    
                /* b4 */
                do {
                    b4 = data[i++];
                    if (b4 == 61) {
                        return buf.toByteArray();
                    }
                    b4 = base64DecodeChars[b4];
                } while (i < len && b4 == -1);
                if (b4 == -1) {
                    break;
                }
                buf.write((int) (((b3 & 0x03) << 6) | b4));
            }
            return buf.toByteArray();
        }
    }
    
    
    
    #第二部分
    package com.yiban.rec.bill.parse.util;
    
    /**
     * @author su.jf
     */
    public class CodingUtil {
    
        public static byte[] base64Decode(String str) {
            return Base64.decode(str);
        }
    
        public static String base64Encode(byte[] data) {
            return Base64.encode(data);
        }
    
        private static final int BIT_SIZE   = 0x10;
        private static final int BIZ_ZERO   = 0X00;
    
        private static char[][]  charArrays = new char[256][];
    
        static {
            int v;
            char[] ds;
            String temp;
            for (int i = 0; i < charArrays.length; i++) {
                ds = new char[2];
                v = i & 0xFF;
                temp = Integer.toHexString(v);
                if (v < BIT_SIZE) {
                    ds[0] = '0';
                    ds[1] = temp.charAt(0);
                } else {
                    ds[0] = temp.charAt(0);
                    ds[1] = temp.charAt(1);
                }
                charArrays[i] = ds;
            }
        }
    
        public static String bytesToHexString(byte[] src) {
            return bytesToHexString(src, 0, src.length);
        }
        
        
        public static String bytesToHexString(byte[] src,int posction,int length) {
            HexAppender helper = new HexAppender(src.length * 2);
            if (src == null || src.length <= BIZ_ZERO) {
                return null;
            }
            int v;
            int lengthR = src.length > length ?length:src.length;
            char[] temp;
            for (int i = posction; i < lengthR; i++) {
                v = src[i] & 0xFF;
                temp = charArrays[v];
                helper.append(temp[0], temp[1]);
            }
            return helper.toString();
        }
    
        public static String bytesToHexStringSub(byte[] src, int length) {
           return bytesToHexString(src, 0, length);
        }
    
        
        public static String bytesToHexString(byte[] src, int startWith) {
        	return bytesToHexString(src, startWith, src.length);
        }
        
        /**
         * Convert hex string to byte[]
         * 
         * @param hexString the hex string
         * @return byte[]
         */
        public static byte[] hexStringToBytes(String hexString) {
            if ( hexString ==null) {
                return null;
            }
            int length = hexString.length() / 2;
            byte[] d = new byte[length];
            int pos;
            for (int i = 0; i < length; i++) {
                pos = i * 2;
                d[i] = (byte) (charToByte(hexString.charAt(pos)) << 4 | charToByte(hexString.charAt(pos + 1)));
            }
            return d;
        }
    
        /**
         * Convert char to byte
         * 
         * @param c char
         * @return byte
         */
        private static byte charToByte(char c) {
            return (byte) (c < 58 ? c - 48 : c < 71 ? c - 55 : c - 87);
        }
        
        
        private static final char[] DIS_256  = {'Ḁ','ḁ','Ḃ','ḃ','Ḅ','ḅ','Ḇ','ḇ','Ḉ','ḉ','Ḋ','ḋ','Ḍ','ḍ','Ḏ','ḏ','Ḑ','ḑ','Ḓ','ḓ','Ḕ','ḕ','Ḗ','ḗ','Ḙ','ḙ','Ḛ','ḛ','Ḝ','ḝ','Ḟ','ḟ','Ḡ','ḡ','Ḣ','ḣ','Ḥ','ḥ','Ḧ','ḧ','Ḩ','ḩ','Ḫ','ḫ','Ḭ','ḭ','Ḯ','ḯ','Ḱ','ḱ','Ḳ','ḳ','Ḵ','ḵ','Ḷ','ḷ','Ḹ','ḹ','Ḻ','ḻ','Ḽ','ḽ','Ḿ','ḿ','Ṁ','ṁ','Ṃ','ṃ','Ṅ','ṅ','Ṇ','ṇ','Ṉ','ṉ','Ṋ','ṋ','Ṍ','ṍ','Ṏ','ṏ','Ṑ','ṑ','Ṓ','ṓ','Ṕ','ṕ','Ṗ','ṗ','Ṙ','ṙ','Ṛ','ṛ','Ṝ','ṝ','Ṟ','ṟ','Ṡ','ṡ','Ṣ','ṣ','Ṥ','ṥ','Ṧ','ṧ','Ṩ','ṩ','Ṫ','ṫ','Ṭ','ṭ','Ṯ','ṯ','Ṱ','ṱ','Ṳ','ṳ','Ṵ','ṵ','Ṷ','ṷ','Ṹ','ṹ','Ṻ','ṻ','Ṽ','ṽ','Ṿ','ṿ',
        		'Ẁ','ẁ','Ẃ','ẃ','Ẅ','ẅ','Ẇ','ẇ','Ẉ','ẉ','Ẋ','ẋ','Ẍ','ẍ','Ẏ','ẏ','Ẑ','ẑ','Ẓ','ẓ','Ẕ','ẕ','ẖ','ẗ','ẘ','ẙ','ẚ','ẛ','ẜ','ẝ','ẞ','ẟ','Ạ','ạ','Ả','ả','Ấ','ấ','Ầ','ầ','Ẩ','ẩ','Ẫ','ẫ','Ậ','ậ','Ắ','ắ','Ằ','ằ','Ẳ','ẳ','Ẵ','ẵ','Ặ','ặ','Ẹ','ẹ','Ẻ','ẻ','Ẽ','ẽ','Ế','ế','Ề','ề','Ể','ể','Ễ','ễ','Ệ','ệ','Ỉ','ỉ','Ị','ị','Ọ','ọ','Ỏ','ỏ','Ố','ố','Ồ','ồ','Ổ','ổ','Ỗ','ỗ','Ộ','ộ','Ớ','ớ','Ờ','ờ','Ở','ở','Ỡ','ỡ','Ợ','ợ','Ụ','ụ','Ủ','ủ','Ứ','ứ','Ừ','ừ','Ử','ử','Ữ','ữ','Ự','ự','Ỳ','ỳ','Ỵ','ỵ','Ỷ','ỷ','Ỹ','ỹ','Ỻ','ỻ','Ỽ','ỽ','Ỿ','ỿ'};
        
        private static final int DIS_START = 'Ḁ';
        
        
        public static String bytesToByteString(byte[]datas){
        	char[]dataC = new char[datas.length];
        	for (int i = 0; i < datas.length; i++) {
        		dataC[i] = DIS_256[datas[i]+127];
    		}
        	return new String(dataC);
        }
        
        public static byte[] byteStringToByte(String byteString){
        	char[]datas = byteString.toCharArray();
        	byte[]result = new byte[datas.length];
        	for (int i = 0; i < datas.length; i++) {
        		result[i] = (byte) (datas[i]-DIS_START-127);
    		} 
        	return result;
        }
        
        
        
        public static long byte2long(byte[]value){
        	long temp = 0;  
            long res = 0;  
            for (int i=0;i<8;i++) {  
                res <<= 8;  
                temp = value[i] & 0xff;  
                res |= temp;  
            }  
            return res;
        }
        
       
        private static class HexAppender {
    
            private int    offerSet = 0;
            private char[] charData;
    
            public HexAppender(int size) {
                charData = new char[size];
            }
    
            public void append(char a, char b) {
                charData[offerSet++] = a;
                charData[offerSet++] = b;
            }
    
            @Override
            public String toString() {
                return new String(charData, 0, offerSet);
            }
        }
    
        
    }
    
    #第三部分
    package com.yiban.rec.bill.parse.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    import com.alibaba.fastjson.util.IOUtils;
    
    public class MD5Util {
    
    	private static MessageDigest MD5;
    	static {
    		try {
    			MD5 = MessageDigest.getInstance("MD5");
    		} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public static String getMd5(File file){
    		byte[]buffer = new byte[4096];
    		InputStream inputStream = null;
    		int postion = -1;
    		try {
    			MessageDigest md5 = null;
    			try {
    				md5 = MessageDigest.getInstance("MD5");
    			} catch (NoSuchAlgorithmException e) {
    				e.printStackTrace();
    				return null;
    			}
    			inputStream = new FileInputStream(file);
    			while((postion = inputStream.read(buffer))> 0){
    				md5.update(buffer, 0, postion);
    			}
    			return CodingUtil.bytesToHexString(md5.digest());
    		} catch (Throwable e) {
    			e.printStackTrace();
    		} finally{
    			IOUtils.close(inputStream);
    		}
    		return "";
    	}
    	
    	public static String getMd5(InputStream input){
    		byte[]buffer = new byte[4096];
    		int postion = -1;
    		try {
    			MessageDigest md5 = null;
    			try {
    				md5 = MessageDigest.getInstance("MD5");
    			} catch (NoSuchAlgorithmException e) {
    				e.printStackTrace();
    				return null;
    			}
    			while((postion = input.read(buffer))> 0){
    				md5.update(buffer, 0, postion);
    			}
    			return CodingUtil.bytesToHexString(md5.digest());
    		} catch (Throwable e) {
    			e.printStackTrace();
    		} finally{
    			IOUtils.close(input);
    		}
    		return "";
    	}
    	
    	public static synchronized String getMd5(String msg) {
    		return getMd5(msg.getBytes());
    	}
    
    	public static String getMd5(String source, String key){
    		byte[] k_ipad = new byte[64];
    		byte[] k_opad = new byte[64];
    		byte[] keyb = null;
    		byte[] value = null;
    		try {
    			keyb = key.getBytes("UTF8");
    			value = source.getBytes("UTF8");
    		} catch (UnsupportedEncodingException e1) {
    			e1.printStackTrace();
    		}
    		
    		
    		Arrays.fill(k_ipad, keyb.length, 64, (byte)0x36);
    		Arrays.fill(k_opad, keyb.length, 64, (byte)0x5c);
    		
    		for (int i = 0; i < keyb.length; i++) {
    			k_ipad[i] = (byte) (keyb[i] ^ 0x36);
    			k_opad[i] = (byte) (keyb[i] ^ 0x5C);
    		}
    		MessageDigest md = null;
    		try {
    			md = MessageDigest.getInstance("MD5");
    		} catch (NoSuchAlgorithmException e) {
    			return null;
    		}
    		md.update(k_ipad);
    		md.update(value);
    		byte[] dg = md.digest();
    		md.reset();
    		md.update(k_opad);
    		md.update(dg, 0, 16);
    		dg = md.digest();
    		return CodingUtil.bytesToHexString(dg);
    	}
    
    	public static synchronized byte[] getMd5Byte(String msg) {
    		return getMd5Byte(msg.getBytes());
    	}
    	
    	public static synchronized byte[] getMd5Byte16(String msg) {
    		return getMd5Byte16(msg.getBytes());
    	}
    	
    	public static synchronized String getMd5_16(String msg) {
    		return CodingUtil.bytesToHexString(getMd5Byte(msg), 4, 12); 
    	}
    	
    	public static synchronized byte[] getMd5Byte16(byte[] msg) {
    		byte[]md5Byte = MD5.digest(msg);
    		byte[]result = new byte[8];
    		System.arraycopy(md5Byte, 4, result, 0, 8);
    		return result;
    	}
    	
    
    	public static synchronized byte[] getMd5Byte(byte[] msg) {
    		return MD5.digest(msg);
    	}
    	
    	
    
    	public static synchronized String getMd5(byte[] msg) {
    		MD5.update(msg);
    		return CodingUtil.bytesToHexString(MD5.digest());
    	}
    	
    	public  static void main(String[] args){
    		System.out.println(MD5Util.getMd5("cmbc510623").toUpperCase());
    	}
    }
    
    
    展开全文
  • JAVAMD5加密解密MD5工具类

    千次阅读 2019-12-05 17:45:26
    ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码) ...工具类如下: import org.apache.commons.codec.digest.DigestUtils; import java.math.BigInteger; import java.se...

    ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)

    http://ascii.911cha.com/

    工具类如下:

    import org.apache.commons.codec.digest.DigestUtils;
    import java.math.BigInteger;
    import java.security.MessageDigest;
    
    /**
     * Description: md5加密解密
     */
    public class MD5 {
    
        public static String md5(String dateString) throws Exception {
            MessageDigest md5 = null;
            byte[] digest = MessageDigest.getInstance("md5").digest(dateString.getBytes("utf-8"));
            String md5code = new BigInteger(1, digest).toString(16);
            // 如果生成数字未满32位,需要前面补0
            for (int i = 0; i < 32 - md5code.length(); i++) {
                md5code = "0" + md5code;
            }
            return md5code;
        }
    
    	//ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。
    	//(1)0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),
    	// 如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字			   符:SOH(文头)、EOT(文尾)、ACK(确认)等;
    	// ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的	应用程序,而对文本显示有不同的影响。
    	// 2)32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
    	//(3)65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
    	。
        public static String md5PlusSalt(String keyword)
        {
    		//md5加密
            String md5 = DigestUtils.md5Hex(keyword);
    		//md5+盐
            char[] cArray = md5.toCharArray();
            for(int i = 0;i < cArray.length; i++)
            {
                if(cArray[i] >= 48 &&cArray[i] <= 57)
                {
                    cArray[i] = (char)(105-cArray[i]);
    
                }
            }
    		//都可以使用
            return  String.valueOf(cArray);
    		//return  "".valueOf(cArray);
    
        }
    	//
    	解密+盐
        public static String md5MinusSalt(String md5)
        {
            char[] cArray=md5.toCharArray();
            for(int i=0;i<cArray.length;i++)
            {
                if(cArray[i]>=48&&cArray[i]<=57)
                {
                    cArray[i]=(char)(105-cArray[i]);
                }
            }
            return  String.valueOf(cArray);
    		//return  "".valueOf(cArray);
        }
    }
    

    测试类

    import com.example.demo.system.util.MD5;
    import org.apache.commons.codec.digest.DigestUtils;
    
    /**
     * Description:MD5测试类
     */
    public class Md5Test{
    
        public static void main(String[] args) {
    
            String keyword="i love you";
            String md5= DigestUtils.md5Hex(keyword);
            System.out.println("md5加密后:"+"\n"+md5);
            String md5salt= MD5.md5PlusSalt(keyword);
            System.out.println("加盐后:"+"\n"+md5salt);
            String word= MD5.md5MinusSalt(md5salt);
            System.out.println("解密后:"+"\n"+word);
        }
    }
    
    展开全文
  • 这是一个Java工具类,进行加密操作的时候调用该类的方法就可以,工具类里面写了一个main,拿啦直接用就行。
  • } /** * md5加密算法进行加密(不可逆) * @param res 需要加密的原文 * @return */ public String MD5(String res) { return messageDigest(res, MD5); } /** * md5加密算法进行加密(不可逆) * @param res 需要...

    package com.sh.springboottdemo2.util;


    import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.Mac;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    import java.security.MessageDigest;
    import java.security.SecureRandom;

    public class EncryptUtil {
        public static final String MD5 = "MD5";
        public static final String SHA1 = "SHA1";
        public static final String HmacMD5 = "HmacMD5";
        public static final String HmacSHA1 = "HmacSHA1";
        public static final String DES = "DES";
        public static final String AES = "AES";

        /**编码格式;默认使用uft-8*/
        public String charset = "utf-8";
        /**DES*/
        public int keysizeDES = 0;
        /**AES*/
        public int keysizeAES = 128;

        public static EncryptUtil me;

        private EncryptUtil(){
            //单例
        }
        //双重锁
        public static EncryptUtil getInstance(){
            if (me==null) {
               synchronized (EncryptUtil.class) {
                   if(me == null){
                       me = new EncryptUtil();
                   }
               }
            }
            return me;
        }

        /**
         * 使用MessageDigest进行单向加密(无密码)
         * @param res 被加密的文本
         * @param algorithm 加密算法名称
         * @return
         */
        private String messageDigest(String res,String algorithm){
            try {
                MessageDigest md = MessageDigest.getInstance(algorithm);
                byte[] resBytes = charset==null?res.getBytes():res.getBytes(charset);
                return base64(md.digest(resBytes));
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        /**
         * 使用KeyGenerator进行单向/双向加密(可设密码)
         * @param res 被加密的原文
         * @param algorithm  加密使用的算法名称
         * @param key 加密使用的秘钥
         * @return
         */
        private String keyGeneratorMac(String res,String algorithm,String key){
            try {
                SecretKey sk = null;
                if (key==null) {
                    KeyGenerator kg = KeyGenerator.getInstance(algorithm);
                    sk = kg.generateKey();
                }else {
                    byte[] keyBytes = charset==null?key.getBytes():key.getBytes(charset);
                    sk = new SecretKeySpec(keyBytes, algorithm);
                }
                Mac mac = Mac.getInstance(algorithm);
                mac.init(sk);
                byte[] result = mac.doFinal(res.getBytes());
                return base64(result);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        /**
         * 使用KeyGenerator双向加密,DES/AES,注意这里转化为字符串的时候是将2进制转为16进制格式的字符串,不是直接转,因为会出错
         * @param res 加密的原文
         * @param algorithm 加密使用的算法名称
         * @param key  加密的秘钥
         * @param keysize
         * @param isEncode
         * @return
         */
        private String keyGeneratorES(String res,String algorithm,String key,int keysize,boolean isEncode){
            try {
                KeyGenerator kg = KeyGenerator.getInstance(algorithm);
                if (keysize == 0) {
                    byte[] keyBytes = charset==null?key.getBytes():key.getBytes(charset);
                    kg.init(new SecureRandom(keyBytes));
                }else if (key==null) {
                    kg.init(keysize);
                }else {
                    byte[] keyBytes = charset==null?key.getBytes():key.getBytes(charset);
                    kg.init(keysize, new SecureRandom(keyBytes));
                }
                SecretKey sk = kg.generateKey();
                SecretKeySpec sks = new SecretKeySpec(sk.getEncoded(), algorithm);
                Cipher cipher = Cipher.getInstance(algorithm);
                if (isEncode) {
                    cipher.init(Cipher.ENCRYPT_MODE, sks);
                    byte[] resBytes = charset==null?res.getBytes():res.getBytes(charset);
                    return parseByte2HexStr(cipher.doFinal(resBytes));
                }else {
                    cipher.init(Cipher.DECRYPT_MODE, sks);
                    return new String(cipher.doFinal(parseHexStr2Byte(res)));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        private String base64(byte[] res){
            return Base64.encode(res);
        }

        /**将二进制转换成16进制 */
        public static String parseByte2HexStr(byte buf[]) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < buf.length; i++) {
                String hex = Integer.toHexString(buf[i] & 0xFF);
                if (hex.length() == 1) {
                    hex = '0' + hex;
                }
                sb.append(hex.toUpperCase());
            }
            return sb.toString();
        }
        /**将16进制转换为二进制*/
        public static byte[] parseHexStr2Byte(String hexStr) {
            if (hexStr.length() < 1)
                return null;
            byte[] result = new byte[hexStr.length()/2];
            for (int i = 0;i< hexStr.length()/2; i++) {
                int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
                int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
                result[i] = (byte) (high * 16 + low);
            }
            return result;
        }

        /**
         * md5加密算法进行加密(不可逆)
         * @param res 需要加密的原文
         * @return
         */
        public String MD5(String res) {
            return messageDigest(res, MD5);
        }

        /**
         * md5加密算法进行加密(不可逆)
         * @param res  需要加密的原文
         * @param key  秘钥
         * @return
         */
        public String MD5(String res, String key) {
            return keyGeneratorMac(res, HmacMD5, key);
        }

        /**
         * 使用SHA1加密算法进行加密(不可逆)
         * @param res 需要加密的原文
         * @return
         */
        public String SHA1(String res) {
            return messageDigest(res, SHA1);
        }

        /**
         * 使用SHA1加密算法进行加密(不可逆)
         * @param res 需要加密的原文
         * @param key 秘钥
         * @return
         */
        public String SHA1(String res, String key) {
            return keyGeneratorMac(res, HmacSHA1, key);
        }

        /**
         * 使用DES加密算法进行加密(可逆)
         * @param res 需要加密的原文
         * @param key 秘钥
         * @return
         */
        public String DESencode(String res, String key) {
            return keyGeneratorES(res, DES, key, keysizeDES, true);
        }

        /**
         * 对使用DES加密算法的密文进行解密(可逆)
         * @param res 需要解密的密文
         * @param key 秘钥
         * @return
         */
        public String DESdecode(String res, String key) {
            return keyGeneratorES(res, DES, key, keysizeDES, false);
        }

        /**
         * 使用AES加密算法经行加密(可逆)
         * @param res 需要加密的密文
         * @param key 秘钥
         * @return
         */
        public String AESencode(String res, String key) {
            return keyGeneratorES(res, AES, key, keysizeAES, true);
        }

        /**
         * 对使用AES加密算法的密文进行解密
         * @param res 需要解密的密文
         * @param key 秘钥
         * @return
         */
        public String AESdecode(String res, String key) {
            return keyGeneratorES(res, AES, key, keysizeAES, false);
        }

        /**
         * 使用异或进行加密
         * @param res 需要加密的密文
         * @param key 秘钥
         * @return
         */
        public String XORencode(String res, String key) {
            byte[] bs = res.getBytes();
            for (int i = 0; i < bs.length; i++) {
                bs[i] = (byte) ((bs[i]) ^ key.hashCode());
            }
            return parseByte2HexStr(bs);
        }

        /**
         * 使用异或进行解密
         * @param res 需要解密的密文
         * @param key 秘钥
         * @return
         */
        public String XORdecode(String res, String key) {
            byte[] bs = parseHexStr2Byte(res);
            for (int i = 0; i < bs.length; i++) {
                bs[i] = (byte) ((bs[i]) ^ key.hashCode());
            }
            return new String(bs);
        }

        /**
         * 直接使用异或(第一调用加密,第二次调用解密)
         * @param res 密文
         * @param key 秘钥
         * @return
         */
        public int XOR(int res, String key) {
            return res ^ key.hashCode();
        }

        /**
         * 使用Base64进行加密
         * @param res 密文
         * @return
         */
        public String Base64Encode(String res) {
            return Base64.encode(res.getBytes());
        }

        /**
         * 使用Base64进行解密
         * @param res
         * @return
         */
        public String Base64Decode(String res) {
            return new String(Base64.decode(res));
        }
    }

    展开全文
  • JavaMD5加密、解密工具类

    千次阅读 2019-09-28 07:54:00
    package org.hzp.util;...import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; i...
  • java中常用的工具类,用于MD5的加密,里面还有切割了MD5加密的长度,有DES加密与解密,并且配有main函数可测试,可以根据自己的实际情况使用main函数测试使用
  • 简单实用的MD5工具类,可用于数据库的加密以及解密,开发语言为java
  • java md5加密工具类

    2016-06-02 09:15:33
    java md5加密工具类
  • 一点睛MD5加密算法虽然已经过时,但在一些安全性不太高的行业仍然广受欢迎,在此提供一个MD5加密工具类。二代码package com.imooc.demo.common.util;import org.apache.commons.lang3.StringUtils;import org.slf4j....
  • java工具类专题-MD5加密解密

    千次阅读 2018-05-09 16:59:54
    先来指出一个博主的错误 ...这目录下的maven包是错的 <!... <groupId>commons-codec <artifactId>commons-codec <version>1.10 正确包已经贴出 ...Java工具类还是很强大的,不过还是需要深入了解一下
  • Java实现MD5加密工具类

    2021-03-03 10:26:48
    public final class MD5 { public static String encrypt(String strSrc) { try { char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; byte[] bytes = ...
  • MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 MD5加密算法的功能和常见用途: ...
  • 工具类使用于spring boot 开发,返回值为md5加密后的字符串,参数为字符串,一般用于加密密码。为了防止MD5加密的密码能被反译回明文。所以建议传入的密码字符串必须由数字字母和特殊字符组成。本人上传的表单验证...
  • 项目中又遇到了加密问题,又去翻了半天,然后做测试,干脆就把常用的两小结一下. 1.第一种所谓的MD5加密 其实也不算加密,只是基于Hash算法的不可逆编码而已,等于说,一旦经过MD5处理,是不可能从编码后的字符串反推...
  • 加密工具类 包含md5加密 base加密解密 md5加密 aes加密解密 urlencoude
  • MD5解密工具

    2015-08-12 13:18:16
    MD5解密工具 不用去网站解密了 By忆梵网络制作
  • package ... import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.i...
  • Java MD5加密工具类

    2021-06-16 16:45:47
    记录使用到的一个md5工具类工具类 import java.security.MessageDigest; /** * @author wangsenguang */ public class MD5Util { /*** * MD5加码 生成32位md5码 */ public static String string2MD5...
  • javamd5解密

    千次阅读 2021-03-13 10:22:07
    1 512bits H MD 5 H MD 5 H MD 5 H MD...MD5解密算法-JAVA算法实... 2页 免费 java实现MD5算法 1页 免费 JAVA生成......Java 实现: MD5: MessageDigest md = MessageDigest.getInstance("MD5"); md...加密密钥不同于...
  • md5 很实用的解密工具

    2018-12-29 10:25:27
    md5 很实用的解密工具 打开MD5_SSE2.exe,输入MD5值,按回车即可 注意事项:请将本程序放在英文路径下,放在中文路径下可能会出现问题
  • import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security....public class MD5Util { private static final.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,372
精华内容 4,548
关键字:

javamd5解密工具类

java 订阅