栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 中 MD5加密的实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 中 MD5加密的实例

java 中 MD5加密的实例

前言:

今天我来学习利用JAVA编程,通过MD5来实现加密,同时实现验证用户登录原理。

主要是 过程:

将原文的byte 文件通过 MD5加密完成 后。再将其转化为我们能看懂的密文(MD5生成的byte数据,我们无法识别)

主要代码如下

package techDemo;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;

import org.junit.Test;

import sun.misc.base64Encoder;


public class MD5 {

  public static void main(String[] args) throws Exception {
    MessageDigest md = MessageDigest.getInstance("MD5");
    // 原文:
    String pwd = "12345";
    // digese---得到byte数组 加密后的
    byte b []= md.digest(pwd.getBytes());
    System.out.println(b.length); // 16
    // 再将byte b [] 转化为我们能看的懂 密文

    //第一种方式:base64Encoder (要导依赖包)
    base64Encoder bd = new base64Encoder();
    //密文1:
    String strpwd1 = bd.encode(b);
    System.out.println(strpwd1);

    //第二种方式:自己写代码将byte 数组转化为16进制的并且最后的密文保证长度为32
    String strpwd2 = "";
    for(byte i:b){
      // 将单个字节转化为 16 进制
      String s = Integer.toHexString(i & 0xff);
      // 当i<16时,长度为1加个符号 ,这样可以保证最后为 密文为32
      if(s.length()==1){
 s = s + "0";
      }
      strpwd2 += s;
    }
    System.out.println(strpwd2);

  }

  // 演示模拟用户登录
  @Test
  public void demoLogin()throws Exception{
    // 当用户注册成功时,把用户的密码生成密文和用户名一起保存
    // 登录时,通过把用户输入密码再次生成密文,判断两次密文是否一致来验证用户

    // 假设用户密码是 123456789,先生成密文
    String pwd = "123456789";
    String Mpwd = Md5(pwd);
    Scanner sc = new Scanner(System.in);
    while(true){
      System.out.println("请输入密码");
      String p = sc.nextLine();
      if(Mpwd.equals( Md5(p))){
 System.out.println("密码正确");
 break;
      }else{
 System.out.println("密码错误,请重新输入");
      }

    }
  }

  private String Md5(String pwd) throws NoSuchAlgorithmException {
    String Mpwd ="";
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte b [] = md.digest(pwd.getBytes());
    for(byte i:b){
      String s = Integer.toHexString( i & 0xff);
      if(s.length()==1){
 s = s +"0";
      }
      Mpwd = s + pwd;
    }
    return Mpwd;
  }

}

下面是 我们老师的代码 更加细节

package techDemo;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import org.junit.Test;

import sun.misc.base64Encoder;

public class Md5Demo {
  //加密算法类java.security.MessageDigest
  @Test//md5加密的核心代码
  public void demo1() throws Exception{
    MessageDigest md = MessageDigest.getInstance("MD5");
    String pwd="ewi24343423";
    byte b1[] = pwd.getBytes();
    byte b2[] = md.digest( b1 ); //利用md对象把 明文b1[] 加密成 密文b2[]

    //至此,其实md5加密已经完成,可惜它生成的密文全是字节数据,不是我们通常习惯(看得懂)的16进制的数
    //因此还要进一步处理---见demo2()演示

    System.out.println("len:"+b2.length); //永远是:16 ---md5加密算法中,无论明文数据有多长,密文都是16个字节数据

    for(byte b: b2){
      //System.out.print(b+" ");
      System.out.print((char)b+" ");
    }
    System.out.println();
  }


  @Test//把md5生成的密文转换成我们习惯的方式---与前面相比,怪字符少一些,但还不是16进制
  public void demo2() throws Exception{
    MessageDigest md = MessageDigest.getInstance("MD5");
    String pwd="ewi24343423";
    byte b1[] = pwd.getBytes();
    byte b2[] = md.digest( b1 ); //利用md对象把 明文b1[] 加密成 密文b2[]

    System.out.println("len:"+b2.length); //永远是:16

    base64Encoder en = new base64Encoder();
    String pwd2 = en.encode(b2);
    System.out.println(pwd2);
  }

  

  @Test //自己手动写代码,把md5生成的密文转换成 我们最习惯的16进制方式
  public void demo3()throws Exception{
    MessageDigest md = MessageDigest.getInstance("MD5");
    String pwd="e655656w23";
    byte b1[] = pwd.getBytes();
    byte b2[] = md.digest( b1 ); //利用md对象把 明文b1[] 加密成 密文b2[]

    System.out.println("len:"+b2.length); //永远是:16

    //手动写代码,把16个byte数据 转换成 32个 16进制数
    String pwd2="";
    for(byte i: b2){
      String s = Integer.toHexString(i & 0xff); //如果i<16则s只有一位,只有>=16的i转换成的s才是两位
      if(s.length()==1){
 s ="0"+s; // s ="f"+s;
      }
      pwd2 +=s;
    }
    pwd2 = pwd2.toUpperCase();
    System.out.println(pwd2.length());
    System.out.println(pwd2);
  }

}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/144170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号