一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 中 MD5加密的實例

java 中 MD5加密的實例

2021-01-07 14:00海那邊的小萌男 Java教程

這篇文章主要介紹了java 中 MD5加密的實例的相關資料,通過本文希望能幫助到大家,需要的朋友可以參考下

javaMD5加密的實例

前言:

今天我來學習利用JAVA編程,通過MD5來實現加密,同時實現驗證用戶登錄原理。

主要是 過程:

將原文的byte 文件通過 MD5加密完成 后。再將其轉化為我們能看懂的密文(MD5生成的byte數據,我們無法識別)

主要代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package techDemo;
 
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
 
import org.junit.Test;
 
import sun.misc.BASE64Encoder;
 
/**
 * MD5加密算法
 * @author<a href="mailto:[email protected]" rel="external nofollow" >胡龍華</a>
 * @version 2017-5-30 下午1:34:51
 * @fileName MD5.java
 */
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);
/* 輸出結果 
    16
    gnzLDuqKcGxMNKFokfhOew==
    827ccbe0ea8a706c4c34a16891f84e7b */
  }
 
  // 演示模擬用戶登錄
  @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;
  }
 
}

下面是 我們老師的代碼 更加細節

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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);
  }
 
  /*
   * demo2()方法的缺點:
   * 1. 密文不是我們最習慣的16進制方式
   * 2. 所使用的類BASE64Encoder在API中沒有,意味著該類是沒有公開
   *  給我們程序員用的,因此它如果變動了,我們是無話可說的即不穩定的!
   *  ---不在接口中,官方是可以隨便更改
   */
 
  @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);
  }
 
}

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/weixin_37720904/article/details/72809769

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品久久久久久亚洲 | 激情文学综合网 | 男人天堂999 | 久久国产视频网 | 四虎麻豆 | 九九99热久久精品在线6 | 叛佛 作者满栀小说免费阅读 | 午夜私人福利影院 | 青草青草视频2免费观看 | 翁熄性放纵交换01 | 男人女人性生活视频 | aaa一级毛片免费 | 韩剧hd| 欧美一级精品 | 好性20岁 | 免费高清在线观看 | 亚洲高清成人 | 网站色小妹 | 久久亚洲电影www电影网 | 猫咪免费人成网站在线观看入口 | 手机看片福利盒子久久 | 97网站| 精品一区二区三区自拍图片区 | 高h射尿| 欧美黑大吊 | 欧美精品一二三区 | 亚洲国产在线观看免费视频 | 国产成人啪精品午夜在线观看 | 亚洲第一免费播放区 | 日韩在线资源 | 亚洲人成激情在线播放 | 男人的天堂久久精品激情 | 波多野结衣家庭教师 | 奇米网7777| 日本高清在线不卡 | 欧美精品久久久久久久免费观看 | 特黄特级高清免费视频毛片 | 日本-区二区三区免费精品 日本破处 | 男人插女人软件 | 日本偷偷操 | 97色综合|