MD5加密

一、MD5介绍

MD5是MD5消息摘要算法的简称(英语:MD5 Message-Digest Algorithm),是一种广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(即哈希值),用于确保信息传输的完整性。MD5由罗纳德·李维斯特设计,于1992年公开,用以取代MD4算法。这套算法的程序在RFC 1321 中被加以规范。 
将数据(如一段文字)运算变为另一固定长度值,是散列算法的基础原理。 
MD5已经被证实可以被碰撞破解。对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。

二、加密   

       /*

       * 对字符串MD5加密(小写+数字)

       * @param str 传入要加密的字符串

       * @return MD5加密后的字符串

       */

      public static String getLowerCaseMD5(String str) {

            try {

                  /**

                   * 生成一个MD5加密计算摘要

                   */

                  MessageDigest md = MessageDigest.getInstance("MD5");

                  /**

                   * 计算MD5函数

                   */

                  md.update(str.getBytes());

                  /**

                   * digest()最后返回MD5 hash值,返回值为8位字符串 因为md hash值是16位的hex 实际上就是8位的字符

                   * BigInteger函数则将8位的字符串16位的hex 用字符串来表示;得到字符串形式的hash

                   */

                  return new BigInteger(1, md.digest()).toString(16);

            } catch (Exception e) {

                  logger.error("getLowerCaseMD5 error", e);

            }

            return null;

      }

       /**

       * 对字符串MD5加密(大写+数字)

       * @param str 传入要加密的字符串

       * @return MD5加密后的字符串

       */

      public static String getCapitalAndNumMD5(String str) {

            char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

            try {

                  byte[] byInput = str.getBytes();

                  /**

                   * 获得MD5摘要算法的MessageDigest对象

                   */

                  MessageDigest mdInst = MessageDigest.getInstance("MD5");

                  /**

                   * 使用指定的字节更新摘要

                   */

                  mdInst.update(byInput);

                  /**

                   * 获得密文

                   */

                  byte[] md = mdInst.digest();

                  /**

                   * 把密文转成十六进制的字符串形式

                   */

                  int j = md.length;

                  char strs[] = new char[j * 2];

                  int k = 0;

                  for (int i = 0; i < j; i++) {

                        byte byte0 = md[i];

                        strs[k++] = hexDigits[byte0 >>> 4 & 0xf];

                        strs[k++] = hexDigits[byte0 & 0xf];

                  }

                  return new String(strs);

            } catch (Exception e) {

                  logger.error("getCapitalAndNumMD5 error", e);

            }

            return null;

      }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值