首页 Java java教程 java使用Hex编码解码实现Aes加密解密功能示例

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

Jan 24, 2017 am 10:56 AM

本文实例讲述了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使用Hex编码解码实现Aes加密解密功能示例相关文章请关注PHP中文网!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

两个点博物馆:邦格荒地地点指南
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

两个点博物馆:邦格荒地地点指南
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型? Java的类负载机制如何起作用,包括不同的类载荷及其委托模型? Mar 17, 2025 pm 05:35 PM

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案? 如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案? Mar 17, 2025 pm 05:46 PM

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte 2025年的前4个JavaScript框架:React,Angular,Vue,Svelte Mar 07, 2025 pm 06:09 PM

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte

如何在Java中实施功能编程技术? 如何在Java中实施功能编程技术? Mar 11, 2025 pm 05:51 PM

如何在Java中实施功能编程技术?

Node.js 20:关键性能提升和新功能 Node.js 20:关键性能提升和新功能 Mar 07, 2025 pm 06:12 PM

Node.js 20:关键性能提升和新功能

冰山:数据湖桌的未来 冰山:数据湖桌的未来 Mar 07, 2025 pm 06:31 PM

冰山:数据湖桌的未来

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射? 如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射? Mar 17, 2025 pm 05:43 PM

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存? 如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存? Mar 17, 2025 pm 05:44 PM

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?

See all articles