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
"0123456789ABCDEF".charAt();不是直接加上这一串字符串的。
#3
你两个同时加密admin,哪个为以上结果,哪个就是真的md5
md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e
md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e
#4
这两段代码就理论来说结果是一样的吗?(C#中的md5Str=“0123456789ABCDEF”)
value.getBytes()和Encoding.Default.GetBytes(value)结果一样吗?
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");
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
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧
#8
你仔细对照一下你贴的java代码和我的java代码中的for循环,看看有什么不同(注意括号)
#9
#10
我日 自己发的怎么不能删呢
#11
这是个失误,我漏贴个括弧。java是在服务器的,我不能修改,是没有这个编译都不能通过的错误的。
#1
"" + "0123456789ABCDEF"这个是为了安全而加上自己的字符集然后再MD5吗?
#2
"" + "0123456789ABCDEF"这个是为了安全而加上自己的字符集然后再MD5吗?
"0123456789ABCDEF".charAt();不是直接加上这一串字符串的。
#3
你两个同时加密admin,哪个为以上结果,哪个就是真的md5
md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e
md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e
#4
你两个同时加密admin,哪个为以上结果,哪个就是真的md5
md5(admin,32) = 21232f297a57a5a743894a0e4a801fc3
md5(admin,16) = 7a57a5a743894a0e
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");
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
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);//FCEA920F7412B5DA7BE0CF42B8C93759try {
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) {
}
#8
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧
你仔细对照一下你贴的java代码和我的java代码中的for循环,看看有什么不同(注意括号)
#9
#10
sdsadsadadada
#11
结果一样啊?我在使用时value是从webService取回来的数据,算出md5加密结果再与服务器对比,但无论多少次结果都不一样。请问有什么因素会影响md5计算结果吗?两台电脑上可能环境什么的有点不同吧
你仔细对照一下你贴的java代码和我的java代码中的for循环,看看有什么不同(注意括号)