> Java > java지도 시간 > Java의 DES 암호화 및 복호화 도구 클래스 구현 예

Java의 DES 암호화 및 복호화 도구 클래스 구현 예

黄舟
풀어 주다: 2017-09-28 09:23:20
원래의
2129명이 탐색했습니다.

이 글에서는 주로 Java로 구현된 DES 암호화 및 복호화 도구 클래스를 소개합니다. 구체적인 예를 바탕으로 Java로 구현된 DES 암호화 및 복호화 도구 클래스의 정의와 사용법을 분석합니다. 이 기사에서는 Java로 구현된 DES 암호화 및 암호 해독 도구 클래스에 대해 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

매우 일반적으로 사용되는 도구 클래스입니다. 심층적인 조사는 하지 않겠습니다. 그러면 직접 사용할 수 있습니다.

DesUtil.java

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

package lsy;

import java.security.Key;

import java.security.SecureRandom;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

public class DesUtil {

 /**

  * @param args

  */

 public static void main(String[] args) {

  //以下是加密方法algorithm="AES"的测试

  System.out.println(DesUtil.getInstance("lushuaiyin").getEnCodeString("hello"));

  //输出 LDewGAZkmWHeYFjBz56ylw==

  //将上面的密文解密:

  System.out.println(DesUtil.getInstance("lushuaiyin").getDecodeString("LDewGAZkmWHeYFjBz56ylw=="));

  //输出 hello

  //改变密钥测试

  System.out.println(DesUtil.getInstance("suolong").getEnCodeString("hello"));

  //输出 /RLowOJ+Fr3KdMcdJeNatg==

  System.out.println(DesUtil.getInstance("suolong").getDecodeString("/RLowOJ+Fr3KdMcdJeNatg=="));

  //输出 hello

  //如果使用不正确的密钥解密,将会:

  System.out.println(DesUtil.getInstance("suolong").getDecodeString("LDewGAZkmWHeYFjBz56ylw=="));

 }

 private SecretKey key=null;//密钥

 //定义 加密算法,可用 DES,DESede,Blowfish,AES

 //不同的加密方式结果会不同

 private static String algorithm="AES";

 private static DesUtil desUtil=null;

 public DesUtil(){}

 public static DesUtil getInstance(String strKey){

  desUtil=new DesUtil();

  desUtil.createKey(strKey);

  return desUtil;

 }

 /**

  * algorithm 算法

  * @param strKey

  */

 public void createKey(String strKey){

  try{

   KeyGenerator kg=KeyGenerator.getInstance(DesUtil.algorithm);

   byte[] bt=strKey.getBytes("UTF-8");

   SecureRandom sr=new SecureRandom(bt);

   kg.init(sr);

   this.setKey(kg.generateKey());

  }catch(Exception e){

  }

 }

 /**

  * 加密方法,返回密文

  * cipher 密码

  * @param dataStr

  */

 public String getEnCodeString(String dataStr){

  byte[] miwen=null;//密文

  byte[] mingwen=null;//明文

  Cipher cipher;

  String result="";//密文字符串

  try{

   mingwen=dataStr.getBytes("UTF-8");

   cipher=Cipher.getInstance(DesUtil.algorithm);

   cipher.init(Cipher.ENCRYPT_MODE, this.getKey());

   miwen=cipher.doFinal(mingwen);

   BASE64Encoder base64en = new BASE64Encoder();

   result=base64en.encodeBuffer(miwen);//或者可以用下面的方法得到密文,结果是不一样的,都可以正常解密

//   result=byte2hex(miwen);//密文结果类似2C:37:B0:18:06:64:99:61:DE:60:58:C1:CF:9E:B2:97

  }catch(Exception e){

   e.printStackTrace();

  }

  return result;

 }

 /**

  * 解密方法,返回明文

  * @param codeStr

  * @return

  */

 public String getDecodeString(String codeStr){

  BASE64Decoder base64De = new BASE64Decoder();

  byte[] miwen=null;

  byte[] mingwen=null;

  String resultData="";//返回的明文

  Cipher cipher;

  try{

   miwen=base64De.decodeBuffer(codeStr);

   cipher=Cipher.getInstance(DesUtil.algorithm);

   cipher.init(Cipher.DECRYPT_MODE, this.getKey());

   mingwen=cipher.doFinal(miwen);

   resultData = new String(mingwen,"UTF-8");

  }catch(Exception e){

   return "密钥不正确或其他原因导致异常,无法解密!";

  }

  return resultData;

 }

  //二行制转字符串

 public String byte2hex(byte[] b) {

  String hs = "";

  String stmp = "";

  for (int n = 0; n < b.length; n++) {

   stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

   if (stmp.length() == 1)

    hs = hs + "0" + stmp;

   else

    hs = hs + stmp;

   if (n < b.length - 1)

    hs = hs + ":";

  }

  return hs.toUpperCase();

 }

 public SecretKey getKey() {

  return key;

 }

 public void setKey(SecretKey key) {

  this.key = key;

 }

 public static String getAlgorithm() {

  return algorithm;

 }

 public static void setAlgorithm(String algorithm) {

  algorithm = algorithm;

 }

}

로그인 후 복사

실행 결과:

1

2

3

4

5

LDewGAZkmWHeYFjBz56ylw==

hello

/RLowOJ+Fr3KdMcdJeNatg==

hello

密钥不正确或其他原因导致异常,无法解密!

로그인 후 복사

위 내용은 Java의 DES 암호화 및 복호화 도구 클래스 구현 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿