JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java SE 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 檔案加解密的問題
逆天銀狼





發文: 3
積分: 0
於 2011-04-29 11:53 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
目前公司需要做一個可以產生PublicKey與PrivateKey的文件加解密的程式
目前可以產生PublicKey與PrivateKey並使用PrivateKey做加密的動作,
但在用PublicKey做解密時會產生 java.io.OptionalDataException。
請問各位大大,是否有什麼地方做錯或沒注意到的部份。
肯請賜教@@

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
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import javax.print.DocFlavor.BYTE_ARRAY;
 
/**
 *
 * @author tsao
 */
public class FileFactory {
    
    private FileInputStream fin;
    private ObjectInputStream in;
    private ObjectOutputStream out;
    private Signature signature;
    
    public FileFactory(){
        try{
        signature = Signature.getInstance("DSA");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 加密檔案
     */
    public void encodeFile(PrivateKey privateKey, File file, File enFile){
        try{
            
            fin = new FileInputStream(file);
            byte[] xml = new byte[fin.available()];
            fin.read(xml);
            fin.close();
            
            signature.initSign(privateKey);
            signature.update(xml);
            byte[] signed = signature.sign();
            
            out = new ObjectOutputStream(new FileOutputStream(enFile));
            out.writeObject(file);
            out.write(signed);
            out.close();
            
            System.out.println("加密成功");
        
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 解密檔案
     */
    public void decodeFile(PublicKey publicKey, File enFile, File deFile){
        try{
            
            fin = new FileInputStream(enFile);
            in = new ObjectInputStream(fin);
            
            File file = (File) in.readObject();
            byte[] signed= (byte[]) in.readObject();
            byte[] xml = new byte[fin.available()];
            
            fin.read(xml);
            fin.close();
            in.close();
            
            fin = new FileInputStream(file);
            byte[] newXml = new byte[fin.available()];
            fin.read(newXml);
            fin.close();
            
            signature.initVerify(publicKey);
            signature.update(xml);
            
            if (signature.verify(signed)) {
                
                FileOutputStream fout = new FileOutputStream(deFile);
                fout.write(newXml);
                fout.close();
                System.out.print("解密成功");
                
            } else {
                System.out.print("解密失敗");
            }
            
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    
}


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
2505 檔案加解密的問題 逆天銀狼 2914 2011-04-29 11:53
2414 Re:檔案加解密的問題 逆天銀狼 170 2011-04-29 12:06
2452 Re:檔案加解密的問題 weber 3617 2011-04-29 23:44
2388 Re:檔案加解密的問題 逆天銀狼 5 2011-05-06 10:41
» JWorld@TW »  Java SE 討論區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8