« D语言数组的初始化与赋值 | (回到Blog入口) | 心情低落 »

MovableType 忘记了口令

昨天,跟huoju聊天,看他同时写了好几个blog, 而且,他每天也在做很多事情。于是我反思一下自己,到底为什么总觉得自己的时间不够呢? 反思之后,决定把每天看文章的时间砍掉一半用来写自己的blog, 于是有了下文.

今天早晨要登录我这个blog写一点东西,结果发现太久不用,口令都忘记了.....
用找回口令, 需要输入一个提示文字,打开服务器上的数据库,找到自己当初设置的提示文字,结果还是不行,邮件系统没有配置,mt发布出邮件来。
怎么办?只要硬着头皮打开 mt 的源代码开始找登录验证的部分。花了半个小时,没有找到任何 login字样,倒是找到了 logout 和 set_password, 直接杀到 set_password 函数内,看看怎么写的。

还好, 很简单,就调用了一个 crypt 函数生成了 密码的密文。 google 一下 perl 的 crypt 函数,再自己写一个命令行,把新生成的密码密文update到mt的数据库中,重新从页面尝试登录....

搞定!

附录:(资料来源)
Apache以“Unix crypt”格式保存密码,用Perl的crypt函数加密字符串得到的也是这种格式。为加密字符串,我们需要一个称为“salt”的字符串,它是两个(或者两个以上)字符构成的字符串,用于启动加密过程。salt一般是随机生成的,根据所选salt的不同加密字符串之后得到的结果也不同。

   在Perl程序中调用crypt函数的形式如下所示:

$encrypted = crypt ($password, $salt);

   上例假定$password已经由用户通过某种方式提供,$salt已经通过某种方式生成。请参见下面的更多说明。

   crypt是一种不可逆的加密算法,也就是说,一旦我们加密了一个字符串就没有办法把它还原得到原来的字符串。这意味着,要知道用户输入的密码是否和正确的密码一样,唯一的方法是把用户输入的密码也加密,看看加密结果是否和正确密码的加密结果一样。当然,两次加密所用的salt应该一样。 crypt函数把加密所用的salt作为加密结果的前两个字符保留。


附录2:我的小程序,根据一个例程改的,复制结果字符串更新到数据库就是了
#!/usr/bin/perl

@alpha = ('a'..'z', 'A'..'Z', 0..9);
$salt = join '', map $alpha[rand @alpha], 1..2;

print $salt;

print "Enter a string to encrypt with DES:n";
chomp(my $string = ); #Take the input from the user and remove the n

my $encrypted_string = crypt($string,$salt); #take the string and the salt and put through crypt()

print qq~
"$string" encrypted using the perl crypt() function and salt "$salt" returns:
$encrypted_string
~;

引用通告

TrackBack URL for this entry:
如果您想引用这篇文章到您的Blog,
请复制下面的链接,并放置到您发表文章的相应界面中。
http://www.pyapp.com/cgi-bin/mt/mt-tb.cgi/26

发表一个评论

(如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。)

关于

此页面包含了发表于2007年08月28日 下午01时09分的 Blog 上的单篇日记。

此 Blog 的前一篇日记是 D语言数组的初始化与赋值

此 Blog 的后一篇日记是 心情低落

更多信息可在 主索引 页和 归档 页看到。

Powered by
Movable Type 3.33