分类:
2008-05-27 21:57:02
今天向大家介绍的PEAR类是PEAR::Text_Password,可以称之为随机密码生成器。PEAR::Text_Password是个比较简单的类,只包含一个PHP文件(Password.php),代码连注释在内只有500多行。Text_Password易学易用,功能却相当强大,可以满足WEB应用中绝大部份情况下的需求(如果你觉得还需要定制一些自己的功能,可以将这个类库再开发,相当方便)。
Text_Password的主要特性如下:
² 可创建多种格式的随机密码,如纯字母,纯数字,纯特殊字符及混用型密码;
² 可自定义密码的长度(字符数);
² 可限定密码中只能出现某些字符;
² 可一次性创建多个密码;
² 创建基于某个字符串的密码(非随机,使用不同算法对字符串进行处理,如翻转)。
Text_Password把密码分为pronounceable(可发音的)和Unpronounceable(不可发音的)两种类型。可发音型即纯英文字母型,虽然整个口令不是正常的英文单词,但一般可以划分出音节来发音,有助于记忆,例如“steagionea”。不可发音型则是混用型,无法发音,如“miC106AIB7”。显然,可发音型容易记忆而安全性相对较差,不可发音型不易记忆但安全性较好。通常情况下我们不太需要记忆随机密码,所以选用Unpronounceable的情况较常见一些。你可以视实际情况选择。
系统需求:
PHP4.3.* /PHP5
PEAR::Text_Password
使用Text_Password,实际上我们使用到的只有四个类方法,通过传递不同的参数来生成所需的密码。四个类方法分别是create(),createMultiple(),createFromLogin(),createMultipleFromLogin()。下面我们来举例说明它们的用法。
(1) 创建可发音密码
"
require_once "Text/Password.php";
echo "创建10个字符的可发音密码....:
";
echo Text_Password::create(10,'Pronounceable') . "
echo "创建三个10字符的可发音密码...:
";
print_r(Text_Password::createMultiple(3));
?>
运行结果如图:
在这个程序中,我们使用create()来创建一个长度为10,类型为pronounceable的密码;使用createMultiple()来同时创建三个长度为10,类型为pronounceable的密码密码。
(2) 创建不可发音密码
" " " " "
require_once "Text/Password.php";
echo "创建一个10字符的不可发音密码....:
";
echo Text_Password::create(10, 'unpronounceable') . "
echo "创建一个8字符且只包含有a,b,c的不可发音密码....:
";
echo Text_Password::create(8, 'unpronounceable', 'a,b,c') . "
echo "
同时创建4个不可发音密码...:\n
";
print_r(Text_Password::createMultiple(4, 10, 'unpronounceable'));
echo "
echo "创建一个长度为8的只含有数字的不可发音密码:
";
echo Text_Password::create(8, 'unpronounceable', 'numeric') . "
echo "创建一个长度为8的只包含数字或字母的不可发音密码::
";
echo Text_Password::create(8, 'unpronounceable', 'alphanumeric') . "
?>
运行结果如图:
(2) 创建基于某个字符串的密码
有时候我们希望得到的密码不完全随机,而是有一定规律的。我们希望根据我们所给的字符来获得最终的密码。这样有个好处就是可以将密码还原成明文,只要我们知道算法。
Text_Password内建了一些算法来对字符串进行处理。有以下几种算法(或可称操作):
· xor
· rotx
· rotx++
· rotx--
· ascii_rotx
· ascii_rotx++
· ascii_rotx--
· shuffle
· reverse
GivenStrPWD.php
" " " " " " " " " "
require_once "Text/Password.php";
echo "\n密码原文为: 'haohappy', 加密方法为: 'reverse',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'reverse') . "
echo "\n密码原文为 'haohappy', 加密方法为: 'rot13',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'rot13') . "
echo "\n密码原文为 'haohappy', 加密方法为: 'rotx',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'rotx', 13) . "
echo "\n密码原文为 'haohappy', 加密方法为: 'rotx++',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'rotx++', 13) . "
echo "\n密码原文为 'haohappy', 加密方法为: 'rotx--',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'rotx--', 13) . "
echo "\n密码原文为 'haohappy', 加密方法为: 'xor',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'xor', 5) . "
echo "\n密码原文为 'haohappy', 加密方法为: 'ascii_rotx',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'ascii_rotx', 5) . "
echo "\n密码原文为 'haohappy', 加密方法为: 'ascii_rotx++',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'ascii_rotx++', 5) . "
echo "\n密码原文为 'haohappy', 加密方法为: 'ascii_rotx--',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'ascii_rotx--', 5) . "
echo "\n密码原文为 'haohappy', 加密方法为: 'shuffle',
加密结果为:";
echo Text_Password::createFromLogin('haohappy', 'shuffle', 1) . "
echo "\n密码组原文为: 'haohappy', 'martin', 'vanhoucke', 'jansen', 加密方法为: 'reverse':\n";
$logins = array('haohappy', 'martin', 'vanhoucke', 'jansen');
echo "结果如下:"
;
print_r(Text_Password::createMultipleFromLogin($logins, 'reverse'));
echo "";
?>
运行结果如图:
你可以按F5刷新几次,会发现除了Shuffle操作(打乱)之外,其它结果都是固定不变,也即非随机的。
以上即Text_Password的三个主要应用。
应用实例――图形验证码
下面Haohappy将给出一个应用实例,那就是大家都非常熟悉的图形验证码。虽然只是一个简单的例子,却是一个完整的验证码程序的核心部份。思路是采用随机的背景图,再用不同的颜色写上随机字符串。
首先,我们准备三个图形背景文件,分别命名为bg1.png,bg2.png,bg3.png,放在images目录下。
代码如下:
require_once "Text/Password.php";
$string = Text_Password::create(10, 'pronounceable');
$num = rand(1,3);
header("Content-type: image/png");
$im = imagecreatefrompng("images/bg$num.png");
switch ($num) {
case 1:
$orange = imagecolorallocate($im, 253, 238, 227); //字体颜色
break;
case 2:
$orange = imagecolorallocate($im, 255, 204, 51);
break;
case 3:
$orange = imagecolorallocate($im, 255,255,200);
break;
}
$px = (imagesx($im) - 7.5 * strlen($string)) / 2; //位置
imagestring($im, 5, $px-3, 2, $string, $orange); //写上随机字符串
imagepng($im);
imagedestroy($im);
?>
运行结果如下:
左图为随机码类型pronounceable,右图为unpronounceable
使用Text_Password的好处就在这里,可以非常方便地使用你想要的随机码类型。
程序非常简单,只有二十多行,但功能算是相当强大,想使用程序进行边缘识别不那么容易,安全性较高。
至少比腾讯网站上QQ免费注册的那个验证码强多了:) 当然你也可以再加入随机杂点,画线,使用随机字体,颜色,旋转等等(如果有必要的话)。你可以在网页中加入
如果对几个图像函数不熟悉,请自行查阅PHP手册。
参考资料:
End-user Documentation and API documentation of PEAR::Text_Password