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

java MD5加密实现代码

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

先从下面这张图对md5加密实现进行了解,具体如下

package com.pb;

import java.io.unsupportedencodingexception;
import java.security.messagedigest;
import java.security.nosuchalgorithmexception;
import java.util.scanner;

/*
 * 验证md5
 * 1.初始化messagedigest信息摘要对象
 * 2.传入需要计算的字符串更新摘要信息
 * 3.计算信息摘要
 * 4.将byte[] 转换为找度为32位的16进制字符串
 */
public class md5 {
  /*
   * 生成md5 有传入参数字符串
   */
  public void generatemd5(string input){
    
    try {
      //1.初始化messagedigest信息摘要对象,并指定为md5不分大小写都可以
      messagedigest md=messagedigest.getinstance("md5");
       //2.传入需要计算的字符串更新摘要信息,传入的为字节数组byte[],
      //将字符串转换为字节数组使用getbytes()方法完成
      //指定时其字符编码 为utf-8
      md.update(input.getbytes("utf-8"));
       //3.计算信息摘要digest()方法
      //返回值为字节数组
      byte [] hashcode=md.digest();
       //4.将byte[] 转换为找度为32位的16进制字符串
        //声明stringbuffer对象来存放最后的值
      stringbuffer sb=new stringbuffer();
      //遍历字节数组
      for(byte b:hashcode){
        //对数组内容转化为16进制,
        sb.append(character.fordigit(b>>4&0xf, 16));
        //换2次为32位的16进制
        sb.append(character.fordigit(b&0xf, 16));
      }
      system.out.println("加密后的结果是:"+sb.tostring());
    } catch (nosuchalgorithmexception e) {
      // todo auto-generated catch block
      e.printstacktrace();
    } catch (unsupportedencodingexception e) {
      // todo auto-generated catch block
      e.printstacktrace();
    }
  }

  public static void main(string[] args) {
    //声明加密md5类的对象
    md5 md5=new md5();
    //使用scanner来输入一个字符
    scanner scanner=new scanner(system.in);
    system.out.println("请输入要加密的内容:");
    string input = scanner.nextline();
    //调用加密方法
    md5.generatemd5(input);

  }
  
}

结果: 

请输入要加密的内容:
学习md5加密过程
加密后的结果是:b826cdac46f01dcc8ccc60a76cebf858

第二段代码:

package test.md5;

import java.security.messagedigest;

public class md5util {
  public final static string md5(string s) {
    char hexdigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};    

    try {
      byte[] btinput = s.getbytes();
      // 获得md5摘要算法的 messagedigest 对象
      messagedigest mdinst = messagedigest.getinstance("md5");
      // 使用指定的字节更新摘要
      mdinst.update(btinput);
      // 获得密文
      byte[] md = mdinst.digest();
      // 把密文转换成十六进制的字符串形式
      int j = md.length;
      char str[] = new char[j * 2];
      int k = 0;
      for (int i = 0; i < j; i++) {
        byte byte0 = md[i];
        str[k++] = hexdigits[byte0 >>> 4 & 0xf];
        str[k++] = hexdigits[byte0 & 0xf];
      }
      return new string(str);
    } catch (exception e) {
      e.printstacktrace();
      return null;
    }
  }

  public static void main(string[] args) {
    system.out.println(md5util.md5("20121221"));
    system.out.println(md5util.md5("加密"));
  }
}

第三段代码:md5加密算法的java实现

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"));
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

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

相关文章:

验证码:
移动技术网