精华内容
下载资源
问答
  • } /** * md5加密算法进行加密(不可逆) * @param res 需要加密的原文 * @param key 秘钥 * @return */ public String MD5(String res, String key) { return keyGeneratorMac(res, HmacMD5, key); } /** * 使用SHA...
    package com.search.common.utils;
    
    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;
    
    /**
     * @ClassName MD5Utils
     * @Description TODO
     * @Author ZhangSan_Plus
     * @Date 2020/5/20 18:21
     * @Version 1.0
     **/
    public class MD5Utils {
        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 MD5Utils me;
    
        public MD5Utils(){
            //单例
        }
        //双重锁
        public static MD5Utils getInstance(){
            if (me==null) {
                synchronized (MD5Utils.class) {
                    if(me == null){
                        me = new MD5Utils();
                    }
                }
            }
            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加密工具类

    2018-05-31 15:36:45
    1.解压; 2.将该jar包导入到项目中; 3.加密 DigestUtils.md5Hex("Marydon")
  • import java.security.MessageDigest;... * MD5加码 生成32位md5码 */ public static String string2MD5(String inStr) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5");.
    import java.security.MessageDigest;
     
    
    public class MD5Utils {
    
        /***
         * MD5加码 生成32位md5码
         */
        public static String string2MD5(String inStr) {
            MessageDigest md5 = null;
            try {
                md5 = MessageDigest.getInstance("MD5");
            } catch (Exception e) {
                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();
     
        }
     
        /**
         * 加密解密算法 执行一次加密,两次解密
         */
        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;
     
        }
        
        /**
         * 判断输入的密码和数据库中保存的MD5密码是否一致
         * @param inputPassword 输入的密码
         * @param md5DB 数据库保存的密码
         * @return
         */
        public static boolean passwordIsTrue(String inputPassword,String md5DB) {
        	
        	String md5 = string2MD5(inputPassword);
        	return md5DB.equals(md5);
        }
        
     
        // 测试主函数
        public static void main(String args[]) {
            String s = new String("123456");
            System.out.println(string2MD5(s));
            System.out.println("密码是否一致:" + passwordIsTrue("123456","e10adc3949ba59abbe56e057f20f883e"));
     
        }
     
    }

    展开全文
  • 主要介绍了java中常用工具类之字符串操作类和MD5加密解密类,需要的朋友可以参考下
  • } /** * md5加密算法进行加密(不可逆) * @param res 需要加密的原文 * @param key 秘钥 * @return */ public String MD5(String res, String key) { return keyGeneratorMac(res, HmacMD5, key); } /** * 使用SHA...

    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加盐加密工具类

    千次阅读 2018-05-22 23:52:48
    原作者:https://blog.csdn.net/Hello_World_QWP/article/details/78913096MD5Utils工具类:[java] view plain copypackage com.etc.cls.img.main.utils; import java.security.MessageDigest; import java....


    原作者:https://blog.csdn.net/Hello_World_QWP/article/details/78913096


    MD5Utils工具类:

    [java]  view plain  copy
    1. package com.etc.cls.img.main.utils;  
    2.   
    3. import java.security.MessageDigest;  
    4. import java.security.NoSuchAlgorithmException;  
    5. import java.util.Random;  
    6.   
    7. import org.apache.commons.codec.binary.Hex;  
    8.   
    9. /** 
    10.  * MD5加密解密工具类 
    11.  * <p> 
    12.  *  
    13.  * @ClassName : PassWordUtils 
    14.  *            </p> 
    15.  *            <p> 
    16.  * @Description : TODO 
    17.  *              </p> 
    18.  *              <p> 
    19.  * @Author : HuaZai 
    20.  *         </p> 
    21.  *         <p> 
    22.  * @ContactInformation : 1461522031@qq.com/huazai6789@aliyun.com 
    23.  *                     </p> 
    24.  *                     <p> 
    25.  * @Date : 2017年12月26日 下午2:44:14 
    26.  *       </p> 
    27.  *  
    28.  *       <p> 
    29.  * @Version : V1.0.0 
    30.  *          </p> 
    31.  * 
    32.  */  
    33. public class MD5Utils {  
    34.   
    35.     /** 
    36.      * 普通MD5加密 01 
    37.      * <p> 
    38.      *  
    39.      * @Title : getStrMD5 
    40.      *        </p> 
    41.      *        <p> 
    42.      * @Description : TODO 
    43.      *              </p> 
    44.      *              <p> 
    45.      * @Author : HuaZai 
    46.      *         </p> 
    47.      *         <p> 
    48.      * @Date : 2017年12月26日 下午2:49:44 
    49.      *       </p> 
    50.      */  
    51.     public static String getStrMD5(String inStr) {  
    52.         // 获取MD5实例  
    53.         MessageDigest md5 = null;  
    54.         try {  
    55.             md5 = MessageDigest.getInstance("MD5");  
    56.         } catch (NoSuchAlgorithmException e) {  
    57.             e.printStackTrace();  
    58.             System.out.println(e.toString());  
    59.             return "";  
    60.         }  
    61.   
    62.         // 将加密字符串转换为字符数组  
    63.         char[] charArray = inStr.toCharArray();  
    64.         byte[] byteArray = new byte[charArray.length];  
    65.   
    66.         // 开始加密  
    67.         for (int i = 0; i < charArray.length; i++)  
    68.             byteArray[i] = (byte) charArray[i];  
    69.         byte[] digest = md5.digest(byteArray);  
    70.         StringBuilder sb = new StringBuilder();  
    71.         for (int i = 0; i < digest.length; i++) {  
    72.             int var = digest[i] & 0xff;  
    73.             if (var < 16)  
    74.                 sb.append("0");  
    75.             sb.append(Integer.toHexString(var));  
    76.         }  
    77.         return sb.toString();  
    78.     }  
    79.   
    80.     /** 
    81.      * 普通MD5加密 02 
    82.      * <p> 
    83.      *  
    84.      * @Title : getStrrMD5 
    85.      *        </p> 
    86.      *        <p> 
    87.      * @Description : TODO 
    88.      *              </p> 
    89.      *              <p> 
    90.      * @Author : HuaZai 
    91.      *         </p> 
    92.      *         <p> 
    93.      * @Date : 2017年12月27日 上午11:18:39 
    94.      *       </p> 
    95.      */  
    96.     public static String getStrrMD5(String password) {  
    97.   
    98.         char hexDigits[] = { '0''1''2''3''4''5''6''7''8''9''a''b''c''d''e''f' };  
    99.         try {  
    100.             byte strTemp[] = password.getBytes("UTF-8");  
    101.             MessageDigest mdTemp = MessageDigest.getInstance("MD5");  
    102.             mdTemp.update(strTemp);  
    103.             byte md[] = mdTemp.digest();  
    104.             int j = md.length;  
    105.             char str[] = new char[j * 2];  
    106.             int k = 0;  
    107.             for (int i = 0; i < j; i++) {  
    108.                 byte byte0 = md[i];  
    109.                 str[k++] = hexDigits[byte0 >>> 4 & 15];  
    110.                 str[k++] = hexDigits[byte0 & 15];  
    111.             }  
    112.   
    113.             return new String(str);  
    114.         } catch (Exception e) {  
    115.             return null;  
    116.         }  
    117.     }  
    118.   
    119.     /** 
    120.      * MD5双重解密 
    121.      * <p> 
    122.      *  
    123.      * @Title : getconvertMD5 
    124.      *        </p> 
    125.      *        <p> 
    126.      * @Description : TODO 
    127.      *              </p> 
    128.      *              <p> 
    129.      * @Author : HuaZai 
    130.      *         </p> 
    131.      *         <p> 
    132.      * @Date : 2017年12月26日 下午3:34:17 
    133.      *       </p> 
    134.      */  
    135.     public static String getconvertMD5(String inStr) {  
    136.         char[] charArray = inStr.toCharArray();  
    137.         for (int i = 0; i < charArray.length; i++) {  
    138.             charArray[i] = (char) (charArray[i] ^ 't');  
    139.         }  
    140.         String str = String.valueOf(charArray);  
    141.         return str;  
    142.     }  
    143.   
    144.     /** 
    145.      * 使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转 
    146.      * <p> 
    147.      *  
    148.      * @Title : md5Hex 
    149.      *        </p> 
    150.      *        <p> 
    151.      * @Description : TODO 
    152.      *              </p> 
    153.      *              <p> 
    154.      * @Author : HuaZai 
    155.      *         </p> 
    156.      *         <p> 
    157.      * @Date : 2017年12月27日 上午11:28:25 
    158.      *       </p> 
    159.      */  
    160.     @SuppressWarnings("unused")  
    161.     private static String md5Hex(String str) {  
    162.         try {  
    163.             MessageDigest md = MessageDigest.getInstance("MD5");  
    164.             byte[] digest = md.digest(str.getBytes());  
    165.             return new String(new Hex().encode(digest));  
    166.         } catch (Exception e) {  
    167.             e.printStackTrace();  
    168.             System.out.println(e.toString());  
    169.             return "";  
    170.         }  
    171.     }  
    172.   
    173.     /** 
    174.      * 加盐MD5加密 
    175.      * <p> 
    176.      *  
    177.      * @Title : getSaltMD5 
    178.      *        </p> 
    179.      *        <p> 
    180.      * @Description : TODO 
    181.      *              </p> 
    182.      *              <p> 
    183.      * @Author : HuaZai 
    184.      *         </p> 
    185.      *         <p> 
    186.      * @Date : 2017年12月27日 上午11:21:00 
    187.      *       </p> 
    188.      */  
    189.     public static String getSaltMD5(String password) {  
    190.         // 生成一个16位的随机数  
    191.         Random random = new Random();  
    192.         StringBuilder sBuilder = new StringBuilder(16);  
    193.         sBuilder.append(random.nextInt(99999999)).append(random.nextInt(99999999));  
    194.         int len = sBuilder.length();  
    195.         if (len < 16) {  
    196.             for (int i = 0; i < 16 - len; i++) {  
    197.                 sBuilder.append("0");  
    198.             }  
    199.         }  
    200.         // 生成最终的加密盐  
    201.         String Salt = sBuilder.toString();  
    202.         password = md5Hex(password + Salt);  
    203.         char[] cs = new char[48];  
    204.         for (int i = 0; i < 48; i += 3) {  
    205.             cs[i] = password.charAt(i / 3 * 2);  
    206.             char c = Salt.charAt(i / 3);  
    207.             cs[i + 1] = c;  
    208.             cs[i + 2] = password.charAt(i / 3 * 2 + 1);  
    209.         }  
    210.         return String.valueOf(cs);  
    211.     }  
    212.   
    213.     /** 
    214.      * 验证加盐后是否和原文一致 
    215.      * <p> 
    216.      *  
    217.      * @Title : verifyMD5 
    218.      *        </p> 
    219.      *        <p> 
    220.      * @Description : TODO 
    221.      *              </p> 
    222.      *              <p> 
    223.      * @Author : HuaZai 
    224.      *         </p> 
    225.      *         <p> 
    226.      * @Date : 2017年12月27日 下午2:22:22 
    227.      *       </p> 
    228.      */  
    229.     public static boolean getSaltverifyMD5(String password, String md5str) {  
    230.         char[] cs1 = new char[32];  
    231.         char[] cs2 = new char[16];  
    232.         for (int i = 0; i < 48; i += 3) {  
    233.             cs1[i / 3 * 2] = md5str.charAt(i);  
    234.             cs1[i / 3 * 2 + 1] = md5str.charAt(i + 2);  
    235.             cs2[i / 3] = md5str.charAt(i + 1);  
    236.         }  
    237.         String Salt = new String(cs2);  
    238.         return md5Hex(password + Salt).equals(String.valueOf(cs1));  
    239.     }  
    240.   
    241. }  




    程序入口:

    [java]  view plain  copy
    1. package com.etc.cls.img.main;  
    2.   
    3. import com.etc.cls.img.main.utils.MD5Utils;  
    4.   
    5. /** 
    6.  * 程序启动入口 
    7.  * <p> 
    8.  *  
    9.  * @ClassName : ClsMain 
    10.  *            </p> 
    11.  *            <p> 
    12.  * @Description : TODO 
    13.  *              </p> 
    14.  *              <p> 
    15.  * @Author : HuaZai 
    16.  *         </p> 
    17.  *         <p> 
    18.  * @ContactInformation : 1461522031@qq.com/huazai6789@aliyun.com 
    19.  *                     </p> 
    20.  *                     <p> 
    21.  * @Date : 2017年12月20日 下午4:37:54 
    22.  *       </p> 
    23.  *  
    24.  *       <p> 
    25.  * @Version : V1.0.0 
    26.  *          </p> 
    27.  * 
    28.  */  
    29. public class ClsMain {  
    30.   
    31.     @SuppressWarnings("static-access")  
    32.     public static void main(String[] args) {  
    33.         MD5Utils md = new MD5Utils();  
    34.         String strMD5 = new String("12345");  
    35.   
    36.         System.out.println("原始:" + strMD5);  
    37.         System.out.println("东东的:" + md.getStrrMD5(strMD5));  
    38.         System.out.println("MD5后:" + md.getStrMD5(strMD5));  
    39.         System.out.println("加密的:" + md.getconvertMD5(strMD5));  
    40.         System.out.println("解密的:" + md.getconvertMD5(md.getconvertMD5(strMD5)));  
    41.   
    42.         System.out.println("\t\t=======================================");  
    43.         // 原文  
    44.         String plaintext = "huazai";  
    45.         // plaintext = "123456";  
    46.         System.out.println("原始:" + plaintext);  
    47.         System.out.println("普通MD5后:" + MD5Utils.getStrMD5(plaintext));  
    48.   
    49.         // 获取加盐后的MD5值  
    50.         String ciphertext = MD5Utils.getSaltMD5(plaintext);  
    51.         System.out.println("加盐后MD5:" + ciphertext);  
    52.         System.out.println("是否是同一字符串:" + MD5Utils.getSaltverifyMD5(plaintext, ciphertext));  
    53.         /** 
    54.          * 其中某次DingSai字符串的MD5值 
    55.          */  
    56.         String[] tempSalt = { "810e1ee9ee5e28188658f431451a29c2d81048de6a108e8a",  
    57.                 "66db82d9da2e35c95416471a147d12e46925d38e1185c043",  
    58.                 "61a718e4c15d914504a41d95230087a51816632183732b5a" };  
    59.   
    60.         for (String temp : tempSalt) {  
    61.             System.out.println("是否是同一字符串:" + MD5Utils.getSaltverifyMD5(plaintext, temp));  
    62.         }  
    63.     }  
    64.   
    65. }  




    使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转 需要的Jar包下载:

    commons-codec-1.11 CSDN下载
    展开全文
  • Java中MD5加密解密工具类

    千次阅读 2019-09-28 07:54:00
    //将盐的字节拷贝到生成的加密口令字节数组的前12个字节,以便在验证口令时取出盐 System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH); //将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节 System...
  • 测试MD5 加密 CREATE TABLE `testmd5`( `id` INT(4) NOT NULL, `name` VARCHAR(20) NOT NULL, `pwd` VARCHAR(50) NOT NULL, PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8 -- 明文密码 INSERT INTO ...
  • 代码如下,粘进去直接可以使用 ... import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security....public class MD5Utils { /** * byte[]字节数组 转换成 十六进制
  • JAVA中MD5加密解密(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...
  • 这是一个Java的工具类,进行加密操作的时候调用该类的方法就可以,工具类里面写了一个main,拿啦直接用就行。
  • java md5加密 解密

    2017-08-03 22:10:46
    java md5加密 解密
  • Java MD5 加密工具类

    千次阅读 2019-04-10 14:45:53
    一、MD5简介 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。 MD5算法是不可逆的。...
  • java MD5加密工具类

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

    千次阅读 2020-08-08 12:34:00
    public class MD5Util { /** 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, * 这里把它们实现成为static final是表示了只读,切能在同一个进程空间内的多个 * Instance间共享 ...
  • java MD5完整加解密工具类

    千次阅读 2019-03-19 10:37:45
    '5' , '6' , '7' , '8' , '9' , '+' , '/' } ; private static byte [ ] base64DecodeChars = new byte [ ] { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , -...
  • 项目中又遇到了加密问题,又去翻了半天,然后做测试,干脆就把常用的两小结一下. 1.第一种所谓的MD5加密 其实也不算加密,只是基于Hash算法的不可逆编码而已,等于说,一旦经过MD5处理,是不可能从编码后的字符串反推...
  • Java | MD5加密工具类

    2020-03-04 19:33:23
    将字符串进行MD5加密
  • Java的MD5加密解密类

    万次阅读 2013-04-12 20:39:02
    理解MD5 MD5的应用非常广泛。例如我们在unix中下载某种软件时,常常会看到一个扩展名为.md5的文件,内容大概是...因此当我们得到这个文件后,使用工具计算该文件对应的md5值,然后和文件中记录的.md5中记录的值进行对
  • MD5加密+签名算法Sign生成 工具类。 用于调式远程接口或者做用户加密登录等等。 亲自调试过,都是可以用的。 不用自己再自己去写算法轮子! 大家都搬起来!
  • MD5解密工具類

    2018-05-05 15:39:34
    MD5解密, MD5解密, MD5解密 MD5解密 MD5解密
  • JAVA中MD5加密(MD5工具类

    千次阅读 2019-01-09 17:32:54
    转自:... 为什么只有加密,没有解密呢?欢迎大佬留言解答 package utilw; import java.security.MessageDigest; public class MD5 { /** MD5 */ private static final Stri...
  • MD5加密工具类--MD5Utils.java

    千次阅读 2019-05-05 16:06:55
    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for C...
  • java工具类-DigestUtils实现md5加密

    千次阅读 2019-05-27 23:59:33
    commons-codec-1.3jar放进去 第一种 String psd = DigestUtils.md5DigestAsHex(tbUser.getPassword().getBytes()); 第二种 DigestUtils.md5Hex(password) password需要加密的字符串
  • 如果对安全性的需求不是太高,MD5仍是使用非常方便和普及的加密方式,比如Java中自带的MessageDigest就提供了支持,这里就为大家带来Java实现MD5加密解密的代码实例分享:  基础:MessageDigest的使用  其实要在...
  • JAVA MD5加密工具

    2018-06-01 15:14:18
    1、工具类import java.security.MessageDigest... * 采用MD5加密解密 * * @author xl * @datetime 2011-10-13 */ public class MD5Util { /*** * MD5加码 生成32位小写md5码 */ public static String strTo...
  • 【java工具类】MD5加密

    2015-07-16 09:09:33
    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and ...
  • java 实现md5加密的三种方式与解密

    千次阅读 2018-05-31 15:20:00
    java 实现md5加密的三种方式 CreateTime--2018年5月31日15点04分 Author:Marydon 一、解密  说明:截止文章发布,Java没有实现解密,但是已有网站可以免费破解了!  见文末相关推荐 二、加密的三种方式  ...
  • Java实现MD5加盐加密算法

    万次阅读 2017-12-27 15:48:29
    《 Java实现MD5加盐加密算法 》 现在一般的MD5加密在网上随随便便就能解密解密的网站有以下一个:
  • MD5工具类(java实现版)

    万次阅读 2016-07-13 20:14:02
    MD5工具类(java实现版)介绍MD5(Message Digest Algorithm)加密算法是不对称的加密算法,因为其实不可逆的,实际上其不能算作加密算法, 因为其不可解密。其实现原理是基于Hash算法(简称散列函数)。 MD5算法具有以下...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

javamd5加密解密工具类

java 订阅