激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

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

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

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

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

AES對稱加密和解密代碼詳細(xì)介紹,供大家參考,具體內(nèi)容如下 

?
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.構(gòu)造密鑰生成器
  * 2.根據(jù)ecnodeRules規(guī)則初始化密鑰生成器
  * 3.產(chǎn)生密鑰
  * 4.創(chuàng)建和初始化密碼器
  * 5.內(nèi)容加密
  * 6.返回字符串
  */
  public static String AESEncode(String encodeRules,String content){
    try {
      //1.構(gòu)造密鑰生成器,指定為AES算法,不區(qū)分大小寫
      KeyGenerator keygen=KeyGenerator.getInstance("AES");
      //2.根據(jù)ecnodeRules規(guī)則初始化密鑰生成器
      //生成一個(gè)128位的隨機(jī)源,根據(jù)傳入的字節(jié)數(shù)組
      keygen.init(128, new SecureRandom(encodeRules.getBytes()));
       //3.產(chǎn)生原始對稱密鑰
      SecretKey original_key=keygen.generateKey();
       //4.獲得原始對稱密鑰的字節(jié)數(shù)組
      byte [] raw=original_key.getEncoded();
      //5.根據(jù)字節(jié)數(shù)組生成AES密鑰
      SecretKey key=new SecretKeySpec(raw, "AES");
       //6.根據(jù)指定算法AES自成密碼器
      Cipher cipher=Cipher.getInstance("AES");
       //7.初始化密碼器,第一個(gè)參數(shù)為加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二個(gè)參數(shù)為使用的KEY
      cipher.init(Cipher.ENCRYPT_MODE, key);
      //8.獲取加密內(nèi)容的字節(jié)數(shù)組(這里要設(shè)置為utf-8)不然內(nèi)容中如果有中文和英文混合中文就會(huì)解密為亂碼
      byte [] byte_encode=content.getBytes("utf-8");
      //9.根據(jù)密碼器的初始化方式--加密:將數(shù)據(jù)加密
      byte [] byte_AES=cipher.doFinal(byte_encode);
     //10.將加密后的數(shù)據(jù)轉(zhuǎn)換為字符串
      //這里用Base64Encoder中會(huì)找不到包
      //解決辦法:
      //在項(xiàng)目的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();
    }
    
    //如果有錯(cuò)就返加nulll
    return null;    
  }
  /*
   * 解密
   * 解密過程:
   * 1.同加密1-4步
   * 2.將加密后的字符串反紡成byte[]數(shù)組
   * 3.將加密內(nèi)容解密
   */
  public static String AESDncode(String encodeRules,String content){
    try {
      //1.構(gòu)造密鑰生成器,指定為AES算法,不區(qū)分大小寫
      KeyGenerator keygen=KeyGenerator.getInstance("AES");
      //2.根據(jù)ecnodeRules規(guī)則初始化密鑰生成器
      //生成一個(gè)128位的隨機(jī)源,根據(jù)傳入的字節(jié)數(shù)組
      keygen.init(128, new SecureRandom(encodeRules.getBytes()));
       //3.產(chǎn)生原始對稱密鑰
      SecretKey original_key=keygen.generateKey();
       //4.獲得原始對稱密鑰的字節(jié)數(shù)組
      byte [] raw=original_key.getEncoded();
      //5.根據(jù)字節(jié)數(shù)組生成AES密鑰
      SecretKey key=new SecretKeySpec(raw, "AES");
       //6.根據(jù)指定算法AES自成密碼器
      Cipher cipher=Cipher.getInstance("AES");
       //7.初始化密碼器,第一個(gè)參數(shù)為加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二個(gè)參數(shù)為使用的KEY
      cipher.init(Cipher.DECRYPT_MODE, key);
      //8.將加密并編碼后的內(nèi)容解碼成字節(jié)數(shù)組
      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();
    }
    
    //如果有錯(cuò)就返加nulll
    return null;    
  }
  
  public static void main(String[] args) {
    SymmetricEncoder se=new SymmetricEncoder();
    Scanner scanner=new Scanner(System.in);
    /*
     * 加密
     */
    System.out.println("使用AES對稱加密,請輸入加密的規(guī)則");
    String encodeRules=scanner.next();
    System.out.println("請輸入要加密的內(nèi)容:");
    String content = scanner.next();
    System.out.println("根據(jù)輸入的規(guī)則"+encodeRules+"加密后的密文是:"+se.AESEncode(encodeRules, content));
    
    /*
     * 解密
     */
    System.out.println("使用AES對稱解密,請輸入加密的規(guī)則:(須與加密相同)");
     encodeRules=scanner.next();
    System.out.println("請輸入要解密的內(nèi)容(密文):");
     content = scanner.next();
    System.out.println("根據(jù)輸入的規(guī)則"+encodeRules+"解密后的明文是:"+se.AESDncode(encodeRules, content));
  }
 
}

測試結(jié)果:

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品av久久久久久久久久 | 欧美色性 | 欧美日韩在线中文字幕 | 欧美激情综合在线 | 久久免费精品 | 国产盼盼私拍福利视频99 | 国产一级毛片高清视频 | 亚洲九九色| 国产精品久久久久久久久粉嫩 | 国产欧美在线观看不卡一 | 九九热精品在线视频 | 国产成人自拍视频在线 | 亚洲成a| av在线收看| 人人舔人人插 | 亚洲一区成人在线 | 亚洲va久久久噜噜噜久牛牛影视 | 久国产精品视频 | 日韩毛片毛片久久精品 | 黄色片网站免费在线观看 | 久久精品成人影院 | 神马久久蜜桃 | 国产亚洲精彩视频 | 国产又粗又爽又深的免费视频 | 午夜视频观看 | 国产婷婷一区二区三区 | 精品亚洲视频在线 | 日本高清一级片 | 99精品视频在线观看免费播放 | 中文字幕观看 | 精品一区二区三区免费毛片爱 | 国产91在线播放九色 | 欧美不卡 | 4p一女两男做爰在线观看 | 一级免费特黄视频 | 久久人人爽人人爽人人片av高请 | 日本成人一区二区三区 | 欧美视频在线一区二区三区 | 国产精品视频自拍 | 99精品视频在线看 | 黄色影视免费看 |