欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现MD5加密方法汇总

程序员文章站 2024-03-07 15:24:03
代码一: /** * 实现md5加密 * */ public class md5 { /** * 获取加密后的字符串...

代码一:

/**
 * 实现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"));
  }
}