java string 转为 bytes

kwyxiaoli 发布于 2014/06/14 20:38
阅读 677
收藏 2

byte[] result = desUtil.DesEncrypt(getMing.getBytes(), 1);

String mi = new String(result);

byte[] b =mi.getBytes();

输出:result:[B@6cae00e3

        b:[B@13bc6ed3

result!=b

为什么??



加载中
0
k
kwyxiaoli
求指教?
0
pcxsvl
pcxsvl
数组名result,b是两个引用,指向的是两个不同的地址,这个地址就是他们的值,所以result不等于b.
JacarriChan
JacarriChan
觉得你应该用equals,而不是==
k
kwyxiaoli
那要怎样做才能是两个值相等呢?
0
泥瓦匠BYSocket
泥瓦匠BYSocket
desUtil.DesEncrypt(

这个方法 贴出来

泥瓦匠BYSocket
泥瓦匠BYSocket
回复 @kwyxiaoli : des 算法 和 String 里面的转 方法不同 下个jdk 源码 对照着 你就知道了
k
kwyxiaoli
已贴出
0
k
kwyxiaoli
 public byte[] DesEncrypt(byte[] des_data, int flag) {
 byte[] format_key = ByteDataFormat(bytekey, flag);
 byte[] format_data = ByteDataFormat(des_data, flag);
 int datalen = format_data.length;
 int unitcount = datalen / 8;
 byte[] result_data = new byte[datalen];
 for (int i = 0; i < unitcount; i++) {
  byte[] tmpkey = new byte[8];
  byte[] tmpdata = new byte[8];
  System.arraycopy(format_key, 0, tmpkey, 0, 8);
  System.arraycopy(format_data, i * 8, tmpdata, 0, 8);
  byte[] tmpresult = UnitDes(tmpkey, tmpdata, flag);
  System.arraycopy(tmpresult, 0, result_data, i * 8, 8);
 } // 当前为解密过程,去掉加密时产生的填充位
 byte[] decryptbytearray = null;
 if (flag == 0) {
  int total_len = datalen;
  int delete_len = result_data[total_len - 8 - 1];
  delete_len = ((delete_len >= 1) && (delete_len <= 8)) ? delete_len : 0;
  decryptbytearray = new byte[total_len - delete_len - 8];
  boolean del_flag = true;
  for (int k = 0; k < delete_len; k++) {
   if (delete_len != result_data[total_len - 8 - (k + 1)])
    del_flag = false;
  }
if (del_flag == true) {
   System.arraycopy(result_data, 0, decryptbytearray, 0, total_len- delete_len - 8);
  }
 }
 return (flag == 1) ? result_data : decryptbytearray;
}
0
excepiton
excepiton

if(b.length != result.length) return false;

for(int i=0;i<b.length;i++){

    if(b[i]!=result[i]) return false;

}

return true;

返回顶部
顶部