JAVA和C# MD5加密结果不一样,怎么办

时间:2022-10-28 16:57:08
MessageDigest mdInst  = MessageDigest.getInstance("MD5");
byte[] md  = mdInst.digest(value.getBytes());//value为认证的原文
String md5 = "";
for(int i=0;i<md.length;i++)
{
    md5+=("" + "0123456789ABCDEF".charAt(0xf & md[i] >> 4 + "0123456789ABCDEF".charAt(md[i] & 0xf));
}

byte[] Buffer = Encoding.Default.GetBytes(value);
MD5 md5 = MD5.Create();
byte[] tempMD5Value = md5.ComputeHash(Buffer);
string strMD5Value = string.Empty;
for (int i = 0; i < tempMD5Value.Length; i++)
{
    strMD5Value += ("" + md5Str.Substring(0xf & tempMD5Value[i] >> 4, 1) + md5Str.Substring(tempMD5Value[i] & 0xf, 1));
}

不能修改JAVA,怎么改下C#让加密结果一样呀。

11 个解决方案

#1


"" + "0123456789ABCDEF"这个是为了安全而加上自己的字符集然后再MD5吗?

#2


引用 1 楼 liuchaolin 的回复:
"" + "0123456789ABCDEF"这个是为了安全而加上自己的字符集然后再MD5吗?

"0123456789ABCDEF".charAt();不是直接加上这一串字符串的。

#3


你两个同时加密admin,哪个为以上结果,哪个就是真的md5

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e

#4


引用 3 楼 liuchaolin 的回复:
你两个同时加密admin,哪个为以上结果,哪个就是真的md5

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e
这两段代码就理论来说结果是一样的吗?(C#中的md5Str=“0123456789ABCDEF”)
value.getBytes()和Encoding.Default.GetBytes(value)结果一样吗?

#5


byte[] Buffer = Encoding.Default.GetBytes(value);//这里的Default应该是ANSI,Java就不懂了,一般C#都是直接用内部的md5加密算法

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(text,"MD5");

#6


  string value = "1234567";
            string md5Str = "0123456789ABCDEF";
            System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] buffer = md5.ComputeHash(Encoding.Default.GetBytes(value));
            string strMD5Value = string.Empty;
            for (int i = 0; i < buffer.Length; i++)
            {
                int a = 0xf & buffer[i] >> 4;
                int b = buffer[i] & 0xf;
                strMD5Value +=  md5Str.Substring(0xf & buffer[i] >> 4, 1) + md5Str[buffer[i] & 0xf];
            }
            MessageBox.Show(strMD5Value);//FCEA920F7412B5DA7BE0CF42B8C93759


try {
MessageDigest mdInst = MessageDigest.getInstance("md5");
String value = "1234567";
byte[] md = mdInst.digest(value.getBytes());// value为认证的原文
String md5 = "";
for (int i = 0; i < md.length; i++) {
int a = 0xf & md[i] >> 4;
int b = md[i] & 0xf;
 md5+=("" + "0123456789ABCDEF".charAt(0xf & md[i] >> 4) + "0123456789ABCDEF".charAt(md[i] & 0xf));
}
System.out.println(md5);//FCEA920F7412B5DA7BE0CF42B8C93759
} catch (Exception e) {
}

#7


引用 6 楼 hjywyj 的回复:
  string value = "1234567";
            string md5Str = "0123456789ABCDEF";
            System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] buffer = md5.ComputeHash(Encoding.Default.GetBytes(value));
            string strMD5Value = string.Empty;
            for (int i = 0; i < buffer.Length; i++)
            {
                int a = 0xf & buffer[i] >> 4;
                int b = buffer[i] & 0xf;
                strMD5Value +=  md5Str.Substring(0xf & buffer[i] >> 4, 1) + md5Str[buffer[i] & 0xf];
            }
            MessageBox.Show(strMD5Value);//FCEA920F7412B5DA7BE0CF42B8C93759


try {
MessageDigest mdInst = MessageDigest.getInstance("md5");
String value = "1234567";
byte[] md = mdInst.digest(value.getBytes());// value为认证的原文
String md5 = "";
for (int i = 0; i < md.length; i++) {
int a = 0xf & md[i] >> 4;
int b = md[i] & 0xf;
 md5+=("" + "0123456789ABCDEF".charAt(0xf & md[i] >> 4) + "0123456789ABCDEF".charAt(md[i] & 0xf));
}
System.out.println(md5);//FCEA920F7412B5DA7BE0CF42B8C93759
} catch (Exception e) {
}
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧

#8


引用 7 楼 StuClass 的回复:
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧

你仔细对照一下你贴的java代码和我的java代码中的for循环,看看有什么不同(注意括号)

#9


该回复于2014-02-28 16:46:24被管理员删除

#10


引用 9 楼 l530248084 的回复:
sdsadsadadada
我日 自己发的怎么不能删呢

#11


引用 8 楼 hjywyj 的回复:
Quote: 引用 7 楼 StuClass 的回复:
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧

你仔细对照一下你贴的java代码和我的java代码中的for循环,看看有什么不同(注意括号)
JAVA和C# MD5加密结果不一样,怎么办这是个失误,我漏贴个括弧。java是在服务器的,我不能修改,是没有这个编译都不能通过的错误的。

#1


"" + "0123456789ABCDEF"这个是为了安全而加上自己的字符集然后再MD5吗?

#2


引用 1 楼 liuchaolin 的回复:
"" + "0123456789ABCDEF"这个是为了安全而加上自己的字符集然后再MD5吗?

"0123456789ABCDEF".charAt();不是直接加上这一串字符串的。

#3


你两个同时加密admin,哪个为以上结果,哪个就是真的md5

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e

#4


引用 3 楼 liuchaolin 的回复:
你两个同时加密admin,哪个为以上结果,哪个就是真的md5

md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e
这两段代码就理论来说结果是一样的吗?(C#中的md5Str=“0123456789ABCDEF”)
value.getBytes()和Encoding.Default.GetBytes(value)结果一样吗?

#5


byte[] Buffer = Encoding.Default.GetBytes(value);//这里的Default应该是ANSI,Java就不懂了,一般C#都是直接用内部的md5加密算法

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(text,"MD5");

#6


  string value = "1234567";
            string md5Str = "0123456789ABCDEF";
            System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] buffer = md5.ComputeHash(Encoding.Default.GetBytes(value));
            string strMD5Value = string.Empty;
            for (int i = 0; i < buffer.Length; i++)
            {
                int a = 0xf & buffer[i] >> 4;
                int b = buffer[i] & 0xf;
                strMD5Value +=  md5Str.Substring(0xf & buffer[i] >> 4, 1) + md5Str[buffer[i] & 0xf];
            }
            MessageBox.Show(strMD5Value);//FCEA920F7412B5DA7BE0CF42B8C93759


try {
MessageDigest mdInst = MessageDigest.getInstance("md5");
String value = "1234567";
byte[] md = mdInst.digest(value.getBytes());// value为认证的原文
String md5 = "";
for (int i = 0; i < md.length; i++) {
int a = 0xf & md[i] >> 4;
int b = md[i] & 0xf;
 md5+=("" + "0123456789ABCDEF".charAt(0xf & md[i] >> 4) + "0123456789ABCDEF".charAt(md[i] & 0xf));
}
System.out.println(md5);//FCEA920F7412B5DA7BE0CF42B8C93759
} catch (Exception e) {
}

#7


引用 6 楼 hjywyj 的回复:
  string value = "1234567";
            string md5Str = "0123456789ABCDEF";
            System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] buffer = md5.ComputeHash(Encoding.Default.GetBytes(value));
            string strMD5Value = string.Empty;
            for (int i = 0; i < buffer.Length; i++)
            {
                int a = 0xf & buffer[i] >> 4;
                int b = buffer[i] & 0xf;
                strMD5Value +=  md5Str.Substring(0xf & buffer[i] >> 4, 1) + md5Str[buffer[i] & 0xf];
            }
            MessageBox.Show(strMD5Value);//FCEA920F7412B5DA7BE0CF42B8C93759


try {
MessageDigest mdInst = MessageDigest.getInstance("md5");
String value = "1234567";
byte[] md = mdInst.digest(value.getBytes());// value为认证的原文
String md5 = "";
for (int i = 0; i < md.length; i++) {
int a = 0xf & md[i] >> 4;
int b = md[i] & 0xf;
 md5+=("" + "0123456789ABCDEF".charAt(0xf & md[i] >> 4) + "0123456789ABCDEF".charAt(md[i] & 0xf));
}
System.out.println(md5);//FCEA920F7412B5DA7BE0CF42B8C93759
} catch (Exception e) {
}
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧

#8


引用 7 楼 StuClass 的回复:
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧

你仔细对照一下你贴的java代码和我的java代码中的for循环,看看有什么不同(注意括号)

#9


该回复于2014-02-28 16:46:24被管理员删除

#10


引用 9 楼 l530248084 的回复:
sdsadsadadada
我日 自己发的怎么不能删呢

#11


引用 8 楼 hjywyj 的回复:
Quote: 引用 7 楼 StuClass 的回复:
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧

你仔细对照一下你贴的java代码和我的java代码中的for循环,看看有什么不同(注意括号)
JAVA和C# MD5加密结果不一样,怎么办这是个失误,我漏贴个括弧。java是在服务器的,我不能修改,是没有这个编译都不能通过的错误的。