• 使用MD5对字符串加密


      1 package com.iwhalecloud.retail.enterprise.c.utils;
      2 
      3 import java.io.UnsupportedEncodingException;
      4 import java.security.MessageDigest;
      5 import java.security.NoSuchAlgorithmException;
      6 import java.util.regex.Matcher;
      7 import java.util.regex.Pattern;
      8 
      9 public class MD5Util {
     10     //将字节数组转成十六进制字符串
     11     private static String byteArrayToHexString(byte b[]) {
     12         StringBuffer resultSb = new StringBuffer();
     13         for (int i = 0; i < b.length; i++)
     14             resultSb.append(byteToHexString(b[i]));
     15 
     16         return resultSb.toString();
     17     }
     18 
     19     //对单个字节转换成整数进行取商取余数计算
     20     private static String byteToHexString(byte b) {
     21         int n = b;
     22         if (n < 0)
     23             n += 256;
     24         int d1 = n / 16;
     25         int d2 = n % 16;
     26         //根据下标d1,d2去数组hexDigits的数据
     27         return hexDigits[d1] + hexDigits[d2];
     28     }
     29 
     30     public static String MD5Encode(String origin, String charsetname) {
     31         String resultString = null;
     32         try {
     33             resultString = new String(origin);
     34             // 获得MD5摘要算法的 MessageDigest 对象
     35             MessageDigest md = MessageDigest.getInstance("MD5");
     36             if (charsetname == null || "".equals(charsetname))
     37                 //将加密之后的字节数据转换成16进制的字符串
     38                 resultString = byteArrayToHexString(md.digest(resultString
     39                         .getBytes()));
     40             else
     41                 resultString = byteArrayToHexString(md.digest(resultString
     42                         .getBytes(charsetname)));
     43         } catch (Exception exception) {
     44         }
     45         return resultString;
     46     }
     47 
     48     private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
     49             "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
     50     /**
     51      * MD5加密字符串(32位大写)
     52      *
     53      * @param string 需要进行MD5加密的字符串
     54      * @return 加密后的字符串(大写)
     55      */
     56     public static String md5Encrypt32Upper(String string) {
     57         byte[] hash;
     58         try {
     59             //创建一个MD5算法对象,并获得MD5字节数组,16*8=128位
     60             hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
     61         } catch (NoSuchAlgorithmException e) {
     62             throw new RuntimeException("Huh, MD5 should be supported?", e);
     63         } catch (UnsupportedEncodingException e) {
     64             throw new RuntimeException("Huh, UTF-8 should be supported?", e);
     65         }
     66 
     67         //转换为十六进制字符串
     68         StringBuilder hex = new StringBuilder(hash.length * 2);
     69         for (byte b : hash) {
     70             if ((b & 0xFF) < 0x10) hex.append("0");
     71             hex.append(Integer.toHexString(b & 0xFF));
     72         }
     73         return hex.toString().toUpperCase();
     74     }
     75 
     76     /**
     77      * MD5加密字符串(32位小写)
     78      *
     79      * @param string 需要进行MD5加密的字符串
     80      * @return 加密后的字符串(小写)
     81      */
     82     public static String md5Encrypt32Lower(String string) {
     83         //直接上面的方法转换成小写就可以了
     84         return md5Encrypt32Upper(string).toLowerCase();
     85     }
     86 
     87     /**
     88      * 将二进制字节数组转换为十六进制字符串
     89      *
     90      * @param bytes 二进制字节数组
     91      * @return 十六进制字符串
     92      */
     93     public static String bytesToHex(byte[] bytes) {
     94         StringBuffer hexStr = new StringBuffer();
     95         int num;
     96         for (int i = 0; i < bytes.length; i++) {
     97             num = bytes[i];
     98             if (num < 0) {
     99                 num += 256;
    100             }
    101             if (num < 16) {
    102                 hexStr.append("0");
    103             }
    104             hexStr.append(Integer.toHexString(num));
    105         }
    106         return hexStr.toString().toUpperCase();
    107     }
    108 
    109     /**
    110      * Unicode中文编码转换成字符串
    111      */
    112     public static String unicodeToString(String str) {
    113         Pattern pattern = Pattern.compile("(\\u(\p{XDigit}{4}))");
    114         Matcher matcher = pattern.matcher(str);
    115         char ch;
    116         while (matcher.find()) {
    117             ch = (char) Integer.parseInt(matcher.group(2), 16);
    118             str = str.replace(matcher.group(1), ch + "");
    119         }
    120         return str;
    121     }
    122 
    123     public static void main(String[] args) {
    124         System.out.println(md5Encrypt32Lower("123456"));
    125         System.out.println(md5Encrypt32Upper("123456"));
    126     }
    127 }
  • 相关阅读:
    问题集
    第04次作业-树
    06-图
    05-查找
    04-树
    03-栈和队列
    02-线性表
    01-抽象数据类型
    C语言--总结报告
    C语言--函数嵌套
  • 原文地址:https://www.cnblogs.com/zk-blog/p/12612150.html
Copyright © 2020-2023  润新知