Md5为啥密码同样是123456两次调用得出的加密密码不一样。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Md5为啥密码同样是123456两次调用得出的加密密码不一样。相关的知识,希望对你有一定的参考价值。
MD5部分密码如下:
/// <summary>
/// md5加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string GetMd5(string str,ref string password)
MD5 md5 = MD5.Create();
//实例化一个md5对像
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
//加密后是一个字节类型的数组
//将得到的字符串使用十六进制类型格式
for (int i = 0; i < bytes.Length; i++)
password = password + bytes[i].ToString();
return password;
后台调用代码:
public bool EditUsers(Users us, string Id)
vdm.GetMd5(us.LoginPwd,ref password);
vdm.GetMd5(us.LoginPwd,ref password);
这句,password变量一看就是类成员变量,两次调用的时候,初始值不一样,结果肯定不一样了。
改成1楼的那样,应该就对了。追问
我把这个验证想复杂了,放在两个层里了。所以再用了ref
追答嗯,其实这个不用那么复杂,只要一个返回值就好了,不需要用到ref参数。
追问只是我密码验证在业务逻辑层
你可以不要那个ref参数,如:
vdm.GetMd5(LoginPwd, ref passsword);
if (user.LoginPwd == password)
...
改成:
string pwd = vdm.GetMd5(LoginPwd);
if (user.LoginPwd == pwd)
...
public string GetMd5(string str)
MD5 md5 = MD5.Create();
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
StringBuilder password= new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
password.Append(bytes[i].ToString("x2"));//x2是16进制
return password.ToString();
以上是关于Md5为啥密码同样是123456两次调用得出的加密密码不一样。的主要内容,如果未能解决你的问题,请参考以下文章
js文件里面的MD5加密方式。我直接在数据库改过密码。但是登陆后台还是显示密码错误是否这个文件的原因