看板 java 關於我們 聯絡資訊
※ 引述《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