byte[]数组与String转换有没有可能丢失数据???(涉及DES加解密)比如要传送字符串A:把A.getBytes()加密后传出
接收方接收到后,先解密得到byte[],然后再把这个数组转换成String B
按理说得到的B应该跟A一样吧?可是我碰到的是基本上一样,但偶尔会不一样
谁知道是什么原因啊
转换方法如下:String s1 = "hello";
byte[] b = s.getBytes();
String s2 = new String(b);
(我自己在网上搜到的好像是说涉及加解密的时候,用上述方法转换byte数组和String有可能丢失数据)
如果真的是会丢失数据,那该怎样保证不会丢失??
接收方接收到后,先解密得到byte[],然后再把这个数组转换成String B
按理说得到的B应该跟A一样吧?可是我碰到的是基本上一样,但偶尔会不一样
谁知道是什么原因啊
转换方法如下:String s1 = "hello";
byte[] b = s.getBytes();
String s2 = new String(b);
(我自己在网上搜到的好像是说涉及加解密的时候,用上述方法转换byte数组和String有可能丢失数据)
如果真的是会丢失数据,那该怎样保证不会丢失??
解决方案 »
- 各位前辈麻烦你 们帮我看看这个问题
- JCreator运行不了!!!急!!!
- 一个正则表达式的问题
- spring mvc中的controller怎么获取PageContext?
- 问一个关于 CompareTo 方法的问题。
- request.getParameter()乱码问题
- 是高手都进来啊,请教java绘制线条问题,高分跪求!!!
- 一个不知道所措的问题
- java在什么网址有详细的学习材料?jbuild什么地方可以下载?怎么安装?分数随答案马上给出!
- 请问那位高手可以告诉我,resin的服务名是什么?
- 【求助】在Eclipse中Java使用JDBC连接SQL Server 2005出现的问题
- 卖票——线程,不明白为什么会出现这个结果。
具体方法:
1 把一个字符串转成8位二进制数,用DES加密,得到8位二进制数的密文
2 然后把(由1)所得的密文转成两位十六进制字符串
3 解密时,把(由2)所得的两位十六进制字符串,转换成8位二进制数的密文
4 把(由3)所得的密文,用DES进行解密,得到8位二进制数形式的明文, 并强制转换成字符串。
思考:为什么要通过两位16进制数字符串保存密文呢?
原因是:一个字符串加密后所得的8位二进制数,通常不再时字符串了,如果直接把这种密文所得的8位二进制数强制转成字符串,有许多信息因为异常
而丢失,导制解密失败。因此要把这个8位二制数,直接以数的形式保存下来,而通常是用两位十六进制数表示。希望对你有帮助,给分吧,哈哈
1)网上答案有正确的,也有很多不正确的.
2)转换方法如下:
String s1 = "hello";
byte[] b = s.getBytes();//你这是按默认平台编码方案转成字节数组的
//将该字节数组加密,通过字节流网络传输.
//对方完整地收到.
//解密还原
String s2 = new String(b); //按默认平台编码方案转成字节数组的理论上:楼主的方案是没有任何问题的.你的担心是不存在的.
若有丢失:则可能的地方有:
1)发与收的双方的默认平台编码不一致.(如:WIN下是GBK,而LINUX下是UTF-8,这样当然会出问题)
2)网络发送与接收时,程序代码写得不好,字节数据没有确保完整地接收到
3)加解密算法有问题.即:对于一些很特殊的数据,加密后的数据,在解密还原时不能完整地还原了.以上仅供楼主参考
byte[] b = s.getBytes();
String s2 = new String(b);
这个倒是常用,至于会不会丢失数据,有这个可能,可以忽略
byte[] b = s.getBytes("UTF-8");
String s2 = new String(b,"UTF-8");
上面的UTF-8只是作个例子,转化为字节流和字符时最好能自己指定编码
String s1 = "hello";
byte[] b = s.getBytes();
String s2 = new String(b);
来转换是绝对不行的,希望能解决。目前我是直接将加密的结果用byte[]来保存,然后在传给解密方法byte[]型参数。
找了一个早上,终于看到解决办法啦
试过了,可以正确解决编码问题。
至于byte输出的内容,是一个hashCode,网上有说明的,很容易找。