精华内容
下载资源
问答
  • md5工具类

    2016-04-21 17:33:14
    md5工具类
    public class MD5Utils {
    /**
    * md5加密方法

    * @param string
    *            需要md5的字符串
    */
    public static String md5(String string) {
    try {
    // 得到一个信息摘要器
    MessageDigest digest = MessageDigest.getInstance("md5");
    byte[] result = digest.digest(string.getBytes());
    StringBuffer buffer = new StringBuffer();
    // 把没一个byte 做一个与运算 0xff;
    for (byte b : result) {
    // 与运算
    int number = b & 0xff;// 加盐
    String str = Integer.toHexString(number);
    if (str.length() == 1) {
    buffer.append("0");
    }
    buffer.append(str);
    }


    // 标准的md5加密后的结果
    return buffer.toString();
    } catch (NoSuchAlgorithmException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return "";
    }
    }


    /**
    * MD5加密算法

    * @param bytes
    *            需要md5的字节数组
    */
    public static String md5(byte[] bytes) {
    if (bytes == null) {
    return null;
    }
    StringBuffer sb = null;
    try {
    MessageDigest digest = MessageDigest.getInstance("md5");
    byte[] bs = digest.digest(bytes);
    sb = new StringBuffer();
    // 把每一个byte做一次 与运算 0ff
    for (byte b : bs) {
    int num = b & 0xff;
    String str = Integer.toHexString(num);
    if (str.length() == 1) {
    sb.append("0");
    }
    sb.append(str);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return sb.toString();
    }


    /**
    * 对一个文件进行MD5加密操作

    * @param filePath
    *            需要md5的文件路径
    */
    public static String md5File(String filePath) throws Exception {
    if (filePath == null) {
    throw new IllegalArgumentException("文件路径不能为空");
    }


    File file = new File(filePath);
    MessageDigest digest = MessageDigest.getInstance("md5");
    FileInputStream fin = new FileInputStream(file);
    byte[] buffer = new byte[1024];
    int len = -1;
    while ((len = fin.read(buffer)) != -1) {
    digest.update(buffer, 0, len);
    }
    fin.close();

    byte[] result = digest.digest();
    StringBuffer sb = new StringBuffer();
    // 把没一个byte 做一个与运算 0xff;
    for (byte b : result) {
    // 与运算
    int number = b & 0xff;// 加盐
    String str = Integer.toHexString(number);
    if (str.length() == 1) {
    sb.append("0");
    }
    sb.append(str);
    }


    // 标准的md5加密后的结果
    return sb.toString();
    }
    }
    展开全文
  • MD5工具类

    2021-03-31 16:43:12
    MD5工具类 1、介绍 MD5(Message Digest Algorithm)加密算法是不对称的加密算法,因为其实不可逆的,实际上其不能算作加密算法, 因为其不可解密。其实现原理是基于Hash算法(简称散列函数)。 2、特点 压缩性:任意...

    MD5工具类

    1、介绍

    MD5(Message Digest Algorithm)加密算法是不对称的加密算法,因为其实不可逆的,实际上其不能算作加密算法,
    因为其不可解密。其实现原理是基于Hash算法(简称散列函数)。

    2、特点

    • 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
    • 容易计算:从原数据计算出MD5值很容易(算法简单)
    • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
    • 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
    • 不可逆计算反推

    3、Md5Utils

    import java.security.MessageDigest;
    
    // MD5加密工具(是基于hash算法实现,不可逆)
    public class Md5Utils {
    
        /** 16进制的字符数组 */
        private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
                "e", "f" };
        
        
        // source 需要加密的原字符串
        // encoding 指定编码类型
        // uppercase 是否转为大写字符串 true为大写   false为小写
        public static String MD5Encode(String source, String encoding, boolean uppercase) {
            String result = null;
            try {
                result = source;
                // 获得MD5摘要对象
                MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                // 使用指定的字节数组更新摘要信息
                messageDigest.update(result.getBytes(encoding));
                // messageDigest.digest()获得16位长度
                result = byteArrayToHexString(messageDigest.digest());
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return uppercase ? result.toUpperCase() : result;
        }
    
        /**
         * 转换字节数组为16进制字符串
         *
         * @param bytes
         *            字节数组
         * @return
         */
        private static String byteArrayToHexString(byte[] bytes) {
            StringBuilder stringBuilder = new StringBuilder();
            for (byte tem : bytes) {
                stringBuilder.append(byteToHexString(tem));
            }
            return stringBuilder.toString();
        }
    
        /**
         * 转换byte到16进制
         *
         * @param b
         *            要转换的byte
         * @return 16进制对应的字符
         */
        private static String byteToHexString(byte b) {
            int n = b;
            if (n < 0) {
                n = 256 + n;
            }
            int d1 = n / 16;
            int d2 = n % 16;
            return hexDigits[d1] + hexDigits[d2];
        }
    
        public static void main(String[] args) {
            String result = MD5Encode("123456", "utf-8", false);
            System.out.println(result);
        }
    }
    

    效果如下:
    在这里插入图片描述
    4、总结

    MD5加密算法是一种比较简单和高效的不可逆加密算法,是基于散列函数实现的。在应用开发过程中有很多时候为了
    防止明文传输都会对传输内容进行加密,比如微信支付时传输的数据就使用MD5加密之后的字符串来做校验,当然有
    些支付方式(支付宝的移动支付)会采用RSA签名方式来做防数据窜改提交。

    展开全文
  • MD5 工具类

    2020-08-20 15:08:49
    MD5 工具类 public static String md5(String source) { // 1.判断 source 是否有效 if (source == null || source.length() == 0) { // 2.如果不是有效的字符串抛出异常 throw new RuntimeException...

    MD5 工具类

    public static String md5(String source) {
    
            // 1.判断 source 是否有效
            if (source == null || source.length() == 0) {
    
                // 2.如果不是有效的字符串抛出异常
                throw new RuntimeException("字符串不可为空");
            }
            try {
                // 3.获取 MessageDigest 对象
                String algorithm = "md5";
                MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
                // 4.获取明文字符串对应的字节数组
                byte[] input = source.getBytes();
                //执行加密
                byte[] output = messageDigest.digest(input);
                // 6.创建 BigInteger 对象
                int signum = 1;
                BigInteger bigInteger = new BigInteger(signum, output);
                // 7.按照 16 进制将 bigInteger 的值转换为大写字符串
                int radix = 16;
                String encoded = bigInteger.toString(radix).toUpperCase();
    
                return encoded;
    
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    展开全文
  • Md5工具类

    2019-10-04 19:46:20
    Md5帮助(Md5Helper.cs) 1 using System; 2 using System.Security.Cryptography; 3 using System.Text; 4 5 namespace Sam.OA.Common 6 { 7 /// <summary> 8 /// Md5帮助 9 ...

    Md5帮助类(Md5Helper.cs)

     1 using System;
     2 using System.Security.Cryptography;
     3 using System.Text;
     4 
     5 namespace Sam.OA.Common
     6 {
     7     /// <summary>
     8     /// Md5帮助类
     9     /// </summary>
    10     public class Md5Helper
    11     {
    12         /// <summary>
    13         /// 对字符串进行Md5运算,不可逆
    14         /// </summary>
    15         /// <param name="str">加密字符串</param>
    16         /// <returns></returns>
    17         public static string GetMd5String(string str)
    18         {
    19             try
    20             {
    21                 MD5 md5 = MD5.Create();
    22                 byte[] buffer = Encoding.UTF8.GetBytes(str);
    23                 byte[] md5Buffer = md5.ComputeHash(buffer);
    24                 StringBuilder sb = new StringBuilder();
    25                 foreach (byte b in md5Buffer)
    26                 {
    27                     sb.Append(b.ToString("x2"));
    28                 }
    29                 md5.Clear();
    30                 return sb.ToString();
    31             }
    32             catch (Exception ex)
    33             {
    34                 throw ex;
    35             }
    36         }
    37     }
    38 }

     

    转载于:https://www.cnblogs.com/chenyanbin/p/11312034.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,818
精华内容 1,127
关键字:

md5工具类