MD5加密的真正字符串 和16进制构建的字符串 区别
2010-09-08 10:35
267 查看
这两天做项目一直在被这个问题烦恼
我们的md5验证字符串 和合作方接口提供的字符串不一致。原因不明。
问了下朋友,他说不通语言对中文的加密结果不一致。
我挺郁闷 我用的是c#,对方使用java。 最后还是群里的一个朋友说明了真相。
真相就是 什么语言对md5的加密结果都一致,MD5算法都是一致的。只是有的是真的md5,有的是16进制的md5。
还给出了代码 在此不敢独享,给以后遇到这样问题的朋友们提供参考。
首先看下我们的加密
C#:这是真的md5字符串
对方的java版本:16进制后的字符串(假的MD5)
和对方对接写的方法:16进制后的字符串(加的MD5)
到此 大功告成。。。
我们的md5验证字符串 和合作方接口提供的字符串不一致。原因不明。
问了下朋友,他说不通语言对中文的加密结果不一致。
我挺郁闷 我用的是c#,对方使用java。 最后还是群里的一个朋友说明了真相。
真相就是 什么语言对md5的加密结果都一致,MD5算法都是一致的。只是有的是真的md5,有的是16进制的md5。
还给出了代码 在此不敢独享,给以后遇到这样问题的朋友们提供参考。
首先看下我们的加密
C#:这是真的md5字符串
public string md5(string str) { MD5 m = new MD5CryptoServiceProvider(); byte[] s = m.ComputeHash(UnicodeEncoding.UTF8.GetBytes(str)); return BitConverter.ToString(s); }
对方的java版本:16进制后的字符串(假的MD5)
public class mdencode { public mdencode() { } public String testDigest(String myinfo) { byte[] digesta = null; try { java.security.MessageDigest alga = java.security.MessageDigest. getInstance("MD5"); alga.update(myinfo.getBytes()); digesta = alga.digest(); } catch (java.security.NoSuchAlgorithmException ex) { System.out.println("非法摘要算法"); } return this.byte2hex(digesta); } public String byte2hex(byte[] b) { //二行制转字符串 String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b & 0XFF)); if (stmp.length() == 1) { hs = hs + "0" + stmp; } else { hs = hs + stmp; } if (n < b.length - 1) { hs = hs; } } return hs; } }
和对方对接写的方法:16进制后的字符串(加的MD5)
/// <summary> /// 加密 /// </summary> /// <param name="bytes"></param> /// <returns></returns> private string getMd5Hash(byte[] bytes) { MD5 md5Hasher = MD5.Create(); byte[] data = md5Hasher.ComputeHash(bytes); StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } return sBuilder.ToString(); }
到此 大功告成。。。
相关文章推荐
- 关于MD5加密中byte数组转换成16进制字符串的研究
- cJSON库(构建json与解析json字符串)-c语言
- GET和POST的真正区别
- [翻译]jQuery和MooTools的真正区别(上)
- java中String字符串的替换函数:replace与replaceAll的区别
- 串口(调试助手)发送数据——字符串发送与十六进制发送的区别
- delete与delete [] 真正区别
- shell中if条件字符串、数字比对,[[ ]]和[ ]区别
- iOS 16进制颜色字符串转换成可以正常使用的UIColor
- @proprety数组字典字符串用copy和strong区别(深浅拷贝)
- C# 数据16进制转10进制,richtextbox中查找字符串
- 【python】字符串、16进制等数据处理
- C# 16进制与字符串、字节数组之间的转换
- 彻底了解构建 JSON 字符串的三种方式
- C# 16进制与字符串、字节数组之间的转换
- 【VBA】16进制字符串转化为2进制字符串
- String直接赋字符串和new String的区别
- 16进制字符串与byte数组互转
- python常用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)
- c# 字符串(含有汉字)转化为16进制编码(转)