数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量 交易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣了解PHP提供的一系列安全功能。在本篇文章中,我们将介绍这些 功能,提供一些基本的用法,以便你能够为自己的应用软件中增加安全功能。 预备知识 在详细介绍PHP的安全功能之 前,我们需要花点时间来向没有接触过这方面内容的读者介绍一些有关密码学的基本知识,如果对密码学的基本概念已经非常熟悉,就可以跳 过去这一部分。 密码学可以通俗地被描述为对加/解密的研究和实验,加密是将易懂的资料转换为不易懂资料的过程,解密 则是将不易懂的资料转换为原来易懂资料的过程。不易懂的资料被称作密码,易懂的资料被称作明码。 数据的加/解密都需 要一定的算法,这些算法可以非常地简单,如著名的凯撒码,但当前的加密算法要相对复杂得多,其中一些利用现有的方法甚至是无法破译的 。 PHP的加密功能 只要有一点使用非Windows平台经验的人可能对crypt()也相当熟悉,这一函数完成被称作单向加密 的功能,它可以加密一些明码,但不能够将密码转换为原来的明码。尽管从表面上来看这似乎是一个没有什么用处的功能,但它的确被广泛用 来保证系统密码的完整性。因为,单向加密的口令一旦落入第三方人的手里,由于不能被还原为明文,因此也没有什么大用处。在验证用户输 入的口令时,用户的输入采用的也是单向算法,如果输入与存储的经加密后的口令相匹配,则输入的口信一定是正确的。 PHP同样提供了使用其crypt()函数完成单向加密功能的可能性。我将在这里简要地介绍该函数: string crypt (string input_string [, string salt]) 其中的input_string参数是需要加密的字符串,第二个可选的salt是一个位字串,它能够影响 加密的暗码,进一步地排除被称作预计算攻击的可能性。缺省情况下,PHP使用一个2个字符的DES干扰串,如果你的系统使用的是MD5(我将在 以后介绍MD5算法),它会使用一个12个字符的干扰串。顺便说一下,可以通过执行下面的命令发现系统将要使用的干扰串的长度: print “My system salt size is: “. CRYPT_SALT_LENGTH; 系统也可能支持其他的加密算法。crypt()支持四 种算法,下面是它支持的算法和相应的salt参数的长度: 算法 Salt长度 CRYPT_STD_DES 2-character (Default) CRYPT_EXT_DES 9-character CRYPT_MD5 12-character beginning with $ CRYPT_BLOWFISH 16-character beginning with $ […]
Read the rest of this entry »Archive for May, 2008
关于如何提高PHP速度的一些文章
简单的数据缓存技术 近来做了一阵子程序性能的优化工作,有个比较有意思的想法,想提出来和大家交流一下。 Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。 <? // load data with cache function load_data($id,$cache_lifetime) { // the return data $data = array(); // make cache filename $cache_filename = ‘cache_‘.$id.‘.php‘; // check cache file‘s last modify time $cache_filetime = filemtime($cache_filename); if (time() – $cache_filetime <= $cache_lifetime) { //** the cache is not expire include($cache_filename); } else { //** the […]
Read the rest of this entry »谈谈生成静态页面的一些经验
静态页面的生成一般有这么几个思路了。。 1。程序编写过程中。不使用直接输出的语句。而时将所有的输出连接至输出字符串,输出完成后。再直接将输出字符串内容写入文件 2。编写中按照正常的方式编写。通过ob函数组捕获输出。然后将输出写入文件 3。使用模板类时,用get/fetch一类的方法获取输出。并写入文件。 具体实现上又有这两种方法 1。管理后台添加记录时,直接生成目标html页面,并且前台调用连接直接指向生成的html页面。这种方法程优点是程序效率最高。服务器负荷轻,不过由于生成的是纯静态页面,一旦页面样式上有所改动就必须重新生成所有的内容页。所以实际使用中应用一般不是太多。更多的是使用js,ssi,xml/xsl等客户端手段,生成的静态文件中仅保存数据,不涉及样式,这样能达到速度和维护性的平衡,不过相对前后台程序要复杂些(应用这种方法时,由于内容为纯静态,可以搭配单独编译的纯静态的apache使用。。效率和资源占用上比包含动态内容支持的要更佳) 2。前台访问链接指向php程序,php程序首先检查是否存在相应的静态文件。如果静态文件不存在。则生成并重定向至此文件,否则直接重定向。这种方法实际使用中一般和apache的url_rewrite功能一起使用。将php的文件地址重为html的形式,有利于搜索引擎的检索。这种方法在效率上略有损失,不过程序结构简单,便于调整,在访问量不是很大时使用很合适
Read the rest of this entry »