向普通人加密 用PHP程序保护数据(3)_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:用PHP实现Ftp用户的在线管理
领导要我策划一个网页设计大赛和Flash创作大赛,要求必须实现在线报名和上传作品。通过FreeBSD Apache PHP Mysql FTP我实现了该要求。 实现在线报名和上传作品的思路是利用网页表单收集用户

在这一过程结束时,数据库中仍有一个明文密码。您不能显示它。最容易的修复方法是使用 PHP 的内置 crypt() 功能。

使用 crypt()

PHP 的内置 crypt() 功能可实现单向加密 或单向散列。它只所以是单向的,是因为在对某内容进行加密后,您永远不能将其反转为明文。乍一看,此想法似乎很荒谬。使用加密主要是保护信息,随后能够使用该信息,后者通常意味着能够对它进行解密。

不要绝望。单向加密方案和 crypt() 特别受欢迎。可以使保护信息的方法更安全。如果您的用户密码列表落入不法之徒之手,他们实际上没有将密码解密为明文的方法。

让我们返回到密码示例。注释 (notational) PHP 应用程序可能包括让系统管理员创建、编辑和删除用户的模块。例如,在将用户记录存储到用户表之前,PHP 脚本可以使用 crypt() 对密码加密。

清单 4. 使用 crypt() 加密密码

以下为引用的内容:

<?php
$user = strip_tags(substr($_POST['user'],0,32));
$pw = strip_tags(substr($_POST['password'],0,32));

$cleanpw = crypt($pw);

$sql = "insert into users (username,password)
values('".mysql_real_escape_string($user)."',
'".mysql_real_escape_string($cleanpw)."')";
//.....etc....
?>

crypt() 将一串明文作为它的第一个参数字,对它应用 salt 会影响加密算法的随机性,并生成输入明文的单向暗文。如果不提供 salt,则 PHP 通常默认其系统 salt,它可以是以下值和长度之一:
算法 Salt

以下为引用的内容:
CRYPT_STD_DES 2 个字符(默认)
CRYPT_EXT_DES 9 个字符
CRYPT_MD5 12 个字符,以 $1$开头
CRYPT_BLOWFISH 16 个字符,以 $2$开头


许多现代 PHP 安装使用 MD5 或更高的 salt,它们使用强大的 12 个字符的 salt,但是,不要对任何事情想当然。您最好知道系统正在使用哪一个值。您可以使用以下 PHP 代码片段检查服务器的设置:

以下为引用的内容:
<?php echo "System salt size: ". CRYPT_SALT_LENGTH; ?>

返回的答案将是 2、9、12 或 16,它告诉您系统正在使用的值。要使用 MD5 或更高版本的 salt,您可以显式调用明文和 salt 参数中的 crypt() 函数以及 md5() 函数,以获取随机暗文(参见清单 5)。md5() 函数可以散列反馈的任何字符串,并将其转变为固定长度为 32 个字符的字符串。您可能更喜欢其他方法,具体的使用取决于安全需求和个人爱好。

清单 5. 使用 crypt() 和 md5() 加密密码

以下为引用的内容:

<?php
$user = strip_tags(substr($_POST['user'],0,32));
$pw = strip_tags(substr($_POST['password'],0,32));

$cleanpw = crypt(md5($pw),md5($user));

$sql = "insert into users (username,password)
values('".mysql_real_escape_string($user)."',
'".mysql_real_escape_string($cleanpw)."')";
//.....etc....
?>

现在数据库中已经拥有一个已加密的密码,但是没有对其进行解密的方法。如何使之有用?一个比较容易的方法是:对用户提供的任何传入密码都使用相同的加密方法,并将结果与您存储的密码比较。

分享:用PHP程序实现删除目录的三种方法实例
1。递规法: //没测试 以下为引用的内容: deleteDir($dir) { if (rmdir($dir)==false && is_dir($dir)) { if ($dp = opendir($dir)) { w

来源:模板无忧//所属分类:PHP教程/更新时间:2008-08-22
相关PHP教程