问题描述
importjava.security.*;publicclasssdsds{publicstaticbyte[]MD5(StringrStr){try{MessageDigestmd5=MessageDigest.getInstance("md5");md5.update(rStr.getBytes());returnmd5.digest();}catch(Exceptione){e.printStackTrace();}returnnull;}publicstaticvoidmain(String[]ddd){byte[]xx=MD5("abcdfe");for(inti=0;i<xx.length;i++){System.out.print(xx[i]);}}}
结果怎么是:-21766729113-5982-94-6822-6-729786115-114?郁闷啊。。。用C#计算的结果:23576672911319782162188222501849786115142闷
解决方案
解决方案二:
不稀奇--不一样是好事!
解决方案三:
byte[]xx=MD5("abcdfe");
确定你的C#里不是加密的"abcdef"??
解决方案四:
你确定你的算法是MD5?MD5算法不管算什么算出来的位数应该是一样的,常见的md5-16和md5-32,计算字符串"admin"32:21232f297a57a5a743894a0e4a801fc316:7a57a5a743894a0e用这个结果验证一下算法有效性
解决方案五:
引用2楼mouer的回复:
Javacodebyte[]xx=MD5("abcdfe");确定你的C#里不是加密的"abcdef"??
不是c#只是byte[]buffer=md.ComputeHash(Encoding.Default.GetBytes(input));StringBuilderbuilder=newStringBuilder();for(inti=0;i<buffer.Length;i++){Console.Write(buffer[i]);builder.Append(buffer[i].ToString("x2"));}
我把byte数组输入了。和java输出的不一样啊但是builder.ToString()的结果一样MD5都一样