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

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - JAVA中AES對稱加密和解密過程

JAVA中AES對稱加密和解密過程

2020-06-04 11:31森林森 JAVA教程

這篇文章主要為大家詳細介紹了JAVA中AES對稱加密和解密過程,感興趣的小伙伴們可以參考一下

AES對稱加密和解密代碼詳細介紹,供大家參考,具體內容如下 

?
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package demo.security;
 
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Scanner;
 
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
 
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
 
/*
 * AES對稱加密和解密
 */
public class SymmetricEncoder {
 /*
  * 加密
  * 1.構造密鑰生成器
  * 2.根據ecnodeRules規則初始化密鑰生成器
  * 3.產生密鑰
  * 4.創建和初始化密碼器
  * 5.內容加密
  * 6.返回字符串
  */
  public static String AESEncode(String encodeRules,String content){
    try {
      //1.構造密鑰生成器,指定為AES算法,不區分大小寫
      KeyGenerator keygen=KeyGenerator.getInstance("AES");
      //2.根據ecnodeRules規則初始化密鑰生成器
      //生成一個128位的隨機源,根據傳入的字節數組
      keygen.init(128, new SecureRandom(encodeRules.getBytes()));
       //3.產生原始對稱密鑰
      SecretKey original_key=keygen.generateKey();
       //4.獲得原始對稱密鑰的字節數組
      byte [] raw=original_key.getEncoded();
      //5.根據字節數組生成AES密鑰
      SecretKey key=new SecretKeySpec(raw, "AES");
       //6.根據指定算法AES自成密碼器
      Cipher cipher=Cipher.getInstance("AES");
       //7.初始化密碼器,第一個參數為加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二個參數為使用的KEY
      cipher.init(Cipher.ENCRYPT_MODE, key);
      //8.獲取加密內容的字節數組(這里要設置為utf-8)不然內容中如果有中文和英文混合中文就會解密為亂碼
      byte [] byte_encode=content.getBytes("utf-8");
      //9.根據密碼器的初始化方式--加密:將數據加密
      byte [] byte_AES=cipher.doFinal(byte_encode);
     //10.將加密后的數據轉換為字符串
      //這里用Base64Encoder中會找不到包
      //解決辦法:
      //在項目的Build path中先移除JRE System Library,再添加庫JRE System Library,重新編譯后就一切正常了。
      String AES_encode=new String(new BASE64Encoder().encode(byte_AES));
     //11.將字符串返回
      return AES_encode;
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (NoSuchPaddingException e) {
      e.printStackTrace();
    } catch (InvalidKeyException e) {
      e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
      e.printStackTrace();
    } catch (BadPaddingException e) {
      e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    
    //如果有錯就返加nulll
    return null;    
  }
  /*
   * 解密
   * 解密過程:
   * 1.同加密1-4步
   * 2.將加密后的字符串反紡成byte[]數組
   * 3.將加密內容解密
   */
  public static String AESDncode(String encodeRules,String content){
    try {
      //1.構造密鑰生成器,指定為AES算法,不區分大小寫
      KeyGenerator keygen=KeyGenerator.getInstance("AES");
      //2.根據ecnodeRules規則初始化密鑰生成器
      //生成一個128位的隨機源,根據傳入的字節數組
      keygen.init(128, new SecureRandom(encodeRules.getBytes()));
       //3.產生原始對稱密鑰
      SecretKey original_key=keygen.generateKey();
       //4.獲得原始對稱密鑰的字節數組
      byte [] raw=original_key.getEncoded();
      //5.根據字節數組生成AES密鑰
      SecretKey key=new SecretKeySpec(raw, "AES");
       //6.根據指定算法AES自成密碼器
      Cipher cipher=Cipher.getInstance("AES");
       //7.初始化密碼器,第一個參數為加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二個參數為使用的KEY
      cipher.init(Cipher.DECRYPT_MODE, key);
      //8.將加密并編碼后的內容解碼成字節數組
      byte [] byte_content= new BASE64Decoder().decodeBuffer(content);
      /*
       * 解密
       */
      byte [] byte_decode=cipher.doFinal(byte_content);
      String AES_decode=new String(byte_decode,"utf-8");
      return AES_decode;
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (NoSuchPaddingException e) {
      e.printStackTrace();
    } catch (InvalidKeyException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
      e.printStackTrace();
    } catch (BadPaddingException e) {
      e.printStackTrace();
    }
    
    //如果有錯就返加nulll
    return null;    
  }
  
  public static void main(String[] args) {
    SymmetricEncoder se=new SymmetricEncoder();
    Scanner scanner=new Scanner(System.in);
    /*
     * 加密
     */
    System.out.println("使用AES對稱加密,請輸入加密的規則");
    String encodeRules=scanner.next();
    System.out.println("請輸入要加密的內容:");
    String content = scanner.next();
    System.out.println("根據輸入的規則"+encodeRules+"加密后的密文是:"+se.AESEncode(encodeRules, content));
    
    /*
     * 解密
     */
    System.out.println("使用AES對稱解密,請輸入加密的規則:(須與加密相同)");
     encodeRules=scanner.next();
    System.out.println("請輸入要解密的內容(密文):");
     content = scanner.next();
    System.out.println("根據輸入的規則"+encodeRules+"解密后的明文是:"+se.AESDncode(encodeRules, content));
  }
 
}

測試結果:

使用AES對稱加密,請輸入加密的規則
使用AES對稱加密
請輸入要加密的內容:
使用AES對稱加密
根據輸入的規則使用AES對稱加密加密后的密文是:Z0NwrNPHghgXHN0CqjLS58YCjhMcBfeR33RWs7Lw+AY=
使用AES對稱解密,請輸入加密的規則:(須與加密相同)
使用AES對稱加密
請輸入要解密的內容(密文):
Z0NwrNPHghgXHN0CqjLS58YCjhMcBfeR33RWs7Lw+AY=
根據輸入的規則使用AES對稱加密解密后的明文是:使用AES對稱加密

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎影视地址 | 男人天堂资源网 | ffyybb免费福利视频 | 高人先生免费观看全集 | 日韩精品欧美高清区 | a一级一级 | www.精品在线| 成人一区二区丝袜美腿 | 娇妻与公陈峰姚瑶小说在线阅读 | 黄a一级| asspics大尿chinese | 男人午夜禁片在线观看 | 亚洲无线一二三区2021 | 五月天国产精品 | 国色天香高清版 | 青青草国产精品久久碰 | 欧美精品一区二区三区免费播放 | 99久久久久国产 | 青草青青在线视频观看 | 日韩精品一区二三区中文 | 亚洲狼人香蕉香蕉在线28 | 日韩aaa| 久久综合中文字幕佐佐木希 | 我与么公激情性完整视频 | 青草视频在线观看视频 | 日本高清视频网站www | 久久机热视频 这里只有精品首页 | 久久婷婷五月综合色丁香花 | 国产精品久久毛片完整版 | 久久一er精这里有精品 | www.色香蕉| 午夜一个人在线观看完整版 | 性色香蕉AV久久久天天网 | 毛茸茸的大逼 | 粉嫩极品国产在线观看免费 | 日韩视频一区 | 秘书在办公室疯狂被hd | 四虎最新网址在线观看 | 国产精品一区二区三区免费 | 91茄子| 亚州笫一色惰网站 |