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

java MD5加密实现代码

程序员文章站 2024-03-13 18:36:45
先从下面这张图对md5加密实现进行了解,具体如下 package com.pb; import java.io.unsupportedencodinge...

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

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

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