Md5加密中 C#和Java得到的加密结果不同

wangshulu1991 2013-12-30 06:12:06


//md5加密
secret = "test测试xml"+"cnpltest";
byte[] result = Encoding.GetEncoding("utf-8").GetBytes(secret);
MD5 md5 = new MD5CryptoServiceProvider();
md5.ComputeHash(Encoding.GetEncoding("utf-8").GetBytes(secret));
byte[] hash = md5.Hash;

string signature = Convert.ToBase64String(hash);//base64编码

result 为 116 101 115 116 230 181 139 232 175 149 120 109 108 99 110 112 108 116 101 115 116
hash 为 18 224 165 107 105 79 241 197 13 154 13 171 251 57 85 247
得到的结果是 EuCla2lP8cUNmg2r+zlV9w==

// /**
// * 对传入的字符串进行MD5加密
// * @param plainText
// * @return
// */
//public static String MD5(String plainText, String charset) throws Exception {
//// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)
// MessageDigest md = MessageDigest.getInstance("MD5");
// getBytes(charset) 输入的字符串转换成字节数组 utf-8
// plainText.getBytes(charset)//是输入字符串转换得到的字节数组
// md.update(plainText.getBytes(charset));
//// 转换并返回结果,也是字节数组,包含16个元素
// byte b[] = md.digest();
// int i;
// StringBuffer buf = new StringBuffer("");
// for (int offset = 0; offset < b.length; offset++) {
// i = b[offset];
// if (i < 0)
// i += 256;
// if (i < 16)
// buf.append("0");
// buf.append(Integer.toHexString(i));
// }
// return buf.toString();
//}

// /**
// * base64编码
// *
// * @param str
// * @return
// * @throws Exception
// */
// public static String base64(String str, String charset) throws Exception{
// return (new sun.misc.BASE64Encoder()).encode(str.getBytes(charset));
// }

plainText="test测试xml"+"cnpltest";
上述java代码无法调试(没有java环境)得到的是 MTJlMGE1NmI2OTRmZjFjNTBkOWEwZGFiZmIzOTU1Zjc= (加密并且base64编码)
求改C#代码使之与java代码加密得到的结果相同
...全文
306 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
PaulyJiang 2013-12-31
  • 打赏
  • 举报
回复
标准的算法,应该一样才对
编程有钱人了 2013-12-31
  • 打赏
  • 举报
回复
JAVA那个base64编码了
wangshulu1991 2013-12-31
  • 打赏
  • 举报
回复
引用 3 楼 foxflyhigher 的回复:
Java代码和C#代码的功能都不一样。。Java代码的功能你基本上没看懂。 public static String MD5(String plainText, String charset) throws Exception { // 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”) MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes(charset)); // 转换并返回结果,也是字节数组,包含16个元素 byte b[] = md.digest(); return base64(b); } public static String base64(byte[] buffer) throws Exception { return (new sun.misc.BASE64Encoder()).encode(buffer); }
对呀 就是别人的java实现的加密 我要用c#实现同样的加密
雪狐 2013-12-31
  • 打赏
  • 举报
回复
雪狐 2013-12-30
  • 打赏
  • 举报
回复
Java代码和C#代码的功能都不一样。。Java代码的功能你基本上没看懂。 public static String MD5(String plainText, String charset) throws Exception { // 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”) MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes(charset)); // 转换并返回结果,也是字节数组,包含16个元素 byte b[] = md.digest(); return base64(b); } public static String base64(byte[] buffer) throws Exception { return (new sun.misc.BASE64Encoder()).encode(buffer); }
种草德鲁伊 2013-12-30
  • 打赏
  • 举报
回复
标准的算法,怎么可能不一样?
本拉灯 2013-12-30
  • 打赏
  • 举报
回复
JAVA里面把加密后的转成大写或小写了吧,MD5肯定是一样的值的。不会有问题的 要么汉定编码转换的问题

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧