作者icemask (星風狂翼)
看板java
標題Re: [問題] 看不懂訊息~~請大大幫忙解答
時間Fri Dec 7 18:59:16 2007
※ 引述《superlubu (叔叔你人真好)》之銘言:
: : 推 icemask:大大~~我剛剛有測出來了~~加密之後會117byte->128byte 12/05 20:28
: : → icemask:這樣解密用128byte就可以了~~可是解出來的檔還是亂碼~~~ 12/05 20:29
: : → icemask:是哪邊有錯嗎 12/05 20:30
: : 推 icemask:http://www.cyut.edu.tw/~s9327122/RSA.txt 12/05 20:42
: : → icemask:這是我改過的程式~~請你看一下 12/05 20:42
: 我之所以不推薦你這樣的寫法,是因為下面兩個理由:
: 1. InputStream.read(byte[]) 並不是你把 buffer 設成 117,它就一定能讀進
: 117 個 bytes,到頭來你必需每次都先確認它讀進了多少。
: 2. 就算你每次都可以讀得到 117 bytes 進去,但讀到最後一組時必定會出現問
: 題,因為絕不會剛好每個檔案的 size 都是 117 的倍數。
: 以上兩點,在加密時也好,在解密亦好,也必定會發生,於是加密時把不必要的東西
: 加密了,解密時也把不必要的東西解密了,亂碼的出現幾乎是必然的。
: 除非你真的很想自己處理這一切東西,不然我仍然不建議棄現有的 Cipher IOStream
: 而花無謂的精力在這一方面。
-----------------------------------------------------------------------------
FileOutputStream fout=new FileOutputStream(fon);
CipherOutputStream out=new CipherOutputStream(fout,cipher);
byte[] buffer=new byte[117];
int length;
while((length=in.read(buffer))!=-1){
out.write(buffer,0,length);
}
我之前有寫這樣過,可是檔案無法輸出,所以我才會用doFinal()這個方法
還是我寫的方法有錯,請大大指教
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.214.70
推 superlubu:都說了先 flush CipherOutputStream 再 flush FileOutpu 12/07 19:58
→ superlubu:十個出現這種空白檔的人九個都是因為以為只要 flush 12/07 20:00
→ superlubu:FileOutputStream 的 12/07 20:01
推 icemask:大大能教一下如何寫嗎~~因為我看書上就是這樣寫 12/08 00:52
→ icemask:真的不知道大大說的寫法是什麼 12/08 00:54
推 superlubu:你連 flush 是什麼都不知道? 它只是個 method 啊 12/08 06:32
推 icemask:......~~~就真的不知道阿 12/08 11:44
推 icemask:應該這麼說好了~~~是看不懂cos.flush之後 12/08 11:55
→ icemask:在fos.flush()~~cos裡不是要有cos(fos,cipher)嗎 12/08 11:56