Mediawiki 的用户密码是用 MD5加密算法加密的。但它并不直接采用它对用户的 password 进行加密,而是对所需加密的内容加以处理的。经过以下的步骤处理之后,密码数据就可以直接入库,所以有必要时我们可以对 mediawiki用户批量入库。
由终端进入 ${MEDIAWIKI_HOME}/includes/ 目录,用下列命令查看一下:
$ grep 'md5' *
结果系统列出了很多内容包含有“md5”的文件,如:
...
array( 'html' => $parsed, 'hash' => md5( $notice ) ), 600 );
GlobalFunctions.php: $p = md5( $password);
GlobalFunctions.php: return md5( "{$userid}-{$p}" );
HistoryBlob.php: $hash = md5( $text );
...
可以看到,GlobalFunctions.php 文件中有一条对登录密码的加密代码 $p = md5($password);。打开它,查找这条语句在文件中的位置,发现原来它是这样加密的:
function wfEncryptPassword( $userid, $password ) {
global $wgPasswordSalt;
$p = md5( $password);
if($wgPasswordSalt)
return md5( "{$userid}-{$p}" );
else
return $p;
}
也就是说,系统获取用户在数据库中的 ID 号,将这个 ID 号与加过密的登录密码用“-”号连接,再将这个连接后的字符串作一次加密,将这个加密的结果存入数据库。用这种方法可以避免两个完全相同的密码在数据库中存储也完全相同。
下面简化一下它的步骤:
$var = md5($upwd);
$pwd = md5("{$id}-{$var}");
return $pwd;
No comments:
Post a Comment