JAVA简单加密解密,写入文件再读取解密就不行了
用的是RC4算法,非常简单的算法,加密解密算法是一样的,函数是下面代码中的「HloveyRC4」。有个问题是,加密一个字符串的时候如果加密完之后立即在内存中解密,试过了是...
用的是RC4算法,非常简单的算法,加密解密算法是一样的,函数是下面代码中的「HloveyRC4」。有个问题是,加密一个字符串的时候如果加密完之后立即在内存中解密,试过了是没有问题的;但是如果先把文件写入c:/encrypted.txt,再读出来,解密,就解不出来了,只能解出来部分(代码在下面),如图:
有人知道是为啥吗。。。求大神
代码放在百度网盘里,只是一个Java文件:
http://pan.baidu.com/s/1c027yr2 展开
有人知道是为啥吗。。。求大神
代码放在百度网盘里,只是一个Java文件:
http://pan.baidu.com/s/1c027yr2 展开
3个回答
展开全部
这个因为加密的时候使用char[]数组,输出到文件的时候用GBK编码,而一些字符GBK无法编码,因此到文件中用"?"替代了。
你可以比较一下encryptedStr与lines,虽然控制台看着是一样,但不是同一个字符串,只不过乱码字符都用"?"表示了
你可以比较一下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编码的字符
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询