2006年11月27日星期一

软件加密技术和注册机制

  本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考。

  1、加密技术概述

  一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。

  对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。

  但是,软件的加密不同于数据的加密,它只能是“隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然机器可以“看见”这些明文,那么 Cracker,通过一些技术,也可以看到这些明文。

  于是,从理论上,任何软件加密技术都可以破解。只是破解的难度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了。

  所以,反盗版的任务(技术上的反盗版,而非行政上的反盗版)就是增加 Cracker 的破解难度。让他们花费在破解软件上的成本,比他破解这个软件的获利还要高。这样 Cracker 的破解变得毫无意义——谁会花比正版软件更多的钱去买盗版软件?

  2、密码学简介

  2.1   概念

  (1) 发送者和接收者

  假设发送者想发送消息给接收者,且想安全地发送信息:她想确信偷听者不能阅读发送的消息。

  (2) 消息和加密

  消息被称为明文。用某种方法伪装消息以隐藏它的内容的过程称为加密,加了密的消息称为密文,而把密文转变为明文的过程称为解密。

  明文用M(消息)或P(明文)表示,它可能是比特流(文本文件、位图、数字化的语音流或数字化的视频图像)。至于涉及到计算机,P是简单的二进制数据。明文可被传送或存储,无论在哪种情况,M指待加密的消息。

  密文用C表示,它也是二进制数据,有时和M一样大,有时稍大(通过压缩和加密的结合,C有可能比P小些。然而,单单加密通常达不到这一点)。加密函数E作用于M得到密文C,用数学表示为:

  E(M)=C.

  相反地,解密函数D作用于C产生M

  D(C)=M.

  先加密后再解密消息,原始的明文将恢复出来,下面的等式必须成立:

  D(E(M))=M

  (3) 鉴别、完整性和抗抵赖

  除了提供机密性外,密码学通常有其它的作用:.

  (a) 鉴别

  消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。

  (b) 完整性检验

  消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。

  (c) 抗抵赖

  发送者事后不可能虚假地否认他发送的消息。

  (4) 算法和密钥

  密码算法也叫密码,是用于加密和解密的数学函数。(通常情况下,有两个相关的函数:一个用作加密,另一个用作解密)

  如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。受限制的算法具有历史意义,但按现在的标准,它们的保密性已远远不够。大的或经常变换的用户组织不能使用它们,因为每有一个用户离开这个组织,其它的用户就必须改换另外不同的算法。如果有人无意暴露了这个秘密,所有人都必须改变他们的算法。

  更糟的是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须有他们自己的唯一算法。这样的组织不可能采用流行的硬件或软件产品。但窃听者却可以买到这些流行产品并学习算法,于是用户不得不自己编写算法并予以实现,如果这个组织中没有好的密码学家,那么他们就无法知道他们是否拥有安全的算法。

  尽管有这些主要缺陷,受限制的算法对低密级的应用来说还是很流行的,用户或者没有认识到或者不在乎他们系统中内在的问题。

  现代密码学用密钥解决了这个问题,密钥用K表示。K可以是很多数值里的任意值。密钥K的可能值的范围叫做密钥空间。加密和解密运算都使用这个密钥(即运算都依赖于密钥,并用K作为下标表示),这样,加/解密函数现在变成:

  EK(M)=C

  DK(C)=M.

  DK(EK(M))=M.

  有些算法使用不同的加密密钥和解密密钥,也就是说加密密钥K1与相应的解密密钥K2不同,在这种情况下:

  EK1(M)=C

  DK2(C)=M

  DK2 (EK1(M))=M

  所有这些算法的安全性都基于密钥的安全性;而不是基于算法的细节的安全性。这就意味着算法可以公开,也可以被分析,可以大量生产使用算法的产品,即使偷听者知道你的算法也没有关系;如果他不知道你使用的具体密钥,他就不可能阅读你的消息。

  密码系统由算法、以及所有可能的明文、密文和密钥组成的。

  基于密钥的算法通常有两类:对称算法和公开密钥算法。下面将分别介绍:

  2.2   对称密码算法

  对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。

  对称算法的加密和解密表示为:

  EK(M)=C

  DK(C)=M

  对称算法可分为两类。一次只对明文中的单个比特(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组比特亚行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64比特——这个长度大到足以防止分析破译,但又小到足以方便使用(在计算机出现前,算法普遍地每次只对明文的一个字符运算,可认为是序列密码对字符序列的运算)。

  2.3   公开密码算法

  公开密钥算法(也叫非对称算法)是这样设计的:用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥计算出来(至少在合理假定的长时间内)。之所以叫做公开密钥算法,是因为加密密钥能够公开,即陌生者能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。在这些系统中,加密密钥叫做公开密钥(简称公钥),解密密钥叫做私人密钥(简称私钥)。私人密钥有时也叫秘密密钥。为了避免与对称算法混淆,此处不用秘密密钥这个名字。

  用公开密钥K加密表示为

  EK(M)=C.

  虽然公开密钥和私人密钥是不同的,但用相应的私人密钥解密可表示为:

  DK(C)=M

  有时消息用私人密钥加密而用公开密钥解密,这用于数字签名(后面将详细介绍),尽管可能产生混淆,但这些运算可分别表示为:

  EK(M)=C

  DK(C)=M

  当前的公开密码算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中应用有限。

  2.4   单向散列函数

  单向散列函数 H(M) 作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,其中 h 的长度为 m .

  输入为任意长度且输出为固定长度的函数有很多种,但单向散列函数还有使其单向的其它特性:

  (1) 给定 M ,很容易计算 h ;

  (2) 给定 h ,根据 H(M) = h 计算 M 很难 ;

  (3) 给定 M ,要找到另一个消息 M‘ 并满足 H(M) = H(M’) 很难。

  在许多应用中,仅有单向性是不够的,还需要称之为“抗碰撞”的条件:

  要找出两个随机的消息 M 和 M‘,使 H(M) = H(M’) 满足很难。

  由于散列函数的这些特性,由于公开密码算法的计算速度往往很慢,所以,在一些密码协议中,它可以作为一个消息 M 的摘要,代替原始消息 M,让发送者为 H(M) 签名而不是对 M 签名 .

  如 SHA 散列算法用于数字签名协议 DSA中。

  2.5   数字签名

  提到数字签名就离不开公开密码系统和散列技术。

  有几种公钥算法能用作数字签名。在一些算法中,例如RSA,公钥或者私钥都可用作加密。用你的私钥加密文件,你就拥有安全的数字签名。在其它情况下,如DSA,算法便区分开来了??数字签名算法不能用于加密。这种思想首先由Diffie和Hellman提出 .

  基本协议是简单的 :

  (1) A 用她的私钥对文件加密,从而对文件签名。

  (2) A 将签名的文件传给B.

  (3) B用A的公钥解密文件,从而验证签名。

  这个协议中,只需要证明A的公钥的确是她的。如果B不能完成第(3)步,那么他知道签名是无效的。

  这个协议也满足以下特征:

  (1) 签名是可信的。当B用A的公钥验证信息时,他知道是由A签名的。

  (2) 签名是不可伪造的。只有A知道她的私钥。

  (3) 签名是不可重用的。签名是文件的函数,并且不可能转换成另外的文件。

  (4) 被签名的文件是不可改变的。如果文件有任何改变,文件就不可能用A的公钥验证。

  (5) 签名是不可抵赖的。B不用A的帮助就能验证A的签名。

  在实际应用中,因为公共密码算法的速度太慢,签名者往往是对消息的散列签名而不是对消息本身签名。这样做并不会降低签名的可信性。

  3    当前流行的一些软件保护技术

  3.1   序列号保护

  数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧。但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎是越来越大了。

  看看在网络上大行其道的序列号加密的工作原理。当用户从网络上下载某个shareware——共享软件后,一般都有使用时间上的限制,当过了共享软件的试用期后,你必须到这个软件的公司去注册后方能继续使用。注册过程一般是用户把自己的私人信息(一般主要指名字)连同信用卡号码告诉给软件公司,软件公司会根据用户的信息计算出一个序列码,在用户得到这个序列码后,按照注册需要的步骤在软件中输入注册信息和注册码,其注册信息的合法性由软件验证通过后,软件就会取消掉本身的各种限制,这种加密实现起来比较简单,不需要额外的成本,用户购买也非常方便,在互联网上的软件80%都是以这种方式来保护的。

  软件验证序列号的合法性过程,其实就是验证用户名和序列号之间的换算关系是否正确的过程。其验证最基本的有两种,一种是按用户输入的姓名来生成注册码,再同用户输入的注册码比较,公式表示如下:

  序列号 = F(用户名)

  但这种方法等于在用户软件中再现了软件公司生成注册码的过程,实际上是非常不安全的,不论其换算过程多么复杂,解密者只需把你的换算过程从程序中提取出来就可以编制一个通用的注册程序。

  另外一种是通过注册码来验证用户名的正确性,公式表示如下:

  用户名称 = F逆(序列号) (如ACDSEE)

  这其实是软件公司注册码计算过程的反算法,如果正向算法与反向算法不是对称算法的话,对于解密者来说,的确有些困难,但这种算法相当不好设计。

  于是有人考虑到以下的算法:

  F1(用户名称) = F2(序列号)

  F1、F2是两种完全不同的的算法,但用户名通过F1算法计算出的特征字等于序列号通过F2算法计算出的特征字,这种算法在设计上比较简单,保密性相对以上两种算法也要好的多。如果能够把F1、F2算法设计成不可逆算法的话,保密性相当的好;可一旦解密者找到其中之一的反算法的话,这种算法就不安全了。一元算法的设计看来再如何努力也很难有太大的突破,那么二元呢?

  特定值 = F(用户名,序列号)

  这个算法看上去相当不错,用户名称与序列号之间的关系不再那么清晰了,但同时也失去了用户名于序列号的一一对应关系,软件开发者必须自己维护用户名称与序列号之间的唯一性,但这似乎不是难以办到的事,建个数据库就可以了。当然也可以把用户名称和序列号分为几个部分来构造多元的算法。

  特定值 = F(用户名1,用户名2,...序列号1,序列号2...)

  现有的序列号加密算法大多是软件开发者自行设计的,大部分相当简单。而且有些算法作者虽然下了很大的功夫,效果却往往得不到它所希望的结果。

  3.2   时间限制

  有些程序的试用版每次运行都有时间限制,例如运行10分钟或20分钟就停止工作,必须重新运行该程序才能正常工作。这些程序里面自然有个定时器来统计程序运行的时间。

  这种方法使用的较少。

  3.3   Key File 保护

  Key File(注册文件)是一种利用文件来注册软件的保护方式。Key File一般是一个小文件,可以是纯文本文件,也可以是包含不可显示字符的二进制文件,其内容是一些加密过或未加密的数据,其中可能有用户名、注册码等信息。文件格式则由软件作者自己定义。试用版软件没有注册文件,当用户向作者付费注册之后,会收到作者寄来的注册文件,其中可能包含用户的个人信息。用户只要将该文件放入指定的目录,就可以让软件成为正式版。该文件一般是放在软件的安装目录中或系统目录下。软件每次启动时,从该文件中读取数据,然后利用某种算法进行处理,根据处理的结果判断是否为正确的注册文件,如果正确则以注册版模式来运行。

  这种保护方法使用也不多。

  3.4   CD-check

  即光盘保护技术。程序在启动时判断光驱中的光盘上是否存在特定的文件,如果不存在则认为用户没有正版光盘,拒绝运行。在程序运行的过程当中一般不再检查光盘的存在与否。Windows下的具体实现一般是这样的:先用GetLogicalDriveStrings( )或GetLogicalDrives( )得到系统中安装的所有驱动器的列表,然后再用GetDriveType( )检查每一个驱动器,如果是光驱则用CreateFileA( )或FindFirstFileA( )等函数检查特定的文件存在与否,并可能进一步地检查文件的属性、大小、内容等。

  3.5   软件狗

  软件狗是一种智能型加密工具。它是一个安装在并口、串口等接口上的硬件电路,同时有一套使用于各种语言的接口软件和工具软件。当被狗保护的软件运行时,程序向插在计算机上的软件狗发出查询命令,软件狗迅速计算查询并给出响应,正确的响应保证软件继续运行。如果没有软件狗,程序将不能运行,复杂的软硬件技术结合在一起防止软件盗版。真正有商业价值得软件一般都用软件狗来保护。

  平时常见的狗主要有“洋狗”(国外狗)和“土狗”(国产狗)。这里“洋狗”主要指美国的彩虹和以色列的HASP,“土狗”主要有金天地(现在与美国彩虹合资,叫“彩虹天地”)、深思、尖石。总的说来,“洋狗”在软件接口、加壳、反跟踪等“软”方面没有“土狗”好,但在硬件上破解难度非常大;而“土狗”在软的方面做的很好,但在硬件上不如“洋狗”,稍有单片机功力的人,都可以复制。

  3.6   软盘加密

  通过在软盘上格式化一些非标准磁道,在这些磁道上写入一些数据,如软件的解密密钥等等。这种软盘成为“钥匙盘”。软件运行时用户将软盘插入,软件读取这些磁道中的数据,判断是否合法的“钥匙盘”。

  软盘加密还有其它一些技术,如弱位加密等等。

  随着近年来软盘的没落,这种方法基本上退出了历史舞台。

  3.7   将软件与机器硬件信息结合

  用户得到(买到或从网上下载)软件后,安装时软件从用户的机器上取得该机器的一些硬件信息(如硬盘序列号、BOIS序列号等等),然后把这些信息和用户的序列号、用户名等进行计算,从而在一定程度上将软件和硬件部分绑定。用户需要把这一序列号用Email、电话或邮寄等方法寄给软件提供商或开发商,软件开发商利用注册机(软件)产生该软件的注册号寄给用户即可。软件加密虽然加密强度比硬件方法较弱,但它具有非常廉价的成本、方便的使用方法等优点。非常适合做为采用光盘(CDROM)等方式发授软件的加密方案。

  此种加密算法的优点

  ·    不同机器注册码不同。用户获得一个密码只能在一台机器上注册使用软件。不同于目前大多软件采用的注册方法,即只要知道注册码,可在任何机器上安装注册。

  ·    不需要任何硬件或软盘

  ·    可以选择控制软件运行在什么机器、运行多长时间或次数等

  ·    可让软件在不注册前的功能为演示软件,只能运行一段时间或部分功能。注册后就立即变为正式软件

  ·    采用特别技术,解密者很难找到产生注册号码的规律

  ·    在使用注册号产生软件(注册机)时可采用使用密码、密钥盘、总次数限制等方法

  ·    方便易用,价格低廉。

  这种加密还有以下特点

  1、 注册加密的软件,只能在一台机器上安装使用。把软件拷贝到其它机器上不能运行。

  2、 若用户想在另一机器上安装运行,必须把软件在这一机器上运行时的序列号,寄给软件出版商换取注册密码。当然应再交一份软件费用。

  3、 此加密方法特别适应在因特网上发布的软件及用光盘发布的软件。

  注释:

  1、“加密技术概述”部分内容参考了大学教材“密码学基础”。

  2、“当前流行的一些软件保护技术”部分内容参考了“加密与解密--软件保护技术及完全解决方案”一文。

2006年11月26日星期日

真三国无双系列游戏片头

  真三国无双系列是PS2上很少见的3D动作游戏,日本的光荣(KOEI)在2002年发布,其二代、三代、四代的销量均突破了百万套。可以说,真三国无双系列游戏是PS2游戏机上必玩的ACT经典大作。

  我对于真三国无双二代、三代、四代全部都玩通关过,因为想要收集全集,最近还买到了一代来体验一下,不过玩后的感觉是,一代和二代的差距还是非常大的。

真三国无双

  从真三国无双三代开始,我发现这个游戏的片头动画变得很精彩,非常值得品味,相信美工在上面花了不少的精力,几乎每一代的片头都给玩家一些惊喜,令整个游戏生色不少。

  三代的片头描述的是著名的赤壁大战,不到一分钟的片头足以让玩家全然融入赤壁大战那硝烟滚滚、杀声震天、刀光剑影、鼓角嘹亮的历史画卷,那磅礴的气势可谓经典。

  四代的片头算的上是历代无双系列作品中片头动画中最令人热血沸腾的一部,场景大概是著名的长板坡,赵云被刻画成一个骁勇善战和独闯曹营的虎胆英雄,面对曹操的百万雄兵,毫无惧色,以一当千,豪情万丈地杀入千军万马之间,这是何等的气魄啊。相信每个看完这个片头的玩家,玩游戏选人物时都会第一个选赵云。

  真三国无双BB是一个基于PC的网络游戏,在这个游戏中,玩家将不再扮演真实的武将,而是扮演武将的部下而参与战斗,从一个不知名的角色慢慢成长,在三国的历史长河中纵横,角色的命运由玩家自己作主。这种模式和真三国无双4猛将传的“立志模式”有点类似,玩起来也别有一番味道。

  真三国无双BB的片头也是这样的情节,描写了三个家破人亡而参军的青年,加入了著名的虎牢关的战役,并与“天下无敌”的英雄吕布一比高低,充满了个人色彩,让人感觉这是一个描写人而不是描写神的游戏,颇让人感慨万千。值得一提的是,这个片头第一次使用了中文配音,可以看得出日本光荣公司对于中国用户的关注和期望。

真三国无双

2006年11月25日星期六

提高浏览体验的五十个最佳FireFox扩展插件

  FireFox的扩展插件有成百上千,你要用哪个呢?这里收集了50个流行的扩展插件,下载后安装,会让你的FireFox浏览更轻松。请注意,大多数扩展插件可以在FireFox2.0上使用,如果无法使用,那么使用Nightly Tester Tools扩展来让他们工作。当一个新的FireFox版本发布后,这个扩展插件可以允许你轻松更新这些已经存在的扩展。

  标签页管理

  All-in-One Gestures - 多合一鼠标手势,集合了流行的滚动、导航等方位插件的鼠标手势。

  Tabbrowser Preferences - 增强式标签页浏览扩展,提供一个很全面的图形界面,以便让用户能够轻松更改Firefox中的隐藏设置,让Firefox的标签页浏览功能更加强大和完善,并提供关于链接打开方式的详细设置。

  Tab Mix Plus - 在页签上增加了更多的功能,允许你在一个页签上打开多个链接,或者在多个页签打开同一个链接,合并或者关闭同一个域名的链接等。

  Restart Firefox - 在文件菜单中加了一项“重启firefox”,在安装扩展或插件后,使用这个插件可以很方便,不用关闭FireFox。

  Sessionsaver - 恢复上一次打开的页面,如果你上次用过FireFox的话,这对于崩溃的FireFox同样有效。
 

   Duplicate Tab - 允许你在新窗口或当前窗口复制相同的页签(包括浏览历史等)。

  Colorful Tabs - 可以让打开的标签变成彩色的,使得界面美化。

  Viamatic foXpose - 在状态栏上增加一个图标,点一下就可以打开所有的页签。

  Firefox Showcase - 简化定位和选择当前窗口的操作。

  Separe - 帮助整理当前页签。

  Permatabs - 使得一个被选定的页签不能被关闭,并且永远驻留在内存。

  FaviconizeTab - 调整页签的宽度,并且只显示图标。

  网页链接管理

  Linky - 下载选中内容中的所有的网页、图像、文件链接等等。

  WebMailCompose - 让网页上的发邮件链接自动转移到web邮件的发送邮件地址。

  Linkification - 使得FireFox可以在查看纯文本的时候识别链接地址并打开链接。

  IE Tab - 使用IE内核访问网页。对于只支持IE的页面特别有用。

  FirefoxView - 在IE中使用FireFox打开当前的页面。

  Paste and Go - 让你粘贴URL到地址栏后自动打开页面,或者使用快捷键Ctrl-Shift-V。

  ErrorZilla - 修改默认的404错误页面为一个Google的缓存页面。

  文件下载管理

  FlashGot - 多线程下载工具。

  PDF Download - 提供浏览者对PDF更多的操控方式,当你点击一个PDF链接时Firefox会弹出一个对话框供你进行选择性操作:下载、在标签页打开、在新标签页中以HTML方式查看、取消。

  ScrapBook - 方便的保存与管理网页。

  DownThemAll - 只需一点即可下载网页中的所有连接。

  TargetAlert TargetAlert - 可以帮你扫描网页中的所有超链接,在符合特定文件类型的超链接后面,加上一个特定的图标,让你可以不用去看网址就可以知道这是什么类型的文件。

  Download Manager Tweak - 修改FireFox默认的下载管理器,使其可以在书签列(侧边列)或标签页中开启下载管理窗口。

  Download Statusbar - 让你可以从状态列看出目前下载文件的进度。

  Disable Targets For Downloads - 在点击链接下载文件时,防止打开新窗口。

  FireFTP - 在FireFox中实现的一个完全免费的、安全的、跨平台的FTP客户端功能。

  浏览网页管理

  GreaseMonkey - 可以安装用户自己编写的脚本,实现自定义的功能,功能强大。

  Image Zoom - 通过右键与滚轮配合使用,放大缩小图片。

  Fasterfox - 加速FireFox的启动和运行,网络性能调节与优化。

  SpellBound - 对于当前的填写的表单进行英文拼写检查。

  BugMeNot - 绕过网站设置的登录限制,直接进入浏览网页,可以免去烦琐的注册网站的过程。

  AutoCopy - 在页面上选择任何内容都会自动将其复制到剪贴板中,按中间的鼠标粘贴。

  Copy Plain Text - 无格式复制当前文本内容,将当前页面的所有字体等格式删除后复制。

  Google Images Re-Linker - 绕过Google图片搜索的框架预览页面,直接浏览里面的略缩图的大图。

  Stop-or-Reload Button - 将刷新和停止整合为一个按钮。

  Extended Statusbar - 像Opera的状态栏那样的东西,一个显示速度、进度百分比、时间和载入字节数的状态条。

  Resizeable Textarea - 可以让你调节表单文字录入框的大小,不用再不停的拖滚动条了。

  Adblock Plus - Adblock plus是Adblock的加强版。可以阻挡特定网址及网页上的广告对象(例如图片、Flash)。

  Flashblock - 阻挡所有Flash。

  Sage - 一个轻量级的RSS阅读器,在侧边栏提供一个窗口阅读RSS。

  Cacheout - 让你通过Google的缓存或者代理来访问某个页面。

  Pearl Crescent Page Saver - 截屏程序,可以将整个页面保存为一个图片。

  Reload Every - 自动去刷新某个页面。

  Copy URL+  - 能让使用者在复制网页上面选取的文字时,也同时复制网页的网址与标题。

  InFormEnter - 以半自动模式填写表单的助手。这个扩展在一个网页表单的每个输入栏加入一个能够点击的小图标,你能从这里选择条目插入——不需要键入。你能通过菜单设定,使它显示你经常用到的信息,例如名字、email、地址等等。

  All-in-One Sidebar - 在侧边栏中就可以快速切换书签、下载项和扩展等面板,或者在侧边栏登陆网站、查看源代码;另外,还有侧栏切换柄和工具栏,单击浏览器一侧的突起边缘,即可打开/关闭扩展,所有这些都允许用户自由定制

  Text size toolbar - 添加一个按钮,可以增加或者减小字体,也可以回复到默认字体。

  Reveal - 让你可以在历史记录里看到页面的缩略图,以便快速找到你需要的网页。

  Mystickies - 让你可以在Web上放一个便条纸,并使用Tag标记。

  Clear Cache Button - 在工具栏中添加一个清除缓存的按钮,单击一次即可清除历史记录。

  gTranslate - 在页面上右击即可使用Google来翻译当前网页的内容。

  Xinha Here! - 一个所见即所得的文本编辑器。

  Yoono - 即时显示建议的网址,并分享大家共同感兴趣的网址。

  BlueOrganizer - 帮你定制你的个性化信息,帮助你节省时间找到相关的信息。

  隐私与安全管理

  SwitchProxy - 让你在多个代理服务器上快速切换。

  NoScript - 只允许受信任的网站启用JavaScript、Java 或其他插件。白名单基于优先阻止机制,在不损失任何功能的情况下,阻止利用已知或未知安全漏洞的攻击。

  Always Remember Password - 让一些网站永远记住你的密码,不用再重新输入。用于对付一些总让你输密码的网站,如银行等。

  CookieCuller - 增强版本的Cookie管理器。

  Stealther - 使用浏览网页不留下任何痕迹。

  网页搜索管理

  Google Toolbar for Firefox - Google工具栏软件,可以实现多种实用的功能。

  CustomizeGoogle - 增强的Google搜索结果,添加很多附加信息,同时删除一些没用的信息(比如Google的广告等,个人觉得这样似乎不太好)。

  NextPlease - 为浏览器添加前进后退按钮,或者说是翻页按钮。

  BetterSearch - 增强Google, MSN Search, Yahoo Search, A9, Answers.com, AllTheWeb, Dogpile.com, del.icio.us and Simpy.com bookmarks等的搜索结果。

  Answers - 按住Alt键后点任何一个单词,可以得到一个快速的相关定义或者解释说明。

  音乐、视频管理

  FoxyTunes - 边上网边听歌。不用离开浏览器就可以控制你喜欢的媒体播放器。

  MediaPlayerConnectivity - 使您轻轻一按就可用外部媒体播放程序播放网页内嵌视频。

  电子邮件管理

  Gmail Manager - 用来同时管理多个GMail账号,即时显示各账号中的新邮件统计。

  Gmail Notifier - 自动检查GMail里的邮件。

  AJAX Yahoo Mail - 为Yahoo Mail加入Ajax功能,可以只用按一下,就查看邮件。

  书签管理

  Bookmark with Del.icio.us - 在FireFox中集成del.icio.us,轻松发布自己的书签而不用离开当前页面。

  Foxmarks Bookmark Synchronizer - 安装这个插件后,其会在后台自动同步当前的书签。

   StumbleUpon - 是一个让你更方便的浏览优秀网站的FireFox插件。

  Reliby - 提供一个刷新所有即时书签的功能。

  Clipmarks - 让你保存并分享页面内容而不用进入整个页面。

  其它流行服务管理

  Adsense Notifier - 在状态栏显示Adsense的收入。

  Forecastfox - 在状态栏显示天气预报。

  StockTicker - 显示你喜欢的股票状态。

  DictionarySearch - 在线词典查找单词。

  Web Developer - 网站开发者使用的工具,有很多优秀的功能。

  Performancing for Firefox - 一个Blog编辑器,让你可以轻松的在Wordpress、MovableType或者Blogger中发布文章。

  Map+ - 让你能快速查看地图中选择的地址而不用改变窗口。

  ChatZilla - 一个干净易用的IRC聊天客户端软件。

Firefox

  以上就是我所推荐的五十个优秀的FireFox扩展插件,并不是说你需要完全赞同我选择的这些扩展插件,这只是一个发现最优秀FireFox扩展插件的一个尝试,这篇文章会不断更新,如果你发现了什么更好的FireFox扩展插件,请留言告诉我。

  英文原文地址:50 Best Firefox Extensions for Power Surfing  

  中文翻译:William Long

2006年11月24日星期五

使用Axis开发Web Service程序

  今天是感恩节,差点又要在公司加班了。好在Web Service程序并不是特别难搞,下午终于在eclipse下调通过了,正确产生了服务器端和客户端的Java代码,apache的东西的确很不错。

  说道Web Service的程序开发,八个月前我加班调试公司和中国电信的商务领航系统的接口的时候,用的就是Web Service,Web Service有很多优点,使用Web Service可以在不同编程语言间实现数据交换,而我那时对Web Service也不熟,就由同事帮我生成了一大堆Web Service的框架代码,我则只单独开发业务代码。

  这次的另外一个项目也要用Web Service了,不过人手也少了,没有人帮做Web Service了,只好自己动手。

  好在开发前,有个同事先给我们不熟悉Web Service的程序员进行了一些培训,我才知道原来以前的Web Service都是可以自动生成代码的,而且也不难,试了一个下午客户端和服务器端的Web Service代码就都调试通过了,真不错。

  为了更多喜爱开发的程序员也能迅速了解Web Service的开发,我这里整理了一些通过Axis开发Web Service的一些要点,希望能让不熟悉Web Service的开发人员能够迅速掌握Web Service。

  一、Axis环境的安装

  1、安装环境 J2SE SDK 1.4,Tomcat 5.0,eclipse 3.2。

  2、到 http://xml.apache.org 网站下载Axis安装包。

  3、将Axis相关包文件放在WEB-INFlib目录下。

  4、Axis可选的包:activation.jar; mail.jar; xmlsec-1.4.Beta1.jar拷贝到WEB-INF目录下,生成客户端时候需要使用。

  Axis支持三种web service的部署和开发,分别为:

  1、Dynamic Invocation Interface (DII)

  2、Dynamic Proxy方式

  3、Stubs方式

  前两种方式我就不介绍了,同事告诉我他们自己都不使用前两种方式,他们建议我们使用Stubs方式,因此我就主要就介绍一下第三种方式。注意,我自己的Java源代码是放在D:workspace est目录下,Axis相关包文件放在D:workspace estWEB-INF目录下。

  二、编写wsdd发布web服务,编写stub client访问web服务

  1、编写服务端程序server,SayHello.java,编译server.SayHello.java

package server;
public class SayHello
{
    public String getName(String name)
    {
        return "hello "+name;
    }
}

  2、编写wsdd文件

  deploy.wsdd文件内容如下:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <service name="SayHello" provider="java:RPC">
  <parameter name="className" value="server.SayHello.getName"/>
  <parameter name="allowedMethods" value="*"/>
 </service>
</deployment>

  3、发布服务:

  编辑一个deploy.bat,Axis_Lib为axis.jar路径。内容如下:

set Axis_Lib=D:workspace estWEB-INFlib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/test/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

  执行这个批处理文件,这时候,如果提示成功的话,访问http://localhost:8080/test/services 就会显示服务列表。

  4、生成客户端client stub文件

  在浏览器上访问服务器端的服务,可以下载到WSDL文件,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。

  编写一个WSDL2Java.bat文件,其内容如下:

set Axis_Lib=D:workspace estWEB-INFlib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:workspace estsrc
set Package=server.SayHello
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl

  执行这个批处理文件就可以生成client stub.

  生成的stub client文件列表为:SayHello.java,SayHelloService.java,SayHelloServiceLocator.java,SayHelloSoapBindingStub.java .

  5、编写客户端程序,编译并执行

  下面是一段junit测试客户端代码。

import java.net.URL;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestWSClient extends TestCase {

    public TestWSClient(String string) {
        super(string);
    }

    public void SayHelloClient() throws Exception {

        SayHelloService service = new SayHelloServiceLocator();
        SayHello_PortType client = service.getSayHello() ;
        String retValue = client.getName("clientname");
        System.out.println(retValue);

    }

    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(new TestWSClient("SayHelloClient"));
        return suite;
    }
}

  至此,整个服务器端和客户端的Web Service框架代码就完成了,剩下的就是在里面加入你的业务代码了,怎么样,Web Service并不难开发吧。

2006年11月23日星期四

百度搜藏即将发布

  百度即将发布一个全新的中文网摘服务:百度搜藏,名字感觉比较怪。现在百度搜藏的主页已经能访问,上面写的是“即将发布,敬请关注”,据说这个服务将在本月底之前开发完成并上线。

  百度在百度搜藏主页上介绍了这个产品的一些特点,比如:

  全文收藏:不仅能收藏网址,更能自动收藏全文

  快速查找:在您收藏的海量信息中,快速、准确地找到所需资料

  网页快照:不必担心网页链接失效,您可以通过“快照”快速浏览页面内容

  轻松便捷:只需连接互联网,就能随时随地收藏和使用

  分享资源:和朋友分享自己喜欢的网址,或享用他人的收藏

  这些功能看起来没有什么特色,大部分中文的网摘系统都有类似的功能,而且我觉得其网页快照功能可能会产生版权上的纠纷,搞不好会给目标网站带来不良的影响。

  对于网摘服务,我也用了很多,感觉用的最顺手的就是del.icio.us的服务,网摘需要有的功能其全都有,也没有广告,虽然在使用的过程中,我发现del.icio.us的用户显示页面对中文用户不是特别友好,交互性也不强,最主要的是没有中文界面和域名难记,这些问题会影响其中文用户的普及。

  del.icio.us的这些缺点也是可以解决的,比如我通过程序在del.icio.us的基础上增加了一个WordPress的新界面的blog,这个新界面对用户访问是非常友好的,新地址和原有的del.icio.us内容还会实时同步更新,这都多亏了del.icio.us强大的API支持。

  del.icio.us最大的优点也正在这里,她给用户创造了价值,用户反过来又会给del.icio.us带来价值,大家各取所需,一个品牌价值自然也就起来了。

  百度搜藏地址:http://cang.baidu.com/

2006年11月22日星期三

BlogSpot模版资源列表

  首先是关于Google Blogger的一则快讯,我站一位杨读者首先发现,今天下午17点的时候,BlogSpot又可以正常访问了,我于是立刻尝试了一下,证实深圳电信和上海电信都可以正常访问BlogSpot,这对于大多数人来说都是一个好消息。

  Google Blogger在中国可谓多灾多难,今天八月份解封后在国内引起很大反响,BlogSpot的中文用户数猛增,对于这样一个功能强大而且速度飞快的免费Blog空间,获得中国用户的青睐也是理所当然的。然而可惜的是,今年十月份BlogSpot再次无法访问,不过今天BlogSpot忽然又访问正常,不得不令人慨叹世事多变啊。

  既然BlogSpot已经可以访问了,我这里就收集一些BlogSpot的模版,来源于the ultimate blog template list,大家可以继续倒腾自己的BlogSpot了。

2006年11月21日星期二

FireFox导入导出Cookies和收藏夹的方法

  FireFox是一个常用的浏览器,扩展插件众多,和IE相比有很多优点,不过有些细小的地方似乎考虑的不太好,比如用户经常会碰到系统重新安装等问题,这就需要导入导出FireFox浏览器的Cookies和收藏夹,然而遗憾的是,FireFox默认只提供了导入IE的Cookies和收藏夹的功能,经过一些尝试,我这里找到一个手动导入导出FireFox的Cookies和收藏夹的方法。

  首先,打开“我的电脑”,点“工具”-“文件夹选项”-“查看”,选中“显示所有文件和文件夹”,然后打开文件夹C:Documents and Settings你的用户名Application DataMozillaFirefoxProfiles随机目录,注意最后一个文件夹是一个随机目录。进入这个目录后,找到cookies.txt和bookmarks.html两个文件,这两个文件就是Cookies和收藏夹文件,复制出这两个文件到另外一台机器上的类似目录下,覆盖同名文件,就完成了FireFox的Cookies和收藏夹的导出和导入。

  另外,FireFox的收藏夹(书签)也可以通过菜单选项直接导出,具体方法是:打开Firefox,点击“书签 -> 书签管理”启动书签管理器,点击“文件 -> 导出”来备份现有的书签。在另一台机器上,再用书签的“导入”功能把备份的书签导入到新的Firefox的配置中即可。

  最后一个方法是使用FireFox插件。如果你感觉自己信任Google的话,可以安装一下Google开发的Google Browser Sync(Google浏览器同步)插件,可以将你FireFox各种设置比如书签、历史记录、保存的密码及cookies保存进你自己的Google帐号里,在另外一台机器上可以使用Google帐号登录同步浏览器的内容。当然,请不要在网吧等不安全的地方使用这个插件,否则会带来很大的安全问题。

  安装这个插件,请使用FireFox进入下面的链接后就可以开始安装:http://tools.google.com/firefox/browsersync/install.html