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

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

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

使用 PHP 进行加密和解密

本文的大部分篇幅讨论了使用 crypt() 的单向加密。但是,如果您要将消息发送给某人,并提供对该消息解密的方法,又该如何办呢?请使用 PHP 支持的公钥加密技术。

使用公钥加密的用户拥有一个私钥和一个公钥,并且他们与其他用户共享公钥。如果您要将一封私有短信发送给您的朋友 John Doe,您可以使用 John Doe 的公钥(您已经将其存储在自已的 keyring 中)加密该消息。John Doe 收到该消息后,只有他可以使用他的私钥对其解密。任何给定用户的公钥和私钥在数学上是不能相关的。对于 PGP 和其他公钥加密方法,不存在从公钥推断某人私钥的方法。

PGP 的附加特性是:私钥的密码实际上不是密码,它是一个密码短语。它可以是整句话,包括标点符号、空格和所有字符样式。

使用基于 PGP 的公钥加密的一种方法是使用 GNU Privacy Guard (GPG)。使用 GPG 加密的任何消息都可以使用 GPG、PGP 或支持任一程序的任何数量的电子邮件客户机插件来解密。在示例中,联机表接受用户输入(包括消息);使用 GPG 为特定的接收方加密消息;然后发送消息。

清单 8. 使用 GPG

以下为引用的内容:

<?php
//set up users
$from = "webforms@example.com";
$to = "you@example.com";

//cut the message down to size, remove HTML tags
$messagebody = strip_tags(substr($_POST['msg'],0,5000));
$message_body = escapeshellarg($messagebody);

$gpg_path = '/usr/local/bin/gpg';
$home_dir = '/htdocs/www';
$user_env = 'web';

$cmd = "echo $message_body   HOME=$home_dir USER=$user_env $gpg_path" .
"--quiet --no-secmem-warning --encrypt --sign --armor " .
"--recipient $to --local-user $from";

$message_body = `$cmd`;

mail($to,'Message from Web Form', $message_body,"From:$from\r\n");

?>

在此示例中,PHP 调用 /usr/local/bin/gpg(此位置因服务器而异),以便使用发送方的私钥和接收方的公钥加密消息。结果,只有接收方可以解密该消息,并且知道来自发送方的消息。此外,还可以设置 HOME 和 USER 环境变量,以通知 GPG 在何处查找存储这些密钥的 keyring。其他标志的功能如下:

--quiet 和 --no-secmem-warning 抑制来自 GPG 的警告。
--encrypt 执行加密。
--sign 添加签名,以验证发送方的身份。
--armor 产生非二进制的 ASCII 输出,这样,易于通过电子邮件将其发送。
正常情况下,正如前面提到的,机密密钥受密码短语的保护。本特定实例没有使用密码短语,因为在每次表单提交时它都需要手工输入。当然,在下列情况下您还可以选择其他选项:在单独文件中提供短语,或使用它自已的身份验证方案防止表单公用(例如,如果它是一个只能由公司销售代表访问的表单)。

另请注意,除非您正在对允许用户输入电子邮件消息的表使用 SSL,否则键入的任何内容都是明文形式的。换句话说,客户机和服务器之间的任何人都可以看见它。不过,这是另一个主题。

结束语

我们对安全性、加密技术,甚至公钥加密技术介绍了很多,目的是帮助您成功开发下一个 PHP 项目。使用加密和其他加密方法的要点不是创建 100% 可靠的无缝系统。关闭的计算机才是不可攻击的系统,但是也不能完全保证,因为某人可能会走上前走,打开它,然后攻击它。加密的要点是使获取敏感数据变得非常困难,以致黑客不再尝试攻击,或尝试攻击失败后离去。

所有安全性考虑必须兼顾方便和保护。使用强大的算法密钥将所有数据都进行单向加密意味着您的数据非常安全,但是使用时很不方便。这带来的相应缺陷也很严重,如同使用非加密的内容一样,为您带来的任何方便也为其他人获取数据带来了可怕的方便。通过加密重要的机密数据(如密码、信用卡号和秘密消息)和添加好的安全措施(如深层防御、过滤用户提供的数据和传统的一般常识)可以达到最佳平衡。

本文收集整理自互联网,若您是原文作者,请来信更改作者及出处 Post#vip.qq.com(把#改为@)

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

共5页上一页12345下一页
来源:模板无忧//所属分类:PHP教程/更新时间:2008-08-22
相关PHP教程