DES (Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64 位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密
实例:
Java代码 复制代码 收藏代码
1.package cn.tzz.java.crypto.des;
2.
3.import java.security.Key;
4.import java.security.SecureRandom;
5.
6.import javax.crypto.Cipher;
7.import javax.crypto.KeyGenerator;
8.import javax.crypto.SecretKey;
9.import javax.crypto.SecretKeyFactory;
10.import javax.crypto.spec.DESKeySpec;
11.import javax.crypto.spec.SecretKeySpec;
12.
13.import org.junit.Test;
14.
15.
16.import sun.misc.BASE64Decoder;
17.import sun.misc.BASE64Encoder;
18.
19.
20.public class DESUtil {
21.
22. public String ALGORITHM = "DES";
23.
24. public String encryptBASE64(byte[] key) {
25. return (new BASE64Encoder()).encodeBuffer(key);
26. }
27.
28. public byte[] decryptBASE64(String key) {
29. try {
30. return new BASE64Decoder().decodeBuffer(key);
31. } catch (Exception e) {
32. e.printStackTrace();
33. }
34. return null;
35. }
36.
37. /** 生成密钥串 */
38. public String initKey(String seed) {
39. String key = null;
40. try {
41. SecureRandom secureRandom = null;
42. secureRandom = new SecureRandom(decryptBASE64(seed));
43. KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM);
44. kg.init(secureRandom);
45. SecretKey secretKey = kg.generateKey();
46. key = encryptBASE64(secretKey.getEncoded());
47. } catch (Exception e) {
48. e.printStackTrace();
49. }
50. return key;
51. }
52.
53. /** 创建密钥对象 */
54. public Key createKey(byte[] key) {
55. SecretKey secretKey = null;
56. try {
57. DESKeySpec dks = new DESKeySpec(key);
58. SecretKeyFactory keyFactory = SecretKeyFactory
59. .getInstance(ALGORITHM);
60. secretKey = keyFactory.generateSecret(dks);
61. // 当使用其他对称加密算法时,如AES、Blowfish等算法时,用下述代码替换上述三行代码
62. // secretKey = new SecretKeySpec(key, ALGORITHM);
63. } catch (Exception e) {
64. e.printStackTrace();
65. }
66. return secretKey;
67. }
68.
69. /** 加密 */
70. public byte[] encrypt(byte[] data, Key key) {
71. byte[] cipherByte = null;// 定义要生成的密文
72. try {
73. Cipher cipher = Cipher.getInstance(ALGORITHM);
74. SecureRandom sr = new SecureRandom();// 加密随机数生成器 (可以不写)
75. cipher.init(Cipher.ENCRYPT_MODE, key, sr);
76. cipherByte = cipher.doFinal(data);
77. } catch (Exception e) {
78. e.printStackTrace();
79. }
80. return cipherByte;
81. }
82.
83. /** 解密 */
84. public byte[] decrypt(byte[] data, Key key) {
85. byte[] cipherByte = null;// 定义要生成的密文
86. try {
87. Cipher cipher = Cipher.getInstance(ALGORITHM);
88. SecureRandom sr = new SecureRandom();// 加密随机数生成器 (可以不写)
89. cipher.init(Cipher.DECRYPT_MODE, key, sr);
90. cipherByte = cipher.doFinal(data);
91. } catch (Exception e) {
92. e.printStackTrace();
93. }
94. return cipherByte;
95. }
96.
97. @Test
98. public void testDes() {
99. String content = "中文123456";
100. String keyStr = initKey("QWE!@#123qwe123");;
101. System.out.println("原文:" + content);
102. System.out.println("密钥:" + keyStr);
103. Key key = createKey(decryptBASE64(keyStr));
104. byte[] encryptByte = encrypt(content.getBytes(), key);
105. String encryptStr = encryptBASE64(encryptByte);
106. System.out.println("加密后:" + encryptStr);
107. byte[] decryptByte = decrypt(decryptBASE64(encryptStr), key);
108. String outputStr = new String(decryptByte);
109. System.out.println("解密后:" + outputStr);
110. }
111.}
java的对称加密
猜你喜欢
转载自weitao1026.iteye.com/blog/2266326
今日推荐
周排行