当前位置: 移动技术网 > IT编程>开发语言>Java > java实现MD5加密方法汇总

java实现MD5加密方法汇总

2019年07月22日  | 移动技术网IT编程  | 我要评论

代码一:

/**
 * 实现md5加密
 *
 */
public class md5 {
   
  /**
   * 获取加密后的字符串
   * @param input
   * @return
   */
  public static string stringmd5(string pw) {
    try { 
        
       // 拿到一个md5转换器(如果想要sha1参数换成”sha1”) 
       messagedigest messagedigest =messagedigest.getinstance("md5"); 
       // 输入的字符串转换成字节数组 
       byte[] inputbytearray = pw.getbytes(); 
       // inputbytearray是输入字符串转换得到的字节数组 
       messagedigest.update(inputbytearray); 
       // 转换并返回结果,也是字节数组,包含16个元素 
       byte[] resultbytearray = messagedigest.digest(); 
       // 字符数组转换成字符串返回 
       return bytearraytohex(resultbytearray); 
      } catch (nosuchalgorithmexception e) { 
       return null; 
      } 
  }
   
  public static string bytearraytohex(byte[] bytearray) { 
     
    // 首先初始化一个字符数组,用来存放每个16进制字符 
    char[] hexdigits = {'0','1','2','3','4','5','6','7','8','9', 'a','b','c','d','e','f' }; 
    // new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)) 
    char[] resultchararray =new char[bytearray.length * 2]; 
    // 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去 
    int index = 0; 
    for (byte b : bytearray) { 
      resultchararray[index++] = hexdigits[b>>> 4 & 0xf]; 
      resultchararray[index++] = hexdigits[b& 0xf]; 
    }
    // 字符数组组合成字符串返回 
    return new string(resultchararray); 
  }
}

方法二:

package other;

import java.security.messagedigest;
import java.security.nosuchalgorithmexception;
/*
 * md5 算法
*/
public class md5 {
  
  // 全局数组
  private final static string[] strdigits = { "0", "1", "2", "3", "4", "5",
      "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

  public md5() {
  }

  // 返回形式为数字跟字符串
  private static string bytetoarraystring(byte bbyte) {
    int iret = bbyte;
    // system.out.println("iret="+iret);
    if (iret < 0) {
      iret += 256;
    }
    int id1 = iret / 16;
    int id2 = iret % 16;
    return strdigits[id1] + strdigits[id2];
  }

  // 返回形式只为数字
  private static string bytetonum(byte bbyte) {
    int iret = bbyte;
    system.out.println("iret1=" + iret);
    if (iret < 0) {
      iret += 256;
    }
    return string.valueof(iret);
  }

  // 转换字节数组为16进制字串
  private static string bytetostring(byte[] bbyte) {
    stringbuffer sbuffer = new stringbuffer();
    for (int i = 0; i < bbyte.length; i++) {
      sbuffer.append(bytetoarraystring(bbyte[i]));
    }
    return sbuffer.tostring();
  }

  public static string getmd5code(string strobj) {
    string resultstring = null;
    try {
      resultstring = new string(strobj);
      messagedigest md = messagedigest.getinstance("md5");
      // md.digest() 该函数返回值为存放哈希值结果的byte数组
      resultstring = bytetostring(md.digest(strobj.getbytes()));
    } catch (nosuchalgorithmexception ex) {
      ex.printstacktrace();
    }
    return resultstring;
  }

  public static void main(string[] args) {
    md5 getmd5 = new md5();
    system.out.println(getmd5.getmd5code("000000"));
  }
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网