[原创]在普通HTTP上安全地传输密码
2006-08-16
在phpx.com上原载,是我的原创
http://www.phpx.com/happy/thread-122499-1-1.html上有很多讨论


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

完。

阅读:3533 评论: 4 💬
[原创]在普通HTTP上安全地传输密码
2006-08-16
在phpx.com上原载,是我的原创
http://www.phpx.com/happy/thread-122499-1-1.html上有很多讨论


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

完。

阅读:2922 评论: 4 💬
phpcms文件管理器 v4.02 开发中....
2006-08-01
4.03版请点击这里 http://www.longbill.cn/blog/index.php?id=75


此日志不断更新中....(06/08/18)

phpcms文件管理器要逐渐向网络硬盘转型了!
抢先体验地址: http://cn5.cn/test1/
欢迎在此提出建议或意见

4.02 已经改进的地方:
完全修改了模板,可以自适应窗口大小
集成BlueShow图片浏览器
修改了限制文件类型的一个bug
修改了zip打包和解压的bug
修改了根目录为../../时的bug

8月13日更新:
彻底征服了IE缓存策略BUG!!!减轻了服务器的负担!

8月18日更新:
才用了json来传输数据,可以传送更多的信息(包括目录简介等)。也可以解决全角字符的Bug

9月23日更新:
晕,进度越来越慢了,不得不跟大家提一下了:
    其实我已经高三了,原来以为高三没什么的了不起的,照样可以抽出时间写程序。但我发现我错了,为了高考,为了我的前程,我不得不全身心地投入到学习中。。。如果没有经历过高三的人肯定不能体会到高三是怎样的一种生活,为了提高成绩,可以说学校方面用尽了一切措施,目的在于挖干我们身上的每一点潜能。甚至还用了起催眠作用的演讲,班会等等,,但我们也是自愿的,,(哎,现在的社会也只能这样了。。)
    其中一着狠毒的就是叫我们把自己的目标大学写出来,做一个大的告示牌挂到教室。。。我们班43个同学,居然就有17个写了清华或北大 ,我则没有那种冲动,填了个浙江大学,我想也不错了吧,而且我相信我一定能考上的。
    就写这么多了,我还要去看书呢。。。

完。

阅读:3578 评论: 29 💬
得到元素真实的背景颜色的函数[javascript]
2006-08-01
这个函数来自Rico,自己改了一下。
说明: 
    传入参数一个,为元素的id值或元素本身,返回为元素的真实背景色值(字符串)。 值得一提的是IE里面返回的是16进制的值,而Mozilla则是rgb值。
演示地址:  http://longbill.cn/down/sample/getbg.htm

function getBg(element)
{//author: Longbill (www.longbill.cn)
if (typeof element == "string") element = document.getElementById(element);
if (!element) return;
cssProperty = "backgroundColor";
mozillaEquivalentCSS = "background-color";
if (element.currentStyle)
var actualColor = element.currentStyle[cssProperty];
else
{
var cs = document.defaultView.getComputedStyle(element, null);
var actualColor = cs.getPropertyValue(mozillaEquivalentCSS);
}
if (actualColor == "transparent" && element.parentNode)
return arguments.callee(element.parentNode);
if (actualColor == null)
return "#ffffff";
else
return actualColor;
}

完。

阅读:3314 评论: 2 💬
用PHP控制用户浏览器缓存!
2006-07-29
前段时间因为补课,所以好久没有发过日志了~ 你写的php程序是否高效?你是否会担心自己的程序太庞杂,执行速度很慢?你是否用过php动态生成图片? 其实每种浏览器都有缓存策略,会暂时将每一个浏览过的文件缓存在一个特殊的文件夹里。我们就可以在用户重复提交页面请求的时候,告诉用户这个页面没有改变,可以调用缓存。 那我们怎么知道用户有没有这个页面的缓存数据呢? 其实浏览器在发送请求的时候会先发送http头,一般象这样:
Date: Sun, 30 Jul 2006 09:18:11 GMT Content-Type: image/gif Last-Modified: Wed, 19 Jul 2006 07:40:06 GMT ETag: "8c55da8d6abc61:2327" Content-Length: 14757
其中Last-Modified: Wed, 19 Jul 2006 07:40:06 GMT ETag: "8c55da8d6abc61:2327"就是有关页面的缓存信息的。然后如果服务器返回的响应代码不是HTTP 200 (OK),而是 304的话,浏览器就会从缓存中读取数据。 根据这个原理,我写了一个函数,这个函数可以用在不经常更新或者需要经常刷新的页面,可以大大减轻服务器的负担,因为它如果发现客户端有缓存,就向客户端发送一个304响应,然后停止程序的执行。 演示地址:http://www.longbill.cn/down/sample/etag.php
cache();
echo date("Y-m-d H:i:s"); 
function cache()
{//author:Longbill ( www.longbill.cn )
  $etag = "eeee";  //标记字符串,可以任意修改
  if ($_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
  {
    header('Etag:'.$etag,true,304);
    exit;
  }
  else header('Etag:'.$etag);
}

完。

阅读:3061 评论: 3 💬
发布BlueShow v1.0 图片浏览器(类似lightbox)
2006-07-01
好多天没有发过日志了~
最近写了一个图片浏览器,是为PHPCMS文件管理器设计的,但后来看到了Lightbox,所以就改了一下,可以给一般的网页使用。

演示及说明地址:  http://longbill.cn/down/sample/blueshow/index.htm

使用方法: 
1.下载 blueshow.js 文件,放到服务器上 (点击这里下载) 你也可以直接使用这个: http://longbill.cn/down/blog/blueshow.js

2.在你要用此程序的网页中写上这句(在和之间):
<script src='http://yoursite/blueshow.js'></script>
 http://yoursite/blueshow.js 为你放置程序的地址
3.程序可以使用参数 比如 blueshow.js?lock=1&autorun=1
  //说明:
  //取值范围为0和1
  //lock:表示显示图片时是否锁定原网页
  //autorun: 是否自动初始化(如果你的网页含有一些比较慢的统计代码强烈建议将此值设置为0)
  //如果autorun=0那么请在网页的最后(统计代码之前)加上 
<script>BlueShow();</script>
 详情见 http://longbill.cn/down/sample/blueshow/index.htm
4.符合条件的图片包括:
  a.
<a href='fdsfa.jpg'>链接</a>
(指向图片的链接,包括gif,jpg,png,jpeg,bmp,等,具体见blueshow.js。 如果图片是动态生成的,比如 img.php?id=3 那么在后面加上 "&.gif" 即可)
  b.
<img class='blueshow' src='xxx.gif' />
 (class名中含有 "blueshow" 字符的img,如果img本来有class属性,那么再原来的class名后加空格再加"blueshow"即可)
 

完。

阅读:3579 评论: 11 💬
我的第一个Flash作品--Escape Encoder
2006-06-10
    突然觉得Flash很强大,而且听说ActionScript 3出来了(详情),于是今天安了Flash 8~~本来还在为教程发愁,突然发现Flash 8自带的说明文档非常详细(我建议初学Flash的朋友都看那个),比其他教程都要好!!
    下面是我做的Flash,
Flash Player文件

完。

阅读:3161 评论: 8 💬
php中ob(Output Buffer 输出缓冲)函数简介
2006-06-02
来自:http://bbs.phome.net/ShowThread/?threadid=9247&forumid=2
在PHP编程中,  我们经常会遇到一些直接产生输出的函数,  如passthru(),readfile(),  var_dump()  等.  但有时我们想把这些函数的输出导入到文件中,或者先经过处理再输出,  或者把这些函数的输出作为字符串来处理.  
这时我们就要用到  Output  Buffer(输出缓冲)  函数了.  

处理输出缓冲的函数主要有这么几个:  
ob_start()  开始输出缓冲,  这时PHP停止输出,  在这以后的输出都被转到一个内部的缓冲里.  

ob_get_contents()  这个函数返回内部缓冲的内容.  这就等于把这些输出都变成了字符串.  

ob_get_  length()  返回内部缓冲的长度.  

ob_end_flush()  结束输出缓冲,  并输出缓冲里的内容.  在这以后的输出都是正常输出.  

ob_end_clean()  结束输出缓冲,  并扔掉缓冲里的内容.  

举个例子,  var_dump()函数输出一个变量的结构和内容,  这在调试的时候很有用.  
但如果变量的内容里有  <  ,  >  等HTML的特殊字符,  输出到网页里就看不见了.  怎么办呢?  
用输出缓冲函数能很容易的解决这个问题.  

ob_start();  
var_dump($var);  
$out  =  ob_get_contents();  
ob_end_clean();  


这时var_dump()的输出已经存在  $out  里了.  你可以现在就输出:  

echo  '<pre>'  .  htmlspecialchars($out)  .  '</pre>'  ;  

或者等到将来,  再或者把这个字符串送到模板(Template)里再输出.  

完。

阅读:3464 评论: 0 💬
发布O-blog风格--LongbillBlue
2006-06-01
更新:超强的O-Blog风格 LongbillBlue [AJAX技术,防垃圾评论,防垃圾留言]

LongbillBlue 风格
适用程序: O-blog ( www.phpblog.cn )
作    者: Longbill ( www.longbill.cn )
邮    箱: Longbill.cn@gmail.com
下载地址: http://www.longbill.cn/down/blog/longbillblue.zip
说明:
    这个风格是在oblog原有风格blueclassic的基础上改进而来的。
修改的地方有:
1.修改了风格的主色调。由原来的黄色为主(我真不知道一个黄色的风格为什么叫blueclassic),改为了现在的淡蓝色为主。
2.改进了由显示日志的阅读次数而带来的拖速度的现象。使用了ajax技术!
3.增加了表单的前端检查。

完。

阅读:3411 评论: 5 💬
可以实现元素圆角的函数~
2006-06-01
上次在blueidea上看到一个元素圆角的实现方法,但是那个太复杂了。于是就自己写了一个函数,可以将元素自动圆角。
演示地址:http://longbill.cn/down/sample/roundcorner.htm
不要用在有 padding 值得元素上,最好是在外面套一层。详情见演示地址。
代码:
function RoundCorner(obj,style)
{
/********
网页元素圆角函数!!
作者: Longbill
主页: www.longbill.cn
********/
var r = [];
var styles = [
{top:["0 5px","0 3px","0 2px","0 1px","0 1px"],bottom:["0 1px","0 1px","0 2px","0 3px","0 5px"]},
{top:["0 5px","0 3px","0 2px","0 1px","0 1px"],bottom:["0px","0px","0px","0px","0px"] },
{top:["0 0 0 5px","0 0 0 3px","0 0 0 2px","0 0 0 1px","0 0 0 1px"],bottom:["0 1 0 0px","0 1 0 0px","0 2 0 0px","0 3 0 0px","0 5 0 0px"]},
{top:["0 5 0 0px","0 3 0 0px","0 2 0 0px","0 1 0 0px","0 1 0 0px"],bottom:["0 0 0 1px","0 0 0 1px","0 0 0 2px","0 0 0 3px","0 0 0 5px"]}
]; //author: longbill.cn
if (!style || style>styles.length) style = 1;
style--;
var btop = styles[style].top,bbottom = styles[style].bottom;
obj = document.getElementById(obj);
if (!obj) return;
var HTML = obj.innerHTML;
obj.innerHTML = "";
for(var istop=1;istop>=0;istop--)
{
var topborder = document.createElement("b");
topborder.style.display = "block";
topborder.style.height = "2px";
topborder.style.backgroundColor = (obj.parentNode.style.backgroundColor)?obj.parentNode.style.backgroundColor:"#FFFFFF";
for(var i=0;i<btop.length;i++)
{
var b = document.createElement("b");
if (obj.style.backgroundColor)
b.style.backgroundColor = obj.style.backgroundColor;
else if (obj.className)
b.className = obj.className;
b.style.display = "block";
b.style.margin = (istop)?btop[i]:bbottom[i];
b.style.height = "1px";
b.style.overflow = "hidden";
b.style.width = "auto";
topborder.appendChild(b);
}
obj.appendChild(topborder);
if (istop) obj.innerHTML+=HTML;
}
}

完。

阅读:3204 评论: 4 💬
Copyright © Longbill 2008-2026