JAVA简单加密解密,写入文件再读取解密就不行了

用的是RC4算法,非常简单的算法,加密解密算法是一样的,函数是下面代码中的「HloveyRC4」。有个问题是,加密一个字符串的时候如果加密完之后立即在内存中解密,试过了是... 用的是RC4算法,非常简单的算法,加密解密算法是一样的,函数是下面代码中的「HloveyRC4」。有个问题是,加密一个字符串的时候如果加密完之后立即在内存中解密,试过了是没有问题的;但是如果先把文件写入c:/encrypted.txt,再读出来,解密,就解不出来了,只能解出来部分(代码在下面),如图:

有人知道是为啥吗。。。求大神
代码放在百度网盘里,只是一个Java文件:
http://pan.baidu.com/s/1c027yr2
展开
 我来答
百度网友dfd5459
2014-03-28 · TA获得超过365个赞
知道小有建树答主
回答量:358
采纳率:0%
帮助的人:281万
展开全部
这个因为加密的时候使用char[]数组,输出到文件的时蔽衫候用GBK编码,而一些字符GBK无法编码,因此到文件中用"?"替代了。
你可以比较一下encryptedStr与lines,虽然控制台看着是一样,但宏闷腔不是同一个字符串,只不过乱码字符都用"?"表罩启示了
追问
您好!按照您说的,我用if比较,果然不等,我把输出到文件的方法改为用UTF-8编码,读取也用UTF-8读取,还是显示不等,但是已经可以解密了。
我其实是想从文件读取字符串加密,当读取一个ANSI编码的CallLog.txt再用您的方法,还是解密不出来。。
代码在这里,若能浪费您的精力指导一下,万分感谢:
http://pan.baidu.com/s/109CYy
追答

其实已经很接近了,之所以无法解密还是由于编码问题.由于加密文件是用UTF-8编码存储的,因此读入时获得的字符串是UTF-8编码的,而源数据是GBK编码,因此需要将UTF-8的加密字符串转为GBK然后解密才能产生正确的结果。

可以使用

String gbkLines = URLDecoder.decode(URLEncoder.encode(lines, "GBK"), "GBK");

来得到GBK编码的字符

何人降临
2014-03-28 · 超过18用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:42.6万
展开全部
你要确定eclipse设置里的编码是gbk
追问
是GBK的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友43bd579
2014-03-28 · 超过14用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:33.8万
展开全部
是否是控制台编码有问题呢?
追问
不是,因为输出到文件里也是一样的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式