在.Net中实现Discuz论坛平台UCenter密码加密

最近做一个系统,需要用户在.Net中登录,而用户名和密码使用Discuz论坛中的信息(实际密码是保存在UCenter数据库中的)。研究了一下Discuz论坛,发现其并不是对用户密码直接进行MD5加密,而使用了另外的方式。
在用户注册时,对用户输入的密码进行MD5加密,然后生成一个随机数,把前面加密的结果和这个随机数(salt)组合在一起,再进行一次MD5加密,最终加密的结果:md5(md5(password).salt)。并且把这个随机数保持进用户信息表里面。
登录的时候,首先从用户信息表里面读出随机数,然后依据md5(md5(password).salt)生成密码与数据库中的密码进行比对。

要在.NET中实现同样的效果,首先要实现MD5函数,使其与PHP中md5()的结果一致。

public static string MD5ForPHP(string s)
{
System.Security.Cryptography.MD5CryptoServiceProvider HashMD5
= new System.Security.Cryptography.MD5CryptoServiceProvider();
return BitConverter.ToString(HashMD5.ComputeHash(Encoding.UTF8.GetBytes(s))).Replace("-", "").ToLower();
}

然后获取密码的方法就比较简单了。(Password是用户输入的密码,Salt是保存进用户表的随机数)

public static string GetUCenterPassword(string Password, string Salt)
{
return MD5ForPHP(MD5ForPHP(Password) + Salt);
}

下次再贴上与MYSQL的操作。

posted @ 2011-07-08 22:45  星月无痕  阅读(773)  评论(3编辑  收藏  举报