在普通HTTP上安全地传输密码


Posted in PHP onJuly 21, 2007

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,那么两个密码加密后的字符串是完全不同的!

PHP 相关文章推荐
PHP 开源框架22个简单简介
Aug 24 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
YII Framework框架教程之国际化实现方法
Mar 14 PHP
PHP-FPM实现性能优化
Mar 31 PHP
利用PHP自动生成印有用户信息的名片
Aug 01 PHP
php 常用的系统函数
Feb 07 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
Jul 21 #PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 #PHP
一段php加密解密的代码
Jul 16 #PHP
php下一个阿拉伯数字转中文数字的函数
Jul 16 #PHP
php+mysql开源XNA 聚合程序发布 下载
Jul 13 #PHP
PHP如何编写易读的代码
Jul 10 #PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 #PHP
You might like
php 判断字符串中是否包含html标签
2014/02/17 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
php中define用法实例
2015/07/30 PHP
PHP 中使用explode()函数切割字符串为数组的示例
2017/05/06 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
php实现socket推送技术的示例
2017/12/20 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
js编写选项卡效果
2017/05/23 Javascript
Vue组件中slot的用法
2018/01/30 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python交换变量
2008/09/06 Python
python实现简单的计时器功能函数
2015/03/14 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python简单验证码识别的实现方法
2019/05/10 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
django orm模块中的 is_delete用法
2020/05/20 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
大学生活自我评价
2014/04/09 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
会议主持人开场白台词
2015/05/28 职场文书