讨论技术,不用虚伪的去掩饰什么,下面是我反编译的关于上面那部分的代码,如果你觉得这样的代码都还有结构可言,那我确实无语了,另关于掂量的问题,对于.Text我承认他的结构不是不错的,细节有部分处理得不恰当,但是作者的水平还是很强的,至于discuz的这些代码,让人看了后,说实话,撑死也就是.net培训班刚出来的水平,毫无技术成分可言,本人不才,水平有限,但即便回退两年,也绝不至于写出这样的代码。
namespace Discuz.Forum
{
using Discuz.Common;
using System;
using System.Data;
using System.Data.OleDb;
using System.Runtime.InteropServices;
public class UserFactory
{
public static int CheckDvBbsPassword(string username, string password)
{
OleDbParameter[] commandParameters = new OleDbParameter[] { Database.MakeInParam("@username", OleDbType.Char, 20, username), Database.MakeInParam("@password", OleDbType.Char, 0x20, Utils.MD5(password).Substring(8, 0x10)) };
OleDbDataReader reader = Database.ExecuteReader(CommandType.Text, "SELECT TOP 1 [uid], [password] FROM [" + BaseConfigFactory.GetTablePrefix + "users] WHERE [username]=@username", commandParameters);
int uid = -1;
if (reader.Read())
{
string text = reader["password"].ToString().Trim();
if (text.Length > 0x10)
{
if (Utils.MD5(password) == text)
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
}
}
else if (Utils.MD5(password).Substring(8, 0x10) == text)
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
UpdateUserPassword(uid, password);
}
}
reader.Close();
return uid;
}
public static int CheckDvBbsPasswordAndSecques(string username, string password, int questionid, string answer)
{
OleDbParameter[] commandParameters = new OleDbParameter[] { Database.MakeInParam("@username", OleDbType.Char, 20, username), Database.MakeInParam("@password", OleDbType.Char, 0x20, Utils.MD5(password).Substring(8, 0x10)) };
OleDbDataReader reader = Database.ExecuteReader(CommandType.Text, "SELECT TOP 1 [uid], [password], [secques] FROM [" + BaseConfigFactory.GetTablePrefix + "users] WHERE [username]=@username", commandParameters);
int uid = -1;
if (reader.Read())
{
if (reader["secques"].ToString().Trim() != ForumUtils.GetUserSecques(questionid, answer))
{
return -1;
}
string text = reader["password"].ToString().Trim();
if (text.Length > 0x10)
{
if (Utils.MD5(password) == text)
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
}
}
else if (Utils.MD5(password).Substring(8, 0x10) == text)
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
UpdateUserPassword(uid, password);
}
}
reader.Close();
return uid;
}