byte[]转String再转会byte[]问题
//正确的结果 String strOriginal = "csdn xxxx"; byte[] in = strOriginal.getBytes(); byte[] out= myUtils.encode(in); byte[] deout = myUtils.decode(out); String strDecode = new String(deout); Log.e(TAG, strDecode); //错误的结果 String strOriginal = "csdn xxxx"; byte[] in = strOriginal.getBytes(); byte[] out= myUtils.encode(in); String strEncode = new String(out); //字节数组转换成String后格式好像变了 byte[] deout = myUtils.decode(strEncode.getBytes()); String strDecode = new String(deout); Log.e(TAG, strDecode);
----------
不知道字节数组--->String--->字节数组,过程中都做了什么事情导致结果不一致
加密解密问题。。。
最好中间不要转成string,像new String(xxx)这种操作很容易出问题
上面的new String(out)其实就等于new String(out, utf8)这里红色的是eclipse的默认编码,我的是utf8。
你把byte数组加密后得到的新数组就不满足utf8的编码规则了,再拿来new String(),方法内就会对编码强行调整,整出一堆乱七八糟的东西。
你可以把out和strEncode.getBytes()两个数组输出对比一下就清楚了,我就懒得试
在你new String之前字符数组是经过你编码的,但是当你new String会采用平台默认的字符集解码,接着你在调用.getBytes()又用平台默认的字符集编码。。所以在你decode时,已经不是你之前的编码了,变成了平台默认编码
解决方案就是用Base64编码一下
我觉得也可以吧加密出来的byte[]转成数字字符串
比如byte[] b = {97,98,99};转成String str = "979899"
解密先把"979899" 转成byte[] b = {97,98,99}再解密。