当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP和JS实现普通HTTP上安全地传输密码

PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
GBK的页面输出JSON格式的php函数
在字符串指定位置插入一段字符串的php代码
php 数组二分法查找函数代码
php htmlspecialchars加强版
支持数组的ADDSLASHES的php函数
判断是否为指定长度内字符串的php函数
php 读取文件乱码问题
PHP+ajax 无刷新删除数据
php microtime获取浮点的时间戳
php 魔术函数使用说明
php 高效率写法 推荐
PHP 学习路线与时间表
php中理解print EOT分界符和echo EOT的用法区别小结
Search File Contents PHP 搜索目录文本内容的代码
收藏的PHP常用函数 推荐收藏保存
PHP 伪静态隐藏传递参数名的四种方法
PHP实现域名whois查询的代码(数据源万网、新网)
php 用checkbox一次性删除多条记录的方法
php str_pad() 将字符串填充成指定长度的字符串

PHP和JS实现普通HTTP上安全地传输密码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 48 ::
收藏到网摘: n/a

1、理论

在普通HTTP上,一般表单中的密码都是以明文方式传到服务器进行处理的。这无疑给了坏人以可乘之机!这里我们就说说怎么传输密码才是安全的!

与其传输密码本身,到不如传输其加密后的形式。MD5是个不错的选择。第一,不同的资源几乎不可能生成相同的MD5摘要,第二,MD5的编码方式是不可逆推的。有了这些特性,我们就可以让MD5摘要公开的在Internet上传输,而不必担心密码被坏人知道。然后在服务端也将密码通过同样的方式加密,最后比较这两个字符串。

然而,我们不能为了登陆而将密码md5后直接通过Internet传输,因为坏人虽然不会知道我们的密码,但肯定会知道这个特殊的字符串可以授权他们访问我们的网站!

解决思路:每次登陆时,首先由服务器提供一个随机字符串,然后客户端将这个随机字符串和密码相加后再加密!这样你的密码没有变,但是通过上面的方法加密后的MD5摘要却完全不同。这样就算坏人得到了这些MD5摘要,他们也不可能分析出你的密码!

2、实现

客户端Javascript并没有提供现成的md5算法,但我们在 google 上用 "md5 javascript" 搜索,就可以得到很多md5在Javascript上实现的例子。

在PHP中我就不用多说了,直接用md5()这个函数就可以搞定!随机字符串我们可以用session来存储(PHP就是强啊~~)

3、注意

在JS中,中文都是UTF-8格式的,所以如果你的密码是中文,而且存储在服务端的密码的编码方式是GB2312,那么两个密码加密后的字符串是完全不同的!

Dnawo注:原文对"公钥"和"私钥"的理解有误,所以对部分内容做了适当的修改!