现在的位置: 首页 > 综合 > 正文

在Java和.Net中的MD5的一致性

2013年02月10日 ⁄ 综合 ⁄ 共 1193字 ⁄ 字号 评论关闭

  最近与东信北邮的联调超炫接口,在这个接口中需要使用MD5算来相互验证用户身份,对方使用JAVA开发我方使用.NET开发,遗憾的是对方的MD5算法与RFC 1321的Test siute不相符。他们提供了MD5算法,经过多次查找资料并询问想关人员,终于实现了一致性,特将代码奉上以备与我有类似问题的人参考:

1、Java版

代码

/**
* 生成32位MD5消息摘要
*
* @param info
* String 消息原文
* @return
*/
public static String getDigestStr(String info) {
try {
byte[] res = info.getBytes();
MessageDigest md
= MessageDigest.getInstance("MD5");
byte[] result = md.digest(res);
for (int i = 0; i < result.length; i++) {
md.update(result[i]);
}
byte[] hash = md.digest();
StringBuffer d
= new StringBuffer("");
for (int i = 0; i < hash.length; i++) {
int v = hash[i] & 0xFF;
if (v < 16) {
d.append(
"0");
}
d.append(Integer.toString(v,
16).toUpperCase());
}
return d.toString();
}
catch (Exception e) {
return null;
}
}

 

2、.Net版

代码

/// <summary>
/// 对应Java版的MD5(连续计算两次摘要)
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public static String GetDigestStr(String info)
{
try
{
byte[] res = System.Text.Encoding.Default.GetBytes(info);
MD5CryptoServiceProvider md
= new MD5CryptoServiceProvider();

byte[] result = md.ComputeHash(res);
byte[] hash = md.ComputeHash(result);
StringBuilder sbuilder
= new StringBuilder();

for (int i = 0; i < hash.Length; i++)
{
int v = hash[i] & 0xFF;
if (v < 16) sbuilder.Append("0");

sbuilder.Append(Convert.ToString(v,
16).ToUpper());
}

return sbuilder.ToString();
}
catch
{
return null;
}
}

 

抱歉!评论已关闭.