本文實例講述了java使用Hex編碼解碼實現Aes加密解密功能。分享給大家供大家參考,具體如下:
這里的Aes加密解密方法使用Hex進行了編碼解碼
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
|
package com.baidu.wallet.bdwallet.utils; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.DecoderException; import org.apache.commons.codec.binary.Hex; public class Test { private static final String AES= "AES" ; private static final String UTF8= "UTF-8" ; /** * AES加密 * @param content * @param pkey * @return * @throws DecoderException */ private static byte [] encrypt(String content, String pkey) throws DecoderException { try { String private_key=pkey; byte [] encodeFormat= null ; try { //秘鑰 Hex解碼為什么秘鑰要進行解碼,因為秘鑰是某個秘鑰明文進行了Hex編碼后的值,所以在使用的時候要進行解碼 encodeFormat = Hex.decodeHex(private_key.toCharArray()); } catch (DecoderException e) { e.printStackTrace(); } SecretKeySpec key = new SecretKeySpec(encodeFormat, AES); // Cipher對象實際完成加密操作 Cipher cipher = Cipher.getInstance( "AES/ECB/PKCS5Padding" ); // 加密內容進行編碼 byte [] byteContent = content.getBytes(UTF8); // 用密匙初始化Cipher對象 cipher.init(Cipher.ENCRYPT_MODE, key); // 正式執行加密操作 byte [] result = cipher.doFinal(byteContent); return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } return null ; } /** * AES解密 * @param contents * @param password * @return * @throws DecoderException */ private static byte [] decrypt(String contents, String password) throws DecoderException { try { //密文使用Hex解碼 byte []content = Hex.decodeHex(contents.toCharArray()); //秘鑰 Hex解碼為什么秘鑰要進行解碼,因為秘鑰是某個秘鑰明文進行了Hex編碼后的值,所以在使用的時候要進行解碼 byte [] encodeFormat = Hex.decodeHex(password.toCharArray()); SecretKeySpec key = new SecretKeySpec(encodeFormat, AES); // Cipher對象實際完成加密操作 Cipher cipher = Cipher.getInstance(AES); // 用密匙初始化Cipher對象 cipher.init(Cipher.DECRYPT_MODE, key); // 正式執行解密操作 byte [] result = cipher.doFinal(content); return result; } 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(); } return null ; } /** * Aes加密 * @param context 明文 * @param private_key 秘鑰 * @return * @throws DecoderException */ public static String encryption(String context,String private_key) throws DecoderException{ //加密后的明文也就變成了密文 byte [] encryptResult = encrypt(context, private_key); //密碼文Hex編碼 String encryptResultStr = Hex.encodeHexString(encryptResult); return encryptResultStr; } /** * Aes解密 * @param context 密文 * @param private_key 秘鑰 * @return * @throws DecoderException * @throws UnsupportedEncodingException */ public static String decryption(String context,String private_key) throws DecoderException, UnsupportedEncodingException{ //這里的密文解密前先進行了Hex解碼 byte [] decryptResult = decrypt(context, private_key); String result = new String(decryptResult, UTF8); return result; } public static void main(String[] args) throws UnsupportedEncodingException, DecoderException { //加密內容 String content = "123456787654321" ; //AES加密解密秘鑰 String password = "這個值一般都是給定的,雙發都知道" ; // 加密 System.out.println( "加密前:" + content); // 調用加密方法 String encryptResultStr = encryption(content, password); System.out.println( "加密后:" + encryptResultStr); // 調用解密方法 String result = decryption(encryptResultStr, password); // 解密內容進行解碼 System.out.println( "解密后:" + result); } } |
這個方法在正式的項目中已經在使用木有問題,注意這里的AES加密解密你要要對哦……
上面使用的就是org.apache.commons.codec.binary.Hex這個類的方法,在maven中配置如下:
1
2
3
4
5
|
< dependency > < groupId >commons-codec</ groupId > < artifactId >commons-codec</ artifactId > < version >1.4</ version > </ dependency > |
注意:這里要使用1.4以及以上版本,應為1.4以下的沒有Hex.encodeHexString(byte[])這個方法!
希望本文所述對大家java程序設計有所幫助。