向普通人加密 用PHP程序保护数据(3)_PHP教程
推荐:用PHP实现Ftp用户的在线管理领导要我策划一个网页设计大赛和Flash创作大赛,要求必须实现在线报名和上传作品。通过FreeBSD Apache PHP Mysql FTP我实现了该要求。 实现在线报名和上传作品的思路是利用网页表单收集用户
在这一过程结束时,数据库中仍有一个明文密码。您不能显示它。最容易的修复方法是使用 PHP 的内置 crypt() 功能。
使用 crypt()
PHP 的内置 crypt() 功能可实现单向加密 或单向散列。它只所以是单向的,是因为在对某内容进行加密后,您永远不能将其反转为明文。乍一看,此想法似乎很荒谬。使用加密主要是保护信息,随后能够使用该信息,后者通常意味着能够对它进行解密。
不要绝望。单向加密方案和 crypt() 特别受欢迎。可以使保护信息的方法更安全。如果您的用户密码列表落入不法之徒之手,他们实际上没有将密码解密为明文的方法。
让我们返回到密码示例。注释 (notational) PHP 应用程序可能包括让系统管理员创建、编辑和删除用户的模块。例如,在将用户记录存储到用户表之前,PHP 脚本可以使用 crypt() 对密码加密。
清单 4. 使用 crypt() 加密密码
以下为引用的内容: <?php $cleanpw = crypt($pw); $sql = "insert into users (username,password) |
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 $cleanpw = crypt(md5($pw),md5($user)); $sql = "insert into users (username,password) |
现在数据库中已经拥有一个已加密的密码,但是没有对其进行解密的方法。如何使之有用?一个比较容易的方法是:对用户提供的任何传入密码都使用相同的加密方法,并将结果与您存储的密码比较。
分享:用PHP程序实现删除目录的三种方法实例1。递规法: //没测试 以下为引用的内容: deleteDir($dir) { if (rmdir($dir)==false && is_dir($dir)) { if ($dp = opendir($dir)) { w
- 相关链接:
- 教程说明:
PHP教程-向普通人加密 用PHP程序保护数据(3)。