2006年10月11日

通过虚拟软驱使用Ghost


请按以下步骤操作:




  1. 在使用虚拟软驱之前,请先将我给你的文件 ghost.exe 拷贝到你的硬盘上,比如D:\下;



  2. 虚拟软驱的安装及使用:




    1. http://www.greendown.cn/soft/2590.html 可以下载到虚拟软驱的软件;



    2. 下载并解压缩后进入目录 双击执行vFloppy.exe(或者是vFloppy),会打开一个操作界面;



    3. 在 映像文件 输入栏 最右边的按钮,是选择一个启动用的映像文件(把鼠标移动到该按钮上时会有提示信息),单击该按钮,选择 BOOTDISK.img 文件,然后点击 应用;



    4. 系统会提示是否查看操作日志,选择 否,接着系统还会提示是否要重新启动?选择是;




  3. 系统重新启动,你会发现多了一个选择菜单——“由虚拟启动软盘启动”,选择该项就进入DOS状态了;


  4. 进入DOS状态后,找到(你刚才在步骤1中拷贝的)ghost.exe文件,并执行,后面的操作步骤请参考我给你写的另外一片指南。

2006年09月28日

在Ant中开始JUnit4

JUnit4目前的最新版本应该是4.1了,然而Ant的最新正式发布版还是1年前多的,自然对JUnit的支持还停留在3.8.x上。不过还好Ant1.7.0目前已是Beta2了,想来离正式版已经不远了。

下载Ant1.7.0bata,编写build.xml文件,OK,直接支持JUnit4,不用Junit4TestAdapter适配器。

但问题eclipse3.2中的Ant依然是1.6.5,看来我们要手动的去升级Eclipse的Ant插件了。升级过程很简单,找到插件目录:%eclipse%/plugins\org.apache.ant_1.6.5 目录,把其中的内容用最新版1.7.0的去替换,很重要的是1、保留META-INF文件夹;2、保留plugin.properties文件。

2006年07月09日

Java I/O概略

  I/O(输入/输出)处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写入数据等等。Java把这些不同类型的输入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。JDK 提供了java.io包,其中包括一系列的类来实现输入/输出处理。
  Java的I/O系统大致可以分为:字节流字符流对象流其它工具类

  1. 字节流:从InputStream和OutputStream派生出来的一系列类,这类流以字节(byte)为基本处理单位。InputStream常用的方法有read()、available()、skip()、close()、mark()、reset()、markSupported()等等。OutputStream常用的方法有write()、flush()、close()等等。
  2. 字符流:从Reader和Writer为基类派生出的一系列类,这类流提供了处理Unicode字符的功能方法。字符读取类——Reader提供了read()、markSupported()、mark()、reset()、close()等方法;字符写入类——Writer提供了write()、flush()、close()等方法。
    当然字节流和字符留之间并不是完全不可逾越,其实InputStreamReader和OutputStreamWriter就是用来在字节流和字符流之间作为中介使用的。
  3. 对象流:ObjectInputStream和ObjectOutputStream分别是对象输入流和对象输出了,他们提供了序列化Java对象的通用功能。
  4. 其它工具类:包括对文件信息的封装类——File等等。
2006年07月07日

Ajax学习笔记——寻找时间之门

  Ajax的概念已经热到超过了南京的夏天,仅仅从技术层面的定义“异步JavaScript+XML” 来看,它依然是那样的模糊与不确定,就如同Web2.0的模糊。但不管怎么说,至少我们明白了,明白了一个模糊的定义,于是就让我们开始动手吧。先了解了解实际开发的细节。

 

2006年05月22日

C++学习笔记

C++与C
C++融合了3种独立的变成方式——1.C语言代表的面向过程编程的方式;2.C++引入类、对象概念后面向对象编程方式;3.C++模版支持的(泛型)通用编程方式;从这里可以看出C是C++的一部分——用来提供操作符、基本类型、控制结构、句法规则的基础部分。
数据与算法
程序=数据+算法,数据组成了程序使用和处理的信息,而算法是程序使用的方法。在面向过程变成方式中强调的是程序的算法,且多使用结构化编程来体现更好的面向过程思想。

2006年05月04日

Java与安全—基础概念

一、保证消息完整性:
  在java中,为保证消息 “未改变过”、“完整”等特性,通常使用生成消息摘要的方式来达成,JDK支持使用以下算法生成摘要:

  • MD2MD5:它们都是 128 位算法。
  • SHA-1:是160 位算法。
  • SHA-256SHA-383SHA-512: 它们提供更长的摘要,长度分别是256 位、383 位和512 位。 MD5和SHA-1是最常用的算法。

  在生成消息摘要的时候,有两种形式,1.直接用某种(如MD5)算法生成摘要;2.生成密钥,使密钥参与到生成摘要的运算中,这种方式也被称为“消息认证码”算法,JDK支持HMAC/SHA-1和HMAC/MD5 两种消息认证码算法。

二、保证消息机密性
  消息摘要可以确保消息的完整性,但不能用来确保消息的机密性。保证消息机密性通常有两方式:
    
  1、私钥加密法:指采用通讯双方持有的私有密钥进行加密运算的一种加密方法。
  私钥加密法的安全性,取决于算法和密钥的长度。如果算法比较好,那么攻击它的唯一方法就是尝试每种可能的密钥,进行暴力破解,它平均要尝试(1/2)*2*n次,其中n是密钥的位数。
  应用场景是,小王和和小张各有一个只有他们两人知道的共享密钥(因为只有他们两个人知道所以称为私钥),并且约定使用某种公用算法,也就是说,他们保持密钥的私有性。当 小王想给小张发送消息时,她加密原始消息(称为明文)以创建密文,然后将密文发送给小张,小张 接收了来自小王的密文,然后用自己的私钥(采用某种算法)对密文进行解密,以得到原始明文。如果窃听者小李侦听到该通信,她仅得到密文,因此消息的机密性得以保持。
  加密时可以采用两种类型的加密形式:
  按位进行加密:在硬件实现中比较常见,单一位的密码被称为序列密码。
  按数据块进行加密:数据块通常是64 位大小,采用这种类型的加密时,会涉及到短块填充,常用的填充方式有:
    1、无填充;
    2、PKCS5;
    3、OAEP;
    4、SSL3。
  另外,在加密中也需要选择用何种方式进行加密,可用的加密方式有:
    1、ECB电子密码本 Electronic Code Book;
    2、CBC密码块链接 Cipher Block Chaining;
    3、CFB密码反馈方式 Cipher Feedback Mode;
    4、OFB输出反馈方式Output Feedback Mode;
    5、PCBC填充密码块链接Propagating Cipher Block Chaining
  在JDK1.4(及以上)中支持以下的私钥算法:
    1、DES:DES(数据加密标准 Data Encryption Standard)是由IBM于上世纪70 年代发明的,美国政府将其采纳为标准。它是一种 56 位分组密码。
    2、TripleDES:该算法被用来解决使用 DES 技术的 56 位时密钥日益减弱的强度,其方法是:使用两个密钥对明文运行 DES 算法三次,从而得到 112 位有效密钥强度。TripleDES 有时称为 DESede(表示加密、解密和加密这三个阶段)。
    3、AES:AES(高级加密标准)取代DES 成为美国标准。它是由Joan Daemen 和 Vincent Rijmen 发明的,也被称为Rinjdael 算法。它是128 位分组密码,密钥长度为128 位、192 位或256 位。
    4、RC2、RC4、和 RC5:这些算法来自技术领先的加密安全性公司 RSA Security。
    5、Blowfish:这种算法是由Bruce Schneier 开发的,它是一种具有从32 位到448 位(都是8 的整数倍)可变密钥长度的分组密码,被设计用于在软件中有效实现微处理器。
    6、PBE:PBE(基于密码的加密)可以与多种消息摘要和私钥算法结合使用。

  2.公钥加密法:该方法用于解决在事先没有约定密钥的通信双方之间加密消息。
  私钥加密法受到一个主要缺点的困扰:最初开始时怎样将私钥交给小王和小张呢?如果小王生成了私钥,则必须将它发送给小张,但私钥是敏感信息,应该如何来加密?
  公钥加密法在上世纪70年代为此应运而生,小王和小张不仅有不同的密钥,而且每人有两个密钥。一个是私有的不与任何人共享(称为私钥)。另一个是公共的可以与任何人共享(称为公钥)。在具体加密时使用公钥加密,使用私钥解密。具体场景如:当小王想给小张发送安全消息时,她用小张的公钥加密消息,并将结果发送给小张。小张使用他的私钥解密消息。当小郑想给小王发送安全消息时,他用小王的公钥加密消息并将结果发送给小王。小王使用她的私钥解密消息。小李可以窃听公钥和已加密的消息,但她不能解密消息,因为她没有私钥。
  公钥和私钥是成对生成的,并且密钥的长度比同等强度的私钥加密法中的密钥更长。
  公钥加密比较慢(比私钥加密慢100到1,000倍),因此实际应用中使用混合技术。公钥加密法 被用来加密最初向对方分发的(私钥加密法中的)私钥(也被称为会话密钥),然后再使用该私钥,用私钥加密法对相对较大的消息体进行加密。
  有两种算法用于公钥加密法:
    1、RSA:这个算法是最流行的公钥密码算法,但JDK1.4中不支持,必须使用类似于BouncyCastle的第三方库来获得这种支持。
    2、Diffie-Hellman:技术上将这种算法称为密钥协定算法。它不能用于加密,但可以用来允许双方通过在公用通道上共享信息来派生出秘钥,作为私钥加密法中的密钥。

三、保证通讯对方身份有效性
  1、数字签名:

  您是否注意到公钥加密法中的缺陷呢?小张怎么能够证实某个消息确实是来自于小王呢?小李可以用她的公钥替代小王的公钥,然后小张就会与小李交换消息,并以为她是小王,这种情况被称为中间人(Man-in-the-Middle)攻击。数字签名就是用来避免这样的问题的,它用于确定通讯双方的有效身份。
  数字签名的使用场景描述:小王想发送一条签名的消息给小张,她就生成该消息的消息摘要,然后用私钥对摘要签名(或者说加密)。然后小王将签名(或者说加密)的消息摘要和消息正文(以明文形式)发送给小张。小张用小王的公钥解密签名(或者说加密)的消息摘要,然后计算明文消息的摘要,并检查两个摘要是否匹配。如果匹配,则小张可以确认消息来自于小王。请注意,在这个过程中消息是以明文的形式发送的。
  如果还需要消息的机密性,则必须将加密技术与签名技术结合使用。您可以将RSA算法用于数字签名和加密。名为DSA(数字签名算法 Digital Signature Algorithm)的美国标准可以用于数字签名,但不可以用于消息加密。
  在java中支持以下几种数字签名算法:
     1、MD2/RSA
     2、MD5/RSA
     3、SHA1/DSA
     4、SHA1/RSA
  2、数字证书:
数字锁定发送地方

2006年04月30日

Subversion安装笔记

一、下载安装文件

        Subversion的官方网站上提示,原则上Subversion没有提供正式的,针对具体平台的二进制发行包,但有一些“自愿者”制作了不同平台上的安装包,请翻至页面底部,可以找到Windows平台上的 安装文件下载连接,或者点击这里 直接打开。最终会下载得到:svn-x.x.x-setup.exe,我现在的版本是:svn-1.3.1-setup.exe

二、执行安装

        运行svn-1.3.1-setup.exe开始安装,在安装的最后,提示了如果在win9x系统下,需要添加环镜变量的设置到autoexec.bat文件中,当然还提示要重新启动计算机,但其实不用重新启动也可以正常使用。

三、基本配置

  • 源码库配置:使用svnadmin create path 命令,会在指定的path上创建源代码仓库,生成了若干个目录,具体内容请参看相关文档。
  • 用户认证配置:服务运行前,我们需要先对可以登录的用户进行配置,请在仓库的conf目录下,分别打开svnserve.conf、passwd两个文件。在svnserve.conf中,找到:
         # [general]
         # password-db = passwd

   把这两行内容的注释取消掉,其中 password-db = passwd定义了用于用户存储的文件名称,即passwd文件,然后在passwd中加入用户定义,定义用户时,是一行一个,存储格式为“用户名 = 密码”,例如:插入一行 cnetwei = 123456,即为系统添加一个用户名为cnetwei,密码为123456的用户。

四、启动SVN服务:

  以上配置完毕后,启动服务使用命令:svnserve -d -r repository_path,请注意把 repository_path替换成你自己的仓库路径。
        没有报告错误的话,表示启动成功。OK,让我们导入一个项目先。

五、导入项目:
        通过命令行也可以导入项目,但是我建议,还是装一个客户端来的简单,我安装的是svn for eclipse的插件——Subclipse ,在http://subclipse.tigris.org/ 可以下载到,使用非常简单,推荐大家使用。
  客户端的连接URL状如:svn://host-name[:port]/module-name,svn默认是运行在3690端口的,如果不是以默认端口运行,需要在URL中明确指定。

六、如何安装svn到windows 服务:
  需要借助SVNService.exe文件的帮助,可以从 http://dark.clansoft.dk/~mbn/svnservice/ 下载到。具体安装事宜,请参考相关文档。

2006年04月11日

读书笔记之Windows高级编程指南 01


大概从去年的时候开始初步接触Linux,但很多时候还是工作在Windows上,今天偶得本书,打算浏览一遍,以弥补自己欠缺的知识.


 


1、什么是内核对象? 


  进行Win32程序开发时,我们时常会创建、打开和操纵内核对象,内核对象有多种不同的类型,如:事件对象、文件对象、进程对象、线程对象……,不同类型的内核对象通过调用不同的Win32函数来创建,创建(内核对象)的本质是,OS内核分配一段内存空间给某一个特定的结构体,其实我们无法对该结构体进行Accese,我们只能通过内核对象的“引用”——句柄和特定的Win32函数来达到对内核对象进行操纵的目的。


  在每一个内核对象的结构体中,都包含有使用计数、安全描述等通用成员。


  内核对象是属于(OS)内核的,而不属于某一个进程,但内核的引用句柄,是进程相关的,所以不能直接在进程间共享内核对象,而需要特别方法和机制


  和内核对象相对的是用户或GDI对象,例如菜单、窗口、光标等。


2、(进程间)共享内核对象的3种机制?


  A.对象句柄继承:指从父进程中通过继承把内核对象的句柄传递给子进程。在构造内核对象时可以通过安全描述中的“是否继承”来决定子进程是否可以(与父进程)共享它。


  

本篇文章使用aigaogao Blog软件发布, “我的Blog要备份”

2006年04月10日

 /**
  * 工具类,取得文件列表..
  */
 class GetFileList {
  /**
   * 根据指定条件取得 文件列表..
   *
   * @param homedir
   * @param includes
   * @param excludes
   * @return List java.util.List<File>
   */
  public List getFileList(String homedir, String includes, String excludes) {
   MyTempClass mtc = new MyTempClass(new File(homedir), includes,
     excludes);
   mtc.execute();
   return files;
  }

  /**
   * 文件列表..
   */
  private List files = null;

  /**
   * 取得文件列表的实作类..
   */
  private class MyTempClass extends MatchingTask {
   /**
    * 默认构造器
    */
   private MyTempClass() {
   }

   /**
    * 构造器
    *
    * @param homedir,文件操作的起始目录..
    * @param includes,取得文件的匹配模式
    * @param excludes,排除文件的匹配模式..
    */
   public MyTempClass(File homedir, String includes, String excludes) {
    super();
    this.homedir = homedir;

    includes = (includes == null) ? "*.*" : includes;
    this.setIncludes(includes);

    if (excludes != null) {
     this.setExcludes(excludes);
    }

    setCaseSensitive(false);// 设置大小写不敏感..
   }

   /*
    * 开始执行..
    */
   public void execute() throws BuildException {
    super.execute();
    if (homedir == null) {
     throw new BuildException("没有指定home.dir属性");
    }
    System.out.println(homedir.getAbsolutePath());
    setProject(new Project());
    DirectoryScanner ds = getDirectoryScanner(homedir);
    String[] filelist = ds.getIncludedFiles();
    files = Arrays.asList(filelist);

    homedir = null;
   }

   /**
    * 相关操作的起始目录..
    */
   private File homedir = null;

   public File getHomedir() {
    return homedir;
   }

   public void setHomedir(File homedir) {
    this.homedir = homedir;
   }
  }
 }

2006年02月17日

CSS学习概要

  1. css嵌入html页面的3种方式:
  • 直接在head标记中定义:

              <head>
                     <style type="text/css" media="screen">
                            <!– CSS定义放到这 –>
                      </style>
               </head>

  • 在外部文件中定义,通过<link>标记导入:

             <link rel="stylesheet" type="text/css" href="path/to/styles.css" media="screen" />

  • 在外部文件定义,通过css的指令 import导入:

               <style type="text/css" media="screen">
                    @import url(path/to/styles.css); 
               </style>