RC4加密解密

  今天丹伟兄让我尝试一下RC4算法加密解密。以前AES解密出来各类「锟斤拷」我已接近崩溃。java

  这个RC4相比AES就轻量多了,不用导入各类类,连keygen的步骤也没有,只通过一系列可见的数学运算,并且加密解密用一套算法。轻车熟路地把代码弄过来,又出现了直接在内存中读取加密数据而且解密可以成功,可是先「落地」写到文件里再读取解密就不行的状况。算法

  丹伟兄建议我用把内存中的东西弄出来跟读取的东西对比一下。编码

  可是刚才遇到一个须要注意的地方:加密

		    String line = null ; 
//		    String content = null ;
		    String content = "";
		    while(true)
		    {
		    	line = br.readLine();
		    	if(line == null ) break;
		    	content = content + line ;
		    }

  这里用BufferedReader的Readline方法,可是要注意content这里不能定义成null,否则会读完以后content的内容会变成nullxxxxx...最前面有个「null」。code

  

  用OutStreamWriter输出,指定字符编码,若是指定成UTF-8,像这样:blog

OutputStreamWriter osw = new OutputStreamWriter(os,Charset.forName("UTF-8"));

  就会出现这种状况:ip

「准备写入的」和「读取的」已经不同了。。。这样就别解密了。 内存

Unicode输出,是这种状况:数学

ASCII:it

GBK:

正常了。另外,GB2312也不正常。

能够看出,在OutputStreamWriter中无论用什么编码输出,「加密后的,准备写入文件的」是相同的(废话,这里尚未涉及到编码呢)。可是一旦用不一样的编码写进文件,再读出来,马上打印出来,就不同了。

为何只有GBK是正常的?想起昨天「师妹」提到的Eclipse的默认编码,是否是由于他的默认编码是GBK呢?

试着改为UTF-8以后Android自动更新各类R.java...我担忧它变不回来了(结果是能够变回来的)。

 改为UTF-8以后连没加密的内容都是乱码了,好吧,改回GBK。这时候已经晚了,当前页面的类中已经出现了各类「锟斤拷」。还好其余文件没有。

 明天继续,必定把这东西搞清楚。

------------------Mar.30,2014-------------------

过了不少天。今天解决了。换了算法。我只想说,加密后必定要把密文换成16进制储存,这样能够避免各类由于编码出现的问题。

另外,树挪死,人挪活,别盯着同一个算法实现方式,有时候换一个就迎刃而解了。

相关文章
相关标签/搜索