1 package test;
2
3 import java.io.FileInputStream;
4 import java.io.FileOutputStream;
5 import java.io.ObjectInputStream;
6 import java.io.ObjectOutputStream;
7 import java.security.Key;
8 import java.security.KeyPair;
9 import java.security.KeyPairGenerator;
10
11 import javax.crypto.Cipher;
12
13 public class testcase {
14
15 public static void main(String[] args) throws Exception {
16 PublicEnrypt();
17 privateDecrypt();
18
19 }
20 //加密
21 public static void PublicEnrypt() throws Exception{
22 // 实例化加密工具,使用RSA算法
23 Cipher cipher=Cipher.getInstance("RSA");
24 // 实例化Key
25 KeyPairGenerator keypairGenerator=KeyPairGenerator.getInstance("RSA");
26 // 获得一对钥匙
27 KeyPair keyPair=keypairGenerator.generateKeyPair();
28 // 获取公钥
29 Key publicKey=keyPair.getPublic();
30 // 获取私钥
31 Key privateKey=keyPair.getPrivate();
32 // 用公钥加密
33 cipher.init(Cipher.ENCRYPT_MODE, publicKey);
34 byte []result =cipher.doFinal("数据内容".getBytes("UTF-8"));
35 // 将私钥写入文件
36 saveKey(privateKey,"zxx_private.key");
37 // 加密后的数据存储
38 saveData(result,"public_encryt.dat");
39 System.out.println(new String(result,"UTF-8"));
40 }
41 //解密
42 public static void privateDecrypt() throws Exception{
43 //实例化加密工具
44 Cipher cipher=Cipher.getInstance("RSA");
45 // 获取私钥
46 Key privateKey=readKey("zxx_private.key");
47 // 获取加密后的信息
48 byte[] src=readData("public_encryt.dat");
49 // 用私钥解密
50 cipher.init(Cipher.DECRYPT_MODE, privateKey);
51 byte[] result=cipher.doFinal(src);
52 System.out.println(new String(result,"UTF-8"));
53 }
54 // 保存数据
55 public static void saveData(byte[] result,String fileName) throws Exception{
56 FileOutputStream fosData=new FileOutputStream(fileName);
57 fosData.write(result);
58 fosData.close();
59 }
60 // 保存密钥
61 public static void saveKey(Key key,String fileName) throws Exception{
62 FileOutputStream fosKey=new FileOutputStream(fileName);
63 ObjectOutputStream oosSecretKey=new ObjectOutputStream(fosKey);
64 oosSecretKey.writeObject(key);
65 oosSecretKey.close();
66 fosKey.close();
67 }
68 //读取密钥
69 public static Key readKey(String fileName) throws Exception{
70 FileInputStream fisKey=new FileInputStream(fileName);
71 ObjectInputStream oisKey=new ObjectInputStream(fisKey);
72 Key key=(Key)oisKey.readObject();
73 oisKey.close();
74 fisKey.close();
75 return key;
76 }
77 // 读取数据
78 public static byte[] readData(String fileName) throws Exception{
79 FileInputStream fisDat=new FileInputStream(fileName);
80 byte[] src=new byte[fisDat.available()];
81 int len=fisDat.read(src);
82 int total=0;
83 while(total<src.length){
84 total+=len;
85 len=fisDat.read(src, total, src.length-total);
86 }
87 fisDat.close();
88 return src;
89 }
90
91 }