java使用Hex编码解码实现Aes加密解密功能示例

2025-05-29 0 47

本文实例讲述了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程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java使用Hex编码解码实现Aes加密解密功能示例 https://www.kuaiidc.com/119221.html

相关文章

发表评论
暂无评论