java的对称加密

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.} 

猜你喜欢

转载自weitao1026.iteye.com/blog/2266326