ANF到DNT完美转移
来源:互联网 发布:流星加速器下载软件 编辑:程序博客网 时间:2024/04/28 22:21
ANF到DNT完美转移
下面列步骤:
一、安装dnt
二、官方转换工具。转用户,板块,主题,帖子。(板块转移有问题,在后台重新调整下板块顺序和所属即可。)
三、到数据库设计dnt_users表,把password改成varchar 64.
四、用下面语句重新转移密码。
五、设计dnt_users表,增加salt列,设置成varchar 20即可。
六、用下列语句转移salt
七、用vs2005打开dnt项目。打开Discuz_Forum/UserFactory.cs
搜索CheckDvBbsPasswordAndSecques和CheckDvBbsPassword两个函数,选择这2个函数删除,替换成如下函数。
/// <summary>
/// 检测DVBBS兼容模式的密码 //by bagheera 这里通过改动dvbbs的代码实现anf兼容,后台设置成兼容dvbbs即可。
/// </summary>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <param name="questionid">问题id</param>
/// <param name="answer">答案</param>
/// <returns>如果正确则返回用户id, 否则返回-1</returns>
public static int CheckDvBbsPasswordAndSecques(string username, string password, int questionid, string answer)
{
SqlParameter[] prams = {
Database.MakeInParam("@username",SqlDbType.Char,20,username),
Database.MakeInParam("@password",SqlDbType.Char,64,password)
};
SqlDataReader reader = Database.ExecuteReader(CommandType.Text, "SELECT TOP 1 [uid], [password], [salt],[secques] FROM ["+BaseConfigFactory.GetTablePrefix+"users] WHERE [username]=@username", prams);
int uid = -1;
if(reader.Read())
{
if (reader["secques"].ToString().Trim() != ForumUtils.GetUserSecques(questionid, answer))
{
return -1;
}
string pw = reader["password"].ToString().Trim();
if (pw.Length < 33) //判断长度来判断是否恢复成32位。
{
if (Utils.MD5(password) == pw)
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
}
}
else
{
string salt = reader["salt"].ToString().Trim();
if (myenc(password, salt) == pw) //使用下面自己写的anf加密函数,实现判断。
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
UpdateUserPassword(uid, password); //更新密码为32位md5
}
}
}
reader.Close();
return uid;
}
/// <summary>
/// 检测DVBBS兼容模式的密码 //by bagheera 这里通过改动dvbbs的代码实现,后台设置成兼容dvbbs即可。
/// </summary>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <returns>如果正确则返回用户id, 否则返回-1</returns>
public static int CheckDvBbsPassword(string username, string password)
{
SqlParameter[] prams = {
Database.MakeInParam("@username",SqlDbType.Char,20,username),
Database.MakeInParam("@password",SqlDbType.Char,64,password)
};
SqlDataReader reader = Database.ExecuteReader(CommandType.Text, "SELECT TOP 1 [uid], [password],[salt] FROM ["+BaseConfigFactory.GetTablePrefix+"users] WHERE [username]=@username", prams);
int uid = -1;
if(reader.Read())
{
string pw = reader["password"].ToString().Trim();
if (pw.Length < 33) //判断长度来判断是否恢复成32位。
{
if (Utils.MD5(password) == pw)
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
}
}
else
{
string salt = reader["salt"].ToString().Trim();
if ( myenc(password, salt) == pw) //使用下面自己写的anf加密函数,实现判断。
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
UpdateUserPassword(uid, password); //更新密码为32位md5
}
}
}
reader.Close();
return uid;
}
///增加 by bagheera
///anf的加密方法
public static String myenc(string pass, string salt)
{
Byte[] clearBytes;
Byte[] hashedBytes;
System.Text.Encoding encoding = System.Text.Encoding.Unicode; //这里修改编码。
clearBytes = encoding.GetBytes(salt.ToLower().Trim() + pass.Trim());
hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes); //可以修改MD5为SHA1
return BitConverter.ToString(hashedBytes);
}
八、重新编译生成。替换bin/Discuz.Forum.dll(注意:如果你下载的官方安装包,而不是源码,那么你需要下源码,并拿源码包里的admin目录覆盖安装包的admin,否则登录后台会报错。)
九、登录后台,设置密码模式为兼容DVBBS。即可用原论坛密码进行登录。(转移过程中会把管理员密码替换成anf的密码,无法登录请尝试原论坛密码。)
十、已经完美运行,哦也,编译好的Discuz.Forum.dll稍后提供下载。
谢谢大家支持,呵呵。
加点东西,使之更完美,呵呵~
十一、为了照顾已经被搜索引擎收录的帖子。在IISUrlRewriter.ini里做如下配置
这才叫完美嘛!
一、安装dnt
二、官方转换工具。转用户,板块,主题,帖子。(板块转移有问题,在后台重新调整下板块顺序和所属即可。)
三、到数据库设计dnt_users表,把password改成varchar 64.
四、用下面语句重新转移密码。
[复制到剪贴板]
CODE:UPDATE dnt_users
SET dnt_users.password=forums_Users.Password
FROM dnt_users, forums_users
WHERE dnt_users.uid = forums_users.Userid
SET dnt_users.password=forums_Users.Password
FROM dnt_users, forums_users
WHERE dnt_users.uid = forums_users.Userid
五、设计dnt_users表,增加salt列,设置成varchar 20即可。
六、用下列语句转移salt
[复制到剪贴板]
CODE:UPDATE dnt_users
SET dnt_users.salt=forums_users.Salt
FROM dnt_users, forums_users
WHERE dnt_users.uid = forums_users.userid
SET dnt_users.salt=forums_users.Salt
FROM dnt_users, forums_users
WHERE dnt_users.uid = forums_users.userid
七、用vs2005打开dnt项目。打开Discuz_Forum/UserFactory.cs
搜索CheckDvBbsPasswordAndSecques和CheckDvBbsPassword两个函数,选择这2个函数删除,替换成如下函数。
[复制到剪贴板]
CODE:/// <summary>
/// 检测DVBBS兼容模式的密码 //by bagheera 这里通过改动dvbbs的代码实现anf兼容,后台设置成兼容dvbbs即可。
/// </summary>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <param name="questionid">问题id</param>
/// <param name="answer">答案</param>
/// <returns>如果正确则返回用户id, 否则返回-1</returns>
public static int CheckDvBbsPasswordAndSecques(string username, string password, int questionid, string answer)
{
SqlParameter[] prams = {
Database.MakeInParam("@username",SqlDbType.Char,20,username),
Database.MakeInParam("@password",SqlDbType.Char,64,password)
};
SqlDataReader reader = Database.ExecuteReader(CommandType.Text, "SELECT TOP 1 [uid], [password], [salt],[secques] FROM ["+BaseConfigFactory.GetTablePrefix+"users] WHERE [username]=@username", prams);
int uid = -1;
if(reader.Read())
{
if (reader["secques"].ToString().Trim() != ForumUtils.GetUserSecques(questionid, answer))
{
return -1;
}
string pw = reader["password"].ToString().Trim();
if (pw.Length < 33) //判断长度来判断是否恢复成32位。
{
if (Utils.MD5(password) == pw)
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
}
}
else
{
string salt = reader["salt"].ToString().Trim();
if (myenc(password, salt) == pw) //使用下面自己写的anf加密函数,实现判断。
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
UpdateUserPassword(uid, password); //更新密码为32位md5
}
}
}
reader.Close();
return uid;
}
/// <summary>
/// 检测DVBBS兼容模式的密码 //by bagheera 这里通过改动dvbbs的代码实现,后台设置成兼容dvbbs即可。
/// </summary>
/// <param name="username">用户名</param>
/// <param name="password">密码</param>
/// <returns>如果正确则返回用户id, 否则返回-1</returns>
public static int CheckDvBbsPassword(string username, string password)
{
SqlParameter[] prams = {
Database.MakeInParam("@username",SqlDbType.Char,20,username),
Database.MakeInParam("@password",SqlDbType.Char,64,password)
};
SqlDataReader reader = Database.ExecuteReader(CommandType.Text, "SELECT TOP 1 [uid], [password],[salt] FROM ["+BaseConfigFactory.GetTablePrefix+"users] WHERE [username]=@username", prams);
int uid = -1;
if(reader.Read())
{
string pw = reader["password"].ToString().Trim();
if (pw.Length < 33) //判断长度来判断是否恢复成32位。
{
if (Utils.MD5(password) == pw)
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
}
}
else
{
string salt = reader["salt"].ToString().Trim();
if ( myenc(password, salt) == pw) //使用下面自己写的anf加密函数,实现判断。
{
uid = Utils.StrToInt(reader["uid"].ToString(), -1);
UpdateUserPassword(uid, password); //更新密码为32位md5
}
}
}
reader.Close();
return uid;
}
///增加 by bagheera
///anf的加密方法
public static String myenc(string pass, string salt)
{
Byte[] clearBytes;
Byte[] hashedBytes;
System.Text.Encoding encoding = System.Text.Encoding.Unicode; //这里修改编码。
clearBytes = encoding.GetBytes(salt.ToLower().Trim() + pass.Trim());
hashedBytes = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(clearBytes); //可以修改MD5为SHA1
return BitConverter.ToString(hashedBytes);
}
八、重新编译生成。替换bin/Discuz.Forum.dll(注意:如果你下载的官方安装包,而不是源码,那么你需要下源码,并拿源码包里的admin目录覆盖安装包的admin,否则登录后台会报错。)
九、登录后台,设置密码模式为兼容DVBBS。即可用原论坛密码进行登录。(转移过程中会把管理员密码替换成anf的密码,无法登录请尝试原论坛密码。)
十、已经完美运行,哦也,编译好的Discuz.Forum.dll稍后提供下载。
谢谢大家支持,呵呵。
加点东西,使之更完美,呵呵~
十一、为了照顾已经被搜索引擎收录的帖子。在IISUrlRewriter.ini里做如下配置
[复制到剪贴板]
CODE: #by bagheera for ANF
RewriteRule ^/([0-9]+)/ShowPost/.aspx$ /showtopic-$1.aspx
RewriteRule ^/([0-9]+)/ShowForum/.aspx$ /showforum-$1.aspx
RewriteRule ^/([0-9]+)/ShowPost/.aspx$ /showtopic-$1.aspx
RewriteRule ^/([0-9]+)/ShowForum/.aspx$ /showforum-$1.aspx
这才叫完美嘛!
- ANF到DNT完美转移
- DNT
- 转移到MSN
- 博客转移到sina
- 转移到此
- 博客转移到CSDN
- 转移到Javaeye
- 博客转移到CSDN
- 博客转移到cnblogs
- 转移到linux上来
- 博客转移到此
- 转移到个人博客
- Vmware转移到Virtualbox
- 博客转移了,转移到dawxy.com
- ANF使用经验总结
- anf 下载请求。
- Dnt Restful API
- 自动转移到下一个焦点
- 提问的智慧
- 如何成为一位 hacker
- 最新JBoss jBPM 3.1 开始指南之---创建流程和部署流程
- 广域网协议概述
- 强
- ANF到DNT完美转移
- TOMCAT部署项目的方式
- 《C#入门经典》学习笔记(文件系统数据)
- csdn blog 不能发表评论
- 《Programming ASP.NET》学习笔记(控件)
- 如何去掉SWF文件的虚线边框
- 《Programming ASP.NET》学习笔记(事件)
- 123
- 《Programming ASP.NET》学习笔记(基本控件)