作者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
1F:推 superlubu:都说了先 flush CipherOutputStream 再 flush FileOutpu 12/07 19:58
2F:→ superlubu:十个出现这种空白档的人九个都是因为以为只要 flush 12/07 20:00
3F:→ superlubu:FileOutputStream 的 12/07 20:01
4F:推 icemask:大大能教一下如何写吗~~因为我看书上就是这样写 12/08 00:52
5F:→ icemask:真的不知道大大说的写法是什麽 12/08 00:54
6F:推 superlubu:你连 flush 是什麽都不知道? 它只是个 method 啊 12/08 06:32
7F:推 icemask:......~~~就真的不知道阿 12/08 11:44
8F:推 icemask:应该这麽说好了~~~是看不懂cos.flush之後 12/08 11:55
9F:→ icemask:在fos.flush()~~cos里不是要有cos(fos,cipher)吗 12/08 11:56