六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 23|回复: 0

string、byte、位运算碰到问题

[复制链接]

升级  44.67%

29

主题

29

主题

29

主题

秀才

Rank: 2

积分
117
 楼主| 发表于 2013-1-26 13:04:06 | 显示全部楼层 |阅读模式
情景:java对byte[]做^实现加密,C对Char[]做^运算来解密。
错误:
加密,java中对原文转换成byte数组,然后做^运算,这个过程中将返回结果做了一次new String(),得到加密结果。
解密,getBytes()拿到密文,然后做^运算,打印发现结果不是原文了。
 
原因,new String()会抛弃编码中不存在的byte,处理latin1编码兼容所有的。故去掉中间new String()的步骤就可以了。
 
/** * 加密 * @param str * @param srclen */public static byte[] cbt_crypt(String str, int srclen) {int i;int j=0;String tmp = "badboy_blue";byte[] key = tmp.getBytes();byte[] stri = str.getBytes();for (i=0;i<srclen;i++){stri[i]^=key[j];j=(j+1)%8;}return stri;}/** * 解密 * @param str * @param srclen * @param pos * @return */public static byte[] cbt_crypt(byte[] str, int srclen, int pos){int i;int j=pos%8;String tmp = "badboy_blue";byte[] key = tmp.getBytes();for (i=0;i<srclen;i++) {str[i]^=key[j];j=(j+1)%8;}return str;} 另外附个byte[]和String之间转换信息丢失的问题:
http://blog.csdn.net/xiongyucai/archive/2008/05/23/2472662.aspx
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表