当前位置:编程学习 > JAVA >>

关于java哈希编码的问题??

问题描述:我在java中对byte[]中的数据进行哈希计算,再将得出的结果进行base64编码,得出一段字符数据。将同样的功能在vs c++ 和c#中进行哈希运行,得出的结果都和在java中的结果不一致。

java中的打印输出:
  b4[]内存:44 -86 -120 -24 111 -64 -118 66 -126 66 -77 116 -50 -90 69 -106 50 48 49 48 45 48 57 45 49 54 84 48 55 58 53 48 58 52 53 90 117 115 101 114 112 97 115 115 119 111 114 100 

  hash:-74 -29 -110 -92 105 69 -108 -123 -20 -93 58 -72 28 83 94 120 103 -123 44 66
  base64输出: tuOSpGlFlIXsozq4HFNeeGeFLEI=
从该结果带到实际验证后,证实其是正确的。
代码如下:
   String strSoapHeader = new String();
String strNonce = new String("LKqI6G/AikKCQrN0zqZ易做图==");
String strPasswordDigest = null;
try {
byte b1[] = Base64.decode(strNonce.getBytes("UTF-8"));
byte b2[] = strDate.getBytes("UTF-8");

byte b3[] = strPassword.getBytes("UTF-8");
byte b4[] = new byte[b1.length+b2.length+b3.length];
int offset = 0;
System.arraycopy(b1, 0, b4, offset, b1.length);
offset += b1.length;
System.arraycopy(b2, 0, b4, offset, b2.length);
offset += b2.length; 
System.arraycopy(b3, 0, b4, offset, b3.length);

//
//                   FileWriter fw = new FileWriter("1.txt");  
// String s = new String(b4);
// fw.write(s,0,s.length());  
// fw.flush();  

for(int i =0;i<b4.length;++i)
{
System.out.print(b4[i]+" ");
}

System.out.print("\n");
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte sha1[] = md.digest(b4);

// String string1 = "123";
// byte input[] = string1.getBytes();
//
// byte sha1[] = md.digest(input);
   for (int i = 0; i < sha1.length; i++) {
System.out.print(sha1[i]+ "\t");
}

strPasswordDigest = new String(Base64.encode(sha1)); 


byte b5[] = strPasswordDigest.getBytes();

} catch (Exception e) {
System.out.println("GetSoapHeader Failed");
return null;
}

在代码在C#中实现,在哈希解码前内存数据是正确的,如下
44 170 136 232 111 192 138 66 126 66 179 116 206 176 69 150 50 48 49 48 45 48 57 45 49 54 84 48 55 58 53 48 58 52 53 90 117 115 101 114 112 97 115 115 119 111 114 100 

hash输出23 136 18 202 42 125 243 132 12 22 236 134 164 109 95 73 203 50 106 121 
base64输出: _I?jyF4gSyip984QMFuyGp/g1fScsyank=

在C++中用第三方哈希编码库进行验证依然和java结果不一致。

说明:在java中对 String string1 = "123";进行编码,结果和在C#中的结果是一致的。考虑的两语言中的对于默认编码问题,在C#中试了N中编码格式,仍然不对。

求高人赐教!!!!


--------------------编程问答-------------------- 所使用的Hash算法不一致吧,你所有的都是用“SHA-1”么? --------------------编程问答--------------------
补充:Java ,  Java相关
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,