您当前的位置:首页 > 计算机 > 编程开发 > 数据结构与算法

Discuz 用户密码加密算法

时间:11-27来源:作者:点击数:

今天在拿Discuz进行二次开发时需要在代码里验证Discuz的用户名密码,结果不小心掉进了坑里,因为Discuz的论坛有两张表来存储用户数据,一张在Discuz的数据库ultrax里面的pre_common_member里面,另一个是存储在了UCenter的数据库ucenter的uc_members表里。花了很大功夫在研究ultrax库里那张pre_common_member的数据,研究它的密码是如何生成的,结果搜了一下发现网上说是随机生成的一个salt,心想这随机生成的salt如何在登录时进行验证呢?然后网上说其实Discuz压根就没用那个密码,自己试验了一下,果真如此,即使把pre_common_member里面的用户密码改掉,照样能够正常登录,看来这个密码压根就没用,害我绕了一个大圈子。

好了,进入正题,Discuz的密码加密算法其实就是两次MD5加密,首先用明文进行一次加密,之后随机生成一个salt,再把第一次的密文后面添加salt作为明文再进行一次MD5加密。salt保存在uc_members表里,可以通过用户名进行获取。

像这样:

MD5(MD5(明文)+salt)

下面是.net的实现代码:

string GetDiscuzPWString(string sourceStr, string salt)
{
 	return GetMd5Hash(string.Concat(GetMd5Hash(sourceStr),salt));
}

string GetMd5Hash(string input)
{
	MD5 md5Hasher = MD5.Create();

	byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));

	StringBuilder sBuilder = new StringBuilder();

	for (int i = 0; i < data.Length; i++)
	{
		sBuilder.Append(data[i].ToString("x2"));
	}

	return sBuilder.ToString();
}

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门