﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-A Cooly Weblog</title><link>http://www.blogjava.net/zpuser/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 13 May 2026 01:25:12 GMT</lastBuildDate><pubDate>Wed, 13 May 2026 01:25:12 GMT</pubDate><ttl>60</ttl><item><title>Web Service理论－SOAP</title><link>http://www.blogjava.net/zpuser/archive/2008/07/04/212593.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Fri, 04 Jul 2008 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2008/07/04/212593.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/212593.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2008/07/04/212593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/212593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/212593.html</trackback:ping><description><![CDATA[
		<br />
		<b>什么是WebServcie</b>
		<br />
		<br />    网上有很多解释版本。我是技术研发，所以个人理解从技术角度说：Web Service是一种轻量级别的基于XML的跨平台远程服务通讯框架技术，可以很好解决各平台和语言间的数据通讯。<br /><ul><li>语意协议：使用基于XML的SOAP协议，定义业务数据格式。</li><li>传输协议：使用HTTP,TPC/IP,FTP,SMTP和JMS等，一般采用和支持较多的是HTTP。</li><li>接口描述语言：使用基于XML的WDSL作为统一服务描述。</li></ul>简单的说，WEBSERVICE就是规定一系列的规范和框架，提供一个基于SOA（面向服务的架构）概念的使用WSDL来描述服务接口定义的方案，可以使用传统的传输协议（一般使用HTTP）传输基于XML的SOAP格式报文数据来实现跨平台间系统的通讯。下面分别介绍WEBSERVICE中必须了解的几个部分：SOAP,WSDL和传输协议<br /><b><br />SOAP</b><br /><br />简单对象访问协议（SOAP：Simple Object Access Protocol）是一种轻量的、简单的、基于 XML 的协议，它被设计成在 WEB 上交换结构化的和固化的信息。主要负责在WEBSERVICE服务中通讯报文数据格式的定义。 SOAP
可以和现存的许多因特网协议和格式结合使用，包括超文本传输协议（
HTTP），简单邮件传输协议（SMTP），多用途网际邮件扩充协议（MIME），传统SOCKET通讯(TCP/IP),JAVA消息系统(JMS)等传输协议。它还支持从消息系统到远程过程调用（RPC）等大量的应用程序。<br /><br />　SOAP 包括三个部分： 
            <ul><li>SOAP 封装：它定义了一个框架，该框架描述了消息中的内容是什么，谁应当处理它以及它是可选的还是必须的。 </li><li>SOAP 编码规则：它定义了一种序列化的机制，用于交换应用程序所定义的数据类型的实例。 </li><li>SOAP RPC 表示：它定义了用于表示远程过程调用和应答的协定。</li></ul><p>　
　SOAP 消息基本上是从发送端到接收端的单向传输，但它们常常结合起来执行类似于请求 / 应答的模式。所有的 SOAP 消息都使用 XML
编码。一条 SOAP 消息就是一个包含有一个必需的 SOAP 的封装包，一个可选的 SOAP 标头和一个必需的 SOAP 体块的 XML 文档。</p><p>　
　把 SOAP 绑定到 HTTP 提供了同时利用 SOAP 的样式和分散的灵活性的特点以及 HTTP 的丰富的特征库的优点。在 HTTP
上传送 SOAP 并不是说 SOAP 会覆盖现有的 HTTP 语义，而是 HTTP 上的 SOAP 语义会自然的映射到 HTTP 语义。在使用
HTTP 作为协议绑定的场合中， RPC 请求映射到 HTTP 请求上，而 RPC 应答映射到 HTTP 应答。<b>简单的说就是，通过HTTP POST（当然也可以GET或其它，一般是POST）方式传输一个SOAP协议定义的报文数据体，用于双向通讯。</b>然而，在 RPC 上使用
SOAP 并不仅限于 HTTP 协议绑定，也可以和其他的现行传输协议绑定。</p><p><b>语法规则</b></p><ul><li>SOAP 消息必须用 XML 来编码 
</li><li>SOAP 消息必须使用 SOAP Envelope 命名空间 
</li><li>SOAP 消息必须使用 SOAP Encoding 命名空间 
</li><li>SOAP 消息不能包含 DTD 引用 
</li><li>SOAP 消息不能包含 XML 处理指令</li></ul><p><b>SOAP报文结构</b></p><p>一条 SOAP 消息就是一个普通的 XML 文档，包含下列元素：</p><ul><li><b>必需的 Envelope标签，文档的ROOT，可把此 XML 文档标识为一条 SOAP 消息 
<br /></b>必需的 SOAP 的 Envelope 元素是 SOAP 消息的根元素。它可把 XML 文档定义为 SOAP 消息<br /></li><li>可选的 Header标签，包含头部信息<br />可选的 SOAP Header 元素可包含有关 SOAP 消息的应用程序专用信息（比如认证、支付等）。如果 Header 元素被提供，则它必须是 
Envelope 元素的第一个子元素。<br /><br /></li><li><b>必需的 Body标签，包含所有的调用和响应信息 <br /></b><p>必需的 SOAP Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。</p><p>SOAP Body 元素的直接子元素可以是合格的命名空间。SOAP 
在默认的命名空间中("http://www.w3.org/2001/12/soap-envelope")定义了 Body 元素内部的一个元素。即 SOAP 的 
Fault 元素，用于指示错误消息。</p></li><li>可选的 Fault 元素，提供有关在处理此消息所发生错误的信息<br /><p>来自 SOAP 消息的错误消息被携带于 Fault 元素内部。</p><p>如果已提供了 Fault 元素，则它必须是 Body 元素的子元素。在一条 SOAP 消息中，Fault 元素只能出现一次。</p><p>SOAP 的 Fault 元素用于下列子元素：</p><table width="434" border="1" height="112"><tbody><tr><th>子元素</th><th>描述</th></tr><tr><td>&lt;faultcode&gt;</td><td>供识别故障的代码</td></tr><tr><td>&lt;faultstring&gt;</td><td>可供人阅读的有关故障的说明</td></tr><tr><td>&lt;faultactor&gt;</td><td>有关是谁引发故障的信息</td></tr><tr><td>&lt;detail&gt;</td><td>存留涉及 Body 元素的应用程序专用错误信息</td></tr></tbody></table><br /></li></ul><b>SOAP请求报文</b><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;!-- 信封 --&gt;<br />
&lt;</span><span style="color: rgb(128, 0, 0);">SOAP-ENV:Envelope </span><span style="color: rgb(255, 0, 0);">xmlns:SOAP-ENV</span><span style="color: rgb(0, 0, 255);">="http://schemas.xmlsoap.org/soap/envelope/"</span><span style="color: rgb(255, 0, 0);"> //SOAP报文默认命名空间<br />                   xmlns:SOAP-ENC</span><span style="color: rgb(0, 0, 255);">="http://schemas.xmlsoap.org/soap/encoding/"</span><span style="color: rgb(255, 0, 0);"> //编码数据类型命名空间<br />                   xmlns:xsi</span><span style="color: rgb(0, 0, 255);">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: rgb(255, 0, 0);"></span><span style="color: rgb(0, 0, 0);">//文档XSD实例方案，规定格式</span><br /><span style="color: rgb(255, 0, 0);">                   xmlns:xsd</span><span style="color: rgb(0, 0, 255);">="http://www.w3.org/2001/XMLSchema"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">         //文档XSD方案，规定格式<br />    </span><span style="color: rgb(0, 0, 255);">&lt;!-- 信头 --&gt;</span><br /><span style="color: rgb(0, 0, 0);">    &lt;SOAP-ENV:HEADER&gt;&lt;/SOAP-ENV:HEADER&gt;<br /></span><span style="color: rgb(0, 0, 255);">    &lt;!-- 信体 --&gt;<br />
    &lt;</span><span style="color: rgb(128, 0, 0);">SOAP-ENV:Body</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">m:activateEpurse </span><span style="color: rgb(255, 0, 0);">xmlns:m</span><span style="color: rgb(0, 0, 255);">="http://service.payment.ipayment.justinmobile.com"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />            </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">m:appNo</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">m:appNo</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />            </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">m:mobileNo</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">m:mobileNo</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">m:activateEpurse</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">SOAP-ENV:Body</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">SOAP-ENV:Envelope</span><span style="color: rgb(0, 0, 255);">&gt;</span></div><b><br />SOAP应答报文（返回一个entry数组，也就是MAP）<br /></b><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">soap:Envelope </span><span style="color: rgb(255, 0, 0);">xmlns:soap</span><span style="color: rgb(0, 0, 255);">="http://schemas.xmlsoap.org/soap/envelope/"</span><span style="color: rgb(255, 0, 0);"> xmlns:xsd</span><span style="color: rgb(0, 0, 255);">="http://www.w3.org/2001/XMLSchema"</span><span style="color: rgb(255, 0, 0);"> xmlns:xsi</span><span style="color: rgb(0, 0, 255);">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">soap:Body</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ns1:activateEpurseResponse </span><span style="color: rgb(255, 0, 0);">xmlns:ns1</span><span style="color: rgb(0, 0, 255);">="http://service.payment.ipayment.justinmobile.com"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />            </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ns1:out</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />                </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">entry </span><span style="color: rgb(255, 0, 0);">xmlns</span><span style="color: rgb(0, 0, 255);">="http://service.payment.ipayment.justinmobile.com"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />                    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">key</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">transStatus</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">key</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />                    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">0001</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">value</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />                </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">entry</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />            </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ns1:out</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">ns1:activateEpurseResponse</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">soap:Body</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">soap:Envelope</span><span style="color: rgb(0, 0, 255);">&gt;</span></div><b><br /></b><p>所有以上的元素均被声明于针对 SOAP 封装的默认命名空间中：</p><p><b><a title="soap-envelope.xml" href="http://www.w3.org/2001/12/soap-envelope">http://www.w3.org/2001/12/soap-envelope</a></b></p><p>SOAP 在默认的命名空间中 ("http://www.w3.org/2001/12/soap-envelope") 
定义了三个属性。这三个属性是：actor、 mustUnderstand 以及 encodingStyle。这些被定义在 SOAP 头部的属性可定义容器如何对 
SOAP 消息进行处理。</p><h2>actor</h2><p>通过沿着消息路径经过不同的端点，SOAP 消息可从某个发送者传播到某个接收者。并非 SOAP 消息的所有部分均打算传送到 SOAP 
消息的最终端点，不过，另一个方面，也许打算传送给消息路径上的一个或多个端点。</p><p>SOAP 的 actor 属性可被用于将 Header 元素寻址到一个特定的端点。</p><p>soap:actor="URI" </p><h2>mustUnderstand</h2><p>SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。</p><p>假如您向 Header 元素的某个子元素添加了 
"mustUnderstand="1"，则它可指示处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素，则在处理此头部时必须失效。</p><p>soap:mustUnderstand="0|1"</p><h2>encodingStyle</h2><p>SOAP 的 encodingStyle 属性用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 
元素中，并会被应用到元素的内容及元素的所有子元素上。SOAP 消息没有默认的编码方式。</p><p>soap:encodingStyle="<a title="soap-encoding.xml" href="http://www.w3.org/2001/12/soap-encoding">http://www.w3.org/2001/12/soap-encoding</a>"</p><p><br /></p><p>以及针对 SOAP 编码和数据类型的默认命名空间：</p><p><a title="soap-encoding.xml" href="http://www.w3.org/2001/12/soap-encoding">http://www.w3.org/2001/12/soap-encoding</a></p><b><br /><br /><br /></b><b><br /><br /></b><br /><img src ="http://www.blogjava.net/zpuser/aggbug/212593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2008-07-04 17:23 <a href="http://www.blogjava.net/zpuser/archive/2008/07/04/212593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SVN-WINDOWS服务器架设和管理</title><link>http://www.blogjava.net/zpuser/archive/2008/06/08/206654.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Sun, 08 Jun 2008 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2008/06/08/206654.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/206654.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2008/06/08/206654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/206654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/206654.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SVN-WINDOWS														服务器架设和管理																		 																		 																										1.								   														环境和软件准备														 ...&nbsp;&nbsp;<a href='http://www.blogjava.net/zpuser/archive/2008/06/08/206654.html'>阅读全文</a><img src ="http://www.blogjava.net/zpuser/aggbug/206654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2008-06-08 12:40 <a href="http://www.blogjava.net/zpuser/archive/2008/06/08/206654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RSA非对称加密JAVAAPI实现</title><link>http://www.blogjava.net/zpuser/archive/2008/05/27/203203.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Tue, 27 May 2008 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2008/05/27/203203.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/203203.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2008/05/27/203203.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/203203.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/203203.html</trackback:ping><description><![CDATA[
		<h2> </h2>
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> org.acooly.studio.encrypt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.security.KeyPair;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.security.KeyPairGenerator;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.security.PrivateKey;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.security.PublicKey;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> javax.crypto.Cipher;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.apache.commons.logging.Log;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.apache.commons.logging.LogFactory;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_286_2885_Open_Image" onclick="this.style.display='none'; Codehighlighter1_286_2885_Open_Text.style.display='none'; Codehighlighter1_286_2885_Closed_Image.style.display='inline'; Codehighlighter1_286_2885_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_286_2885_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_286_2885_Closed_Text.style.display='none'; Codehighlighter1_286_2885_Open_Image.style.display='inline'; Codehighlighter1_286_2885_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span id="Codehighlighter1_286_2885_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
				<span id="Codehighlighter1_286_2885_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">*****************************************************************************<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 非对称加密JAVA算法演示(JAVA-SUN API实现)&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;b&gt;算法:RSA&lt;/b&gt;&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA算法是第一个能同时用于加密和数字签名的算法，也易于理解和操作。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA是被研究得最广泛的公钥算法，从提出到现在已近二十年，经历了各种攻击的考验，逐渐为人们接受，普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解，但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何，而且密码学界多数人士倾向于因子分解不是NPC问题。RSA的缺点主要有：A)产生密钥很麻烦，受到素数产生技术的限制，因而难以做到一次一密。B)分组长度太大，为保证安全性，n<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 至少也要 600<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * bits以上，使运算代价很高，尤其是速度较慢，较对称密码算法慢几个数量级；且随着大数分解技术的发展，这个长度还在增加，不利于数据格式的标准化。目前，SET(Secure<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Electronic Transaction)协议中要求CA采用2048比特长的密钥，其他实体使用1024比特的密钥。&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 这种算法1978年就出现了，它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作，也很流行。算法的名字以发明者的名字命名：Ron<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数（ 大于<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 100个十进制位）的函数。据猜测，从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 密钥对的产生。选择两个大素数，p 和q 。计算： &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * n = p * q &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 然后随机选择加密密钥e，要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后，利用Euclid 算法计算解密密钥d, 满足 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) ) &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 其中n和d也要互质。数e和n是公钥，d是私钥。两个素数p和q不再需要，应该丢弃，不要让任何人知道。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 加密信息 m（二进制表示）时，首先把m分成等长数据块 m1 ,m2,<img src="http://www.blogjava.net/images/dot.gif" />, mi ，块长s，其中 2^s &lt;= n, s 尽可能的大。对应的密文是：<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * ci = mi^e ( mod n ) ( a ) &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 解密时作如下计算： &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * mi = ci^d ( mod n ) ( b ) &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA 可用于数字签名，方案是用 ( a ) 式签名， ( b )式验证。具体操作时考虑到安全性和 m信息量较大等因素，一般是先作 HASH 运算。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA 的安全性。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA的安全性依赖于大数分解，但是否等同于大数分解一直未能得到理论上的证明，因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法，那它肯定可以修改成为大数分解算法。目前，<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA的一些变种算法已被证明等价于大数分解。不管怎样，分解n是最显然的攻击方法。现在，人们已能分解140多个十进制位的大素数。因此，模数n必须选大一些，因具体适用情况而定。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA的速度。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 由于进行的都是大数计算，使得RSA最快的情况也比DES慢上100倍，无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA的选择密文攻击。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装(Blind)，让拥有私钥的实体签署。然后，经过计算就可得到它所想要的信息。实际上，攻击利用的都是同一个弱点，即存在这样一个事实：乘幂保留了输入的乘法结构：<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;br&gt; ( XM )^d = X^d *M^d mod n &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 前面已经提到，这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题，主要措施有两条：一条是采用好的公钥协议，保证工作过程中实体不对其他实体任意产生的信息解密，不对自己一无所知的信息签名；另一条是决不对陌生人送来的随机文档签名，签名时首先使用One-Way<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Hash Function对文档作HASH处理，或同时使用不同的签名算法。在中提到了几种不同类型的攻击方法。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA的公共模数攻击。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 若系统中共有一个模数，只是不同的人拥有不同的e和d，系统将是危险的。最普遍的情况是同一信息用不同的公钥加密，这些公钥共模而且互质，那末该信息无需私钥就可得到恢复。设P为信息明文，两个加密密钥为e1和e2，公共模数是n，则：<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * C1 = P^e1 mod n &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * C2 = P^e2 mod n &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 密码分析者知道n、e1、e2、C1和C2，就能得到P。 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 因为e1和e2互质，故用Euclidean算法能找到r和s，满足： &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * r * e1 + s * e2 = 1 &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 假设r为负数，需再用Euclidean算法计算C1^(-1)，则 &lt;br&gt; ( C1^(-1) )^(-r) * C2^s = P mod n &lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 另外，还有其它几种利用公共模数攻击的方法。总之，如果知道给定模数的一对e和d，一是有利于攻击者分解模数，一是有利于攻击者计算出其它成对的e’和d’，而无需分解模数。解决办法只有一个，那就是不要共享模数n。&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * RSA的小指数攻击。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 有一种提高RSA速度的建议是使公钥e取较小的值，这样会使加密变得易于实现，速度有所提高。但这样作是不安全的，对付办法就是e和d都取较大的值。&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span>
						<span style="COLOR: #808080">@author</span>
						<span style="COLOR: #008000"> pu.zhang<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_2923_5276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2923_5276_Open_Text.style.display='none'; Codehighlighter1_2923_5276_Closed_Image.style.display='inline'; Codehighlighter1_2923_5276_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_2923_5276_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2923_5276_Closed_Text.style.display='none'; Codehighlighter1_2923_5276_Open_Image.style.display='inline'; Codehighlighter1_2923_5276_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> DisSymmetricEncryption </span>
				<span id="Codehighlighter1_2923_5276_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_2923_5276_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">private</span>
						<span style="COLOR: #000000"> Log logger </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> LogFactory.getLog(DisSymmetricEncryption.</span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_3054_3179_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3054_3179_Open_Text.style.display='none'; Codehighlighter1_3054_3179_Closed_Image.style.display='inline'; Codehighlighter1_3054_3179_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_3054_3179_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3054_3179_Closed_Text.style.display='none'; Codehighlighter1_3054_3179_Open_Image.style.display='inline'; Codehighlighter1_3054_3179_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Exception</span>
						<span id="Codehighlighter1_3054_3179_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_3054_3179_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        DisSymmetricEncryption disSymmetricEncryption </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> DisSymmetricEncryption();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        disSymmetricEncryption.RSAEncryption();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_3183_3336_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3183_3336_Open_Text.style.display='none'; Codehighlighter1_3183_3336_Closed_Image.style.display='inline'; Codehighlighter1_3183_3336_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_3183_3336_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3183_3336_Closed_Text.style.display='none'; Codehighlighter1_3183_3336_Open_Image.style.display='inline'; Codehighlighter1_3183_3336_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_3183_3336_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
						<span id="Codehighlighter1_3183_3336_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * &lt;b&gt;RSA加/解密JAVA-API演示&lt;/b&gt;&lt;br&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 加密可以用公钥，解密用私钥；或者加密用私钥，解密用公钥。 通常非对称加密是非常消耗资源的，因此可以对大数据用对称加密如：<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * DES或3DES，而对其对称密钥进行非对称加密，这样既保证了数据的安全，还能保证效率。<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_3377_4879_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3377_4879_Open_Text.style.display='none'; Codehighlighter1_3377_4879_Closed_Image.style.display='inline'; Codehighlighter1_3377_4879_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_3377_4879_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3377_4879_Closed_Text.style.display='none'; Codehighlighter1_3377_4879_Open_Image.style.display='inline'; Codehighlighter1_3377_4879_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> RSAEncryption() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Exception </span>
						<span id="Codehighlighter1_3377_4879_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_3377_4879_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String algorithm </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">RSA</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">algorithm:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">algorithm);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">明文</span>
								<span style="COLOR: #008000">
										<br />
										<img id="Codehighlighter1_3474_3505_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3474_3505_Open_Text.style.display='none'; Codehighlighter1_3474_3505_Closed_Image.style.display='inline'; Codehighlighter1_3474_3505_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_3474_3505_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3474_3505_Closed_Text.style.display='none'; Codehighlighter1_3474_3505_Open_Image.style.display='inline'; Codehighlighter1_3474_3505_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        </span>
								<span style="COLOR: #0000ff">byte</span>
								<span style="COLOR: #000000">[] plainText </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_3474_3505_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_3474_3505_Open_Text">
										<span style="COLOR: #000000">{ </span>
										<span style="COLOR: #000000">0</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">1</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">2</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">3</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">4</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">5</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">6</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">7</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">8</span>
										<span style="COLOR: #000000">, </span>
										<span style="COLOR: #000000">9</span>
										<span style="COLOR: #000000"> }</span>
								</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">plainText:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">formatedHexString(plainText));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 生成KeyPaire</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        KeyPairGenerator keyPairGenerator </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> KeyPairGenerator.getInstance(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">RSA</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        keyPairGenerator.initialize(</span>
								<span style="COLOR: #000000">1024</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        KeyPair keyPair </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> keyPairGenerator.genKeyPair();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 公钥</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        PublicKey publickKey </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> keyPair.getPublic();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">PublicKey:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">formatedHexString(publickKey.getEncoded()));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 私钥</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        PrivateKey privateKey </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> keyPair.getPrivate();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">PrivateKey:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">formatedHexString(privateKey.getEncoded()));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Cipher cipher </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> Cipher.getInstance(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">RSA</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> 公钥加密</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        cipher.init(Cipher.ENCRYPT_MODE, publickKey);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">byte</span>
								<span style="COLOR: #000000">[] publicKeyEncryptText </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> cipher.doFinal(plainText);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">publicKeyEncryptText:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">formatedHexString(publicKeyEncryptText));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">私钥解密</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        cipher.init(Cipher.DECRYPT_MODE, privateKey);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">byte</span>
								<span style="COLOR: #000000">[] privateKeyDecryptText </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> cipher.doFinal(publicKeyEncryptText);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">privateKeyDecryptText:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">formatedHexString(privateKeyDecryptText));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">私钥加密</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        cipher.init(Cipher.ENCRYPT_MODE, privateKey);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">byte</span>
								<span style="COLOR: #000000">[] privateKeyEncryptText </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> cipher.doFinal(plainText);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">privateKeyEncryptText:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">formatedHexString(privateKeyEncryptText));    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000">公钥解密</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        cipher.init(Cipher.DECRYPT_MODE, publickKey);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">byte</span>
								<span style="COLOR: #000000">[] publicKeyDecryptText </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> cipher.doFinal(privateKeyEncryptText);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        logger.info(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">publicKeyDecryptText:</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">formatedHexString(publicKeyDecryptText));        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_4883_4941_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4883_4941_Open_Text.style.display='none'; Codehighlighter1_4883_4941_Closed_Image.style.display='inline'; Codehighlighter1_4883_4941_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_4883_4941_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4883_4941_Closed_Text.style.display='none'; Codehighlighter1_4883_4941_Open_Image.style.display='inline'; Codehighlighter1_4883_4941_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span id="Codehighlighter1_4883_4941_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
						<span id="Codehighlighter1_4883_4941_Open_Text">
								<span style="COLOR: #008000">/**</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 转换byte数组为16进制的字符串显示方式<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@param</span>
								<span style="COLOR: #008000"> b<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span>
								<span style="COLOR: #808080">@return</span>
								<span style="COLOR: #008000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span>
								<span style="COLOR: #008000">*/</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_4979_5272_Open_Image" onclick="this.style.display='none'; Codehighlighter1_4979_5272_Open_Text.style.display='none'; Codehighlighter1_4979_5272_Closed_Image.style.display='inline'; Codehighlighter1_4979_5272_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_4979_5272_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_4979_5272_Closed_Text.style.display='none'; Codehighlighter1_4979_5272_Open_Image.style.display='inline'; Codehighlighter1_4979_5272_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    String formatedHexString(</span>
						<span style="COLOR: #0000ff">byte</span>
						<span style="COLOR: #000000">[] b) </span>
						<span id="Codehighlighter1_4979_5272_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_4979_5272_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String hs </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">""</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String stmp </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">""</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_5057_5242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_5057_5242_Open_Text.style.display='none'; Codehighlighter1_5057_5242_Closed_Image.style.display='inline'; Codehighlighter1_5057_5242_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_5057_5242_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_5057_5242_Closed_Text.style.display='none'; Codehighlighter1_5057_5242_Open_Image.style.display='inline'; Codehighlighter1_5057_5242_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">for</span>
								<span style="COLOR: #000000"> (</span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> n </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">0</span>
								<span style="COLOR: #000000">; n </span>
								<span style="COLOR: #000000">&lt;</span>
								<span style="COLOR: #000000"> b.length; n</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">) </span>
								<span id="Codehighlighter1_5057_5242_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_5057_5242_Open_Text">
										<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            stmp </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> (java.lang.Integer.toHexString(b[n] </span>
										<span style="COLOR: #000000">&amp;</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">0XFF</span>
										<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">if</span>
										<span style="COLOR: #000000"> (stmp.length() </span>
										<span style="COLOR: #000000">==</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">1</span>
										<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                hs </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> hs </span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">0</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> stmp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">else</span>
										<span style="COLOR: #000000">
												<br />
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                hs </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> hs </span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> stmp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">if</span>
										<span style="COLOR: #000000"> (n </span>
										<span style="COLOR: #000000">&lt;</span>
										<span style="COLOR: #000000"> b.length </span>
										<span style="COLOR: #000000">-</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">1</span>
										<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                hs </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> hs </span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> hs.toUpperCase();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
<img src ="http://www.blogjava.net/zpuser/aggbug/203203.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2008-05-27 13:41 <a href="http://www.blogjava.net/zpuser/archive/2008/05/27/203203.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows下自动启动svn的svnserved脚本</title><link>http://www.blogjava.net/zpuser/archive/2008/05/25/202671.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Sat, 24 May 2008 17:34:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2008/05/25/202671.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/202671.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2008/05/25/202671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/202671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/202671.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">set</span>
				<span style="COLOR: #000000"> WshShell </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> WScript.CreateObject(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">WScript.Shell</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />WshShell.run </span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">svnserve -d -r <font color="#ff0066">h:/repository</font></span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #0000ff">true</span>
		</div>
		<br />把上面脚本保存为:auto_run_svnserve.vbs，然后加入到启动里面或是注册表run里面，系统启动的时候就自动启动了<span style="COLOR: #000000">svnserve服务。注意：<font color="#ff0066">红色部分为你的仓库的物理地址。</font></span><br /><img src ="http://www.blogjava.net/zpuser/aggbug/202671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2008-05-25 01:34 <a href="http://www.blogjava.net/zpuser/archive/2008/05/25/202671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对成加密JAVA-API实现</title><link>http://www.blogjava.net/zpuser/archive/2008/05/23/202513.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Fri, 23 May 2008 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2008/05/23/202513.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/202513.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2008/05/23/202513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/202513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/202513.html</trackback:ping><description><![CDATA[
		<br />
		<br />
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 128, 128);">  1</span> <span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> org.acooly.studio.encrypt;<br /></span><span style="color: rgb(0, 128, 128);">  2</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  3</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.security.Key;<br /></span><span style="color: rgb(0, 128, 128);">  4</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">  5</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> javax.crypto.Cipher;<br /></span><span style="color: rgb(0, 128, 128);">  6</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> javax.crypto.KeyGenerator;<br /></span><span style="color: rgb(0, 128, 128);">  7</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> javax.crypto.SecretKey;<br /></span><span style="color: rgb(0, 128, 128);">  8</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> javax.crypto.spec.IvParameterSpec;<br /></span><span style="color: rgb(0, 128, 128);">  9</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> javax.crypto.spec.SecretKeySpec;<br /></span><span style="color: rgb(0, 128, 128);"> 10</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 11</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.commons.logging.Log;<br /></span><span style="color: rgb(0, 128, 128);"> 12</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.apache.commons.logging.LogFactory;<br /></span><span style="color: rgb(0, 128, 128);"> 13</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 14</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 15</span> <span style="color: rgb(0, 128, 0);"> * 对称加密JAVA算法演示(JAVA-SUN API实现)<br /></span><span style="color: rgb(0, 128, 128);"> 16</span> <span style="color: rgb(0, 128, 0);"> * <br /></span><span style="color: rgb(0, 128, 128);"> 17</span> <span style="color: rgb(0, 128, 0);"> * <br /></span><span style="color: rgb(0, 128, 128);"> 18</span> <span style="color: rgb(0, 128, 0);"> * </span><span style="color: rgb(128, 128, 128);">@author</span><span style="color: rgb(0, 128, 0);"> pu.zhang<br /></span><span style="color: rgb(0, 128, 128);"> 19</span> <span style="color: rgb(0, 128, 0);"> * <br /></span><span style="color: rgb(0, 128, 128);"> 20</span> <span style="color: rgb(0, 128, 0);"> </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 21</span> <span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> SymmetricEncryption {<br /></span><span style="color: rgb(0, 128, 128);"> 22</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 23</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> Log logger </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> LogFactory.getLog(SymmetricEncryption.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);"> 24</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 25</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String[] args) </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> Exception {<br /></span><span style="color: rgb(0, 128, 128);"> 26</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 27</span> <span style="color: rgb(0, 0, 0);">        SymmetricEncryption symmetricEncryption </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> SymmetricEncryption();<br /></span><span style="color: rgb(0, 128, 128);"> 28</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 29</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> DES</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 30</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        symmetricEncryption.DESEncryption();<br /></span><span style="color: rgb(0, 128, 128);"> 31</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 3DES</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 32</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        symmetricEncryption.tripleDESEncryption();<br /></span><span style="color: rgb(0, 128, 128);"> 33</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 34</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);"> 35</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 36</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 37</span> <span style="color: rgb(0, 128, 0);">     * DES加/解密演示<br /></span><span style="color: rgb(0, 128, 128);"> 38</span> <span style="color: rgb(0, 128, 0);">     * <br /></span><span style="color: rgb(0, 128, 128);"> 39</span> <span style="color: rgb(0, 128, 0);">     * </span><span style="color: rgb(128, 128, 128);">@throws</span><span style="color: rgb(0, 128, 0);"> Exception<br /></span><span style="color: rgb(0, 128, 128);"> 40</span> <span style="color: rgb(0, 128, 0);">     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 41</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> DESEncryption() </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> Exception {<br /></span><span style="color: rgb(0, 128, 128);"> 42</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 43</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 明文</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 44</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] plainText </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">I am plain text!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.getBytes();<br /></span><span style="color: rgb(0, 128, 128);"> 45</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 46</span> <span style="color: rgb(0, 0, 0);">        logger.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">明文:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> formatedHexString(plainText));<br /></span><span style="color: rgb(0, 128, 128);"> 47</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 通过KeyGenerator形成一个key</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 48</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        KeyGenerator keyGenerator </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> KeyGenerator.getInstance(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">DES</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);"> 49</span> <span style="color: rgb(0, 0, 0);">        Key key </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> keyGenerator.generateKey();<br /></span><span style="color: rgb(0, 128, 128);"> 50</span> <span style="color: rgb(0, 0, 0);">        logger.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">KEY:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> formatedHexString(key.getEncoded()));<br /></span><span style="color: rgb(0, 128, 128);"> 51</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 52</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 获得一个私钥加密类Cipher，CBC是加密方式，PKCS5Padding是填充方法<br /></span><span style="color: rgb(0, 128, 128);"> 53</span> <span style="color: rgb(0, 128, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> CBC加密方式：把明文分为左右两部分LP和RP<img src="http://www.blogjava.net/images/dot.gif" /></span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 54</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        String transformation </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">DES/CBC/PKCS5Padding</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">; </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> algorithm/mode/padding</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 55</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        Cipher cipher </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> Cipher.getInstance(transformation);<br /></span><span style="color: rgb(0, 128, 128);"> 56</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 57</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> CBC方式的初始化向量</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 58</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] iv </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">iamaniv.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.getBytes();<br /></span><span style="color: rgb(0, 128, 128);"> 59</span> <span style="color: rgb(0, 0, 0);">        IvParameterSpec ivparam </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> IvParameterSpec(iv);<br /></span><span style="color: rgb(0, 128, 128);"> 60</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 加密</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 61</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        cipher.init(Cipher.ENCRYPT_MODE, key, ivparam);<br /></span><span style="color: rgb(0, 128, 128);"> 62</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] cipherText </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> cipher.doFinal(plainText);<br /></span><span style="color: rgb(0, 128, 128);"> 63</span> <span style="color: rgb(0, 0, 0);">        logger.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">加密后密文:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> formatedHexString(cipherText));<br /></span><span style="color: rgb(0, 128, 128);"> 64</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 65</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 解密</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 66</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 67</span> <span style="color: rgb(0, 0, 0);">        cipher.init(Cipher.DECRYPT_MODE, key, ivparam);<br /></span><span style="color: rgb(0, 128, 128);"> 68</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] newPlainText </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> cipher.doFinal(cipherText);<br /></span><span style="color: rgb(0, 128, 128);"> 69</span> <span style="color: rgb(0, 0, 0);">        logger.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">解密后明文:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> formatedHexString(newPlainText));<br /></span><span style="color: rgb(0, 128, 128);"> 70</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);"> 71</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 72</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 73</span> <span style="color: rgb(0, 128, 0);">     * DES加/解密演示<br /></span><span style="color: rgb(0, 128, 128);"> 74</span> <span style="color: rgb(0, 128, 0);">     * <br /></span><span style="color: rgb(0, 128, 128);"> 75</span> <span style="color: rgb(0, 128, 0);">     * </span><span style="color: rgb(128, 128, 128);">@throws</span><span style="color: rgb(0, 128, 0);"> Exception<br /></span><span style="color: rgb(0, 128, 128);"> 76</span> <span style="color: rgb(0, 128, 0);">     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 77</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> tripleDESEncryption() </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> Exception {<br /></span><span style="color: rgb(0, 128, 128);"> 78</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 24字节密钥key,3倍DES密钥长度</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 79</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] tripleKey </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">123456789012345678901234</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.getBytes();<br /></span><span style="color: rgb(0, 128, 128);"> 80</span> <span style="color: rgb(0, 0, 0);">        logger.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">tripleKey:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> formatedHexString(tripleKey));<br /></span><span style="color: rgb(0, 128, 128);"> 81</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 明文</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 82</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] plainText </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">I am plain text!</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.getBytes();<br /></span><span style="color: rgb(0, 128, 128);"> 83</span> <span style="color: rgb(0, 0, 0);">        logger.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">初始的明文:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> formatedHexString(plainText));<br /></span><span style="color: rgb(0, 128, 128);"> 84</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 85</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 算法</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 86</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        String algorithm </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">DESede</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 87</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 88</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 生成密钥</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 89</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        SecretKey secretKey </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> SecretKeySpec(tripleKey, algorithm);<br /></span><span style="color: rgb(0, 128, 128);"> 90</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 91</span> <span style="color: rgb(0, 0, 0);">        String transformation </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">DESede/CBC/PKCS5Padding</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 92</span> <span style="color: rgb(0, 0, 0);">        Cipher cipher </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> Cipher.getInstance(transformation);<br /></span><span style="color: rgb(0, 128, 128);"> 93</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> CBC方式的初始化向量</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 94</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] iv </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">iamaniv.</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">.getBytes();<br /></span><span style="color: rgb(0, 128, 128);"> 95</span> <span style="color: rgb(0, 0, 0);">        IvParameterSpec ivparam </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> IvParameterSpec(iv);<br /></span><span style="color: rgb(0, 128, 128);"> 96</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 97</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 加密</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 98</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivparam);<br /></span><span style="color: rgb(0, 128, 128);"> 99</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] encriptText </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> cipher.doFinal(plainText);<br /></span><span style="color: rgb(0, 128, 128);">100</span> <span style="color: rgb(0, 0, 0);">        logger.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">加密的密文:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> formatedHexString(encriptText));<br /></span><span style="color: rgb(0, 128, 128);">101</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">102</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 解密码</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">103</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        cipher.init(Cipher.DECRYPT_MODE, secretKey, ivparam);<br /></span><span style="color: rgb(0, 128, 128);">104</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] newPlainText </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> cipher.doFinal(encriptText);<br /></span><span style="color: rgb(0, 128, 128);">105</span> <span style="color: rgb(0, 0, 0);">        logger.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">解密的明文:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> formatedHexString(newPlainText));<br /></span><span style="color: rgb(0, 128, 128);">106</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">107</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">108</span> <span style="color: rgb(0, 0, 0);">    <br /></span><span style="color: rgb(0, 128, 128);">109</span> <span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">110</span> <span style="color: rgb(0, 128, 0);">     * 转换byte数组为16进制的字符串显示方式<br /></span><span style="color: rgb(0, 128, 128);">111</span> <span style="color: rgb(0, 128, 0);">     * </span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);"> b<br /></span><span style="color: rgb(0, 128, 128);">112</span> <span style="color: rgb(0, 128, 0);">     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">113</span> <span style="color: rgb(0, 128, 0);">     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">114</span> <span style="color: rgb(0, 0, 0);">    String formatedHexString(</span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">[] b) {<br /></span><span style="color: rgb(0, 128, 128);">115</span> <span style="color: rgb(0, 0, 0);">        String hs </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">116</span> <span style="color: rgb(0, 0, 0);">        String stmp </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">117</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">118</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> n </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; n </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);"> b.length; n</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br /></span><span style="color: rgb(0, 128, 128);">119</span> <span style="color: rgb(0, 0, 0);">            stmp </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> (java.lang.Integer.toHexString(b[n] </span><span style="color: rgb(0, 0, 0);">&amp;</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0XFF</span><span style="color: rgb(0, 0, 0);">));<br /></span><span style="color: rgb(0, 128, 128);">120</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (stmp.length() </span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br /></span><span style="color: rgb(0, 128, 128);">121</span> <span style="color: rgb(0, 0, 0);">                hs </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> hs </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> stmp;<br /></span><span style="color: rgb(0, 128, 128);">122</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">123</span> <span style="color: rgb(0, 0, 0);">                hs </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> hs </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> stmp;<br /></span><span style="color: rgb(0, 128, 128);">124</span> <span style="color: rgb(0, 0, 0);">            </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (n </span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);"> b.length </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br /></span><span style="color: rgb(0, 128, 128);">125</span> <span style="color: rgb(0, 0, 0);">                hs </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> hs </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">126</span> <span style="color: rgb(0, 0, 0);">        }<br /></span><span style="color: rgb(0, 128, 128);">127</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> hs.toUpperCase();<br /></span><span style="color: rgb(0, 128, 128);">128</span> <span style="color: rgb(0, 0, 0);">    }<br /></span><span style="color: rgb(0, 128, 128);">129</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">130</span> <span style="color: rgb(0, 0, 0);">}<br /></span><span style="color: rgb(0, 128, 128);">131</span> <span style="color: rgb(0, 0, 0);"></span></div>
		<br />
<img src ="http://www.blogjava.net/zpuser/aggbug/202513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2008-05-23 23:21 <a href="http://www.blogjava.net/zpuser/archive/2008/05/23/202513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对称加密和非对称加密</title><link>http://www.blogjava.net/zpuser/archive/2008/05/21/201957.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Wed, 21 May 2008 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2008/05/21/201957.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/201957.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2008/05/21/201957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/201957.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/201957.html</trackback:ping><description><![CDATA[
		<h2>对称加密算法</h2>
		<br />
		<a title="JAVA-API部分算法实现" href="/zpuser/archive/2008/05/23/202513.html" target="_blank">JAVA-API部分算法实现</a>
		<br />
		<br />
		<p>对称加密算法 对称加密算法是应用较早的加密算法，技术成熟。在对称加密算法中，数据发信方将明文（原始数据）和加密密钥一起经过特殊加密算法处理后，使其变成复杂的加密密文发送出去。收信方收到密文后，若想解读原文，则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密，才能使其恢复成可读明文。在对称加密算法中，使用的密钥只有一个，发收信双方都使用这个密钥对数据进行加密和解密，这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是，交易双方都使用同样钥匙，安全性得不到保证。此外，每对用户每次使用对称加密算法时，都需要使用其他人不知道的惟一钥匙，这会使得发收信双方所拥有的钥匙数量成几何级数增长，密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难，主要是因为密钥管理困难，使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。</p>
		<h3>DES </h3>数据加密算法（Data Encryption Algorithm，DEA）的数据加密标准（Data Encryption Standard，DES）是规范的描述，它出自 IBM 的研究工作，并在 1997 年被美国政府正式采纳。它很可能是使用最广泛的秘钥系统，特别是在保护金融数据的安全中，最初开发的 DES 是嵌入硬件中的。通常，自动取款机（Automated Teller Machine，ATM）都使用 DES。<br />DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位，产生最大 64 位的分组大小。这是一个迭代的分组密码，使用称为 Feistel 的技术，其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能，然后将输出与另一半进行“异或”运算；接着交换这两半，这一过程会继续下去，但最后一个循环不交换。DES 使用 16 个循环。<br />攻击 DES 的主要形式被称为蛮力的或彻底密钥搜索，即重复尝试各种密钥直到有一个符合为止。如果 DES 使用 56 位的密钥，则可能的密钥数量是 2 的 56 次方个。随着计算机系统能力的不断发展，DES 的安全性比它刚出现时会弱得多，然而从非关键性质的实际出发，仍可以认为它是足够的。不过 ，DES 现在仅用于旧系统的鉴定，而更多地选择新的加密标准 — 高级加密标准（Advanced Encryption Standard，AES）。 <br />DES 的常见变体是三重 DES，使用 168 位的密钥对资料进行三次加密的一种机制；它通常（但非始终）提供极其强大的安全性。如果三个 56 位的子元素都相同，则三重 DES 向后兼容 DES。<br />IBM 曾对 DES 拥有几年的专利权，但是在 1983 年已到期，并且处于公有范围中，允许在特定条件下可以免除专利使用费而使用。<br />由于DES是加(解)密64位明(密)文，即为8个字节(8*8=64)，可以据此初步判断这是分组加密，加密的过程中会有16次循环与密钥置换过程，据此可以判断有可能是用到DES密码算法，更精确的判断还得必须懂得一点DES的加密过程。 
<h3><b>3DES</b></h3><p>3DES是DES加密算法的一种模式，它使用3条64位的密钥对数据进行三次加密。数据加密标准（DES）是美国的一种由来已久的加密标准，它使用对称密钥加密法，并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法，而在密码块的方法中，文本被分成64位大小的文本块然后再进行加密。比起最初的DES，3DES更为安全。<br />3DES（即Triple DES）是DES向AES过渡的加密算法（1999年，NIST将3-DES指定为过渡的加密标准），是DES的一个更安全的变形。它以DES为基本模块，通过组合分组方法设计出分组加密算法，其具体实现如下：设Ek()和Dk()代表DES算法的加密和解密过程，K代表DES算法使用的密钥，P代表明文，C代表密表，这样，<br />3DES加密过程为：C=Ek3(Dk2(Ek1(P)))<br />3DES解密过程为：P=Dk1((EK2(Dk3(C))) <br /></p><br /><h3><b>AES——对称密码新标准 </b></h3><p>对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由<a href="http://baike.baidu.com/view/934.htm" target="_blank">密钥</a>扩展算法和加密（解密）算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线性攻击，可变长密钥和分组是该体制的设计要点。  <br /><br />AES是美国国家标准技术研究所NIST旨在取代<a href="http://baike.baidu.com/view/7510.htm" target="_blank">DES</a>的21世纪的加密标准。   <br /><br />AES的基本要求是，采用对称分组密码体制，密钥长度的最少支持为128、192、256，分组长度128位，算法应易于各种硬件和软件实现。1998年 NIST开始AES第一轮分析、测试和征集，共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。预计在2000年8月AES的最终结果将公布。    <br />   <br />在应用方面，尽管DES在安全上是脆弱的，但由于快速DES芯片的大量生产，使得DES仍能暂时继续使用，为提高安全强度，通常使用独立密钥的三级DES。但是DES迟早要被AES代替。流密码体制较之分组密码在理论上成熟且安全，但未被列入下一代加密标准。   <br /></p><p><br /></p><h2>非对称加密算法</h2><p>asymmetric encoding algorithm<br />非对称加密算法需要两个密钥：公开密钥（publickey）和私有密钥（privatekey）。公开密钥与私有密钥是一对，如果用公开密钥对数据进行加密，只有用对应的私有密钥才能解密；如果用私有密钥对数据进行加密，那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥，所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是：甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开；得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方；甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。 非对称加密算法的保密性比较好，它消除了最终用户交换密钥的需要。<br /><br /><a href="/zpuser/archive/2008/05/27/203203.html" target="_blank">RSA算法演示<br /></a><br /><br /></p><h2>对称和非对称加密算法案例</h2><div class="t1">基于多级密钥管理体系中的对称密钥传输保护方法</div><div class="t2">申请号/专利号： 200610147335</div><div class="con2">一种基于在多级密钥管理体系中的对称密钥传输保护方法，其步骤为：<br />１．传入方签发并通过两条途径传递两张密钥传输卡，每张卡中存有一段传入方的根公钥；<br />２．传出方从两张卡获得传入方的根公钥，并随机生成传输密钥，再用该根公钥加密后分段写入到两张卡中，其工作密钥用传输密钥传出并写入两张卡中通过两条途径递送给传入方；<br />３．传入方验证卡的合法性；从两张卡中获得传输密钥和工作密钥密文并用根私钥解密传输密钥写入加密机传输密钥区；传入方将工作密钥密文通过传输密钥写入工作密钥区，从而完成了两台密钥管理加密机之间的密钥传递过程。本发明采用证书方式，加强了对称密钥传输时的安全性，采用ＩＣ卡作为介质，保证了传输介质的安全。</div><p></p><table class="tb" cellspacing="1" cellpadding="0" width="100%" border="0"><tbody><tr><td class="td1">申请日：</td><td>2006年12月15日</td></tr><tr><td class="td1">公开日：</td><td>2007年06月06日</td></tr><tr><td class="td1">授权公告日：</td><td><br /></td></tr><tr><td class="td1">申请人/专利权人：</td><td>上海格尔软件股份有限公司</td></tr><tr><td class="td1">申请人地址：</td><td>上海市闸北区余姚路288号A座4层</td></tr><tr><td class="td1">发明设计人：</td><td>张翔;杨茂江;李澜涛</td></tr><tr><td class="td1">专利代理机构：</td><td><br /></td></tr><tr><td class="td1">代理人：</td><td>陈学雯</td></tr><tr><td class="td1">专利类型：</td><td>发明专利</td></tr><tr><td class="td1">分类号：</td><td>H04L9/32;H04L9/14;H04L9/12;H04L9/08;H04L9/30</td></tr></tbody></table><img src ="http://www.blogjava.net/zpuser/aggbug/201957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2008-05-21 16:42 <a href="http://www.blogjava.net/zpuser/archive/2008/05/21/201957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发小经验汇总</title><link>http://www.blogjava.net/zpuser/archive/2007/09/17/121209.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Mon, 17 Sep 2007 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/09/17/121209.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/121209.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/09/17/121209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/121209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/121209.html</trackback:ping><description><![CDATA[1.<b>回车转换行</b>：onkeypress="if(event.keyCode == 13){//do script!}<br />2.<b>Tomcat-linux环境图形显示问题：</b>JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"<br /><b>3.Eclipse启动参数</b>：D:\eclipse3.2\eclipse.exe  -data D:\workspace -product com.genuitec.myeclipse.product.ide -vmargs -Duser.language=en -Xms128M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M<br /><b>4.eclipse生成javadoc乱码解决</b>：加入参数“-encoding UTF-8 -charset UTF-8”<br /><b>5.jsp页面禁止缓存代码</b>：<br />    response.setHeader("Pragma","No-cache"); 
<br />    response.setHeader("Cache-Control","no-cache"); 
<br />    response.setDateHeader("Expires", 0); <br /><br /><b>6.linux－mount samba</b><br />   mount -t smbfs -o codepage=cp936 远程路径 本地路径 <br /><br /><b>7.查看端口对应PID</b><br />
lsof -i tcp:PORT-NO, eg, lsof -i tcp:80<br />
lsof -i udp:PORT-NO, eg, lsof -i udp:53<br /><br /><b>8.RH5.0下smbmount的代替方法</b><br />mount -t cifs //ip/f /location/dir ...<br /><br /><img src ="http://www.blogjava.net/zpuser/aggbug/121209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-09-17 11:30 <a href="http://www.blogjava.net/zpuser/archive/2007/09/17/121209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE 禁用/启用外键和触发器</title><link>http://www.blogjava.net/zpuser/archive/2007/08/31/141647.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Fri, 31 Aug 2007 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/08/31/141647.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/141647.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/08/31/141647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/141647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/141647.html</trackback:ping><description><![CDATA[Error convertoring HTML to XHTML: System.ArgumentException: Cannot have ']]&gt;' inside an XML CDATA block.
   at System.Xml.XmlTextWriter.WriteCData(String text)
   at System.Xml.XmlWriter.WriteNode(XmlReader reader, Boolean defattr)
   at FreeTextBoxControls.Support.Formatter.HtmlToXhtml(String input)<img src ="http://www.blogjava.net/zpuser/aggbug/141647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-08-31 10:45 <a href="http://www.blogjava.net/zpuser/archive/2007/08/31/141647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于角色的访问控制RBAC</title><link>http://www.blogjava.net/zpuser/archive/2007/07/04/128062.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Wed, 04 Jul 2007 04:10:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/07/04/128062.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/128062.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/07/04/128062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/128062.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/128062.html</trackback:ping><description><![CDATA[1.概述 <br /><br />　　最近，随着电子商务和电子政务的发展，网络安全已成为研发的重点和热点。信息的完整性、机密性、身份鉴别和不可否认性构成了信息安全的四要
素。非对称加密算法从理论和实践上都可以保证身份的有效性和不可否认性，而要保证软件系统、数据库和信息网络的完整性、和机密性，至今还没有一个行之有效
的解决方案。如公司资源的讹误，信息的未授权泄漏或者失窃，以及被非法篡改都是因为没有保证信息的机密性和完整性而引起的。它们不仅破坏了组织的操作，并
有可能涉及到金融，法律，人员安全，个人隐私和国家机密方面，而造成重大的损失。 <br /><br />　　当今最著名的美国计算机安全标准是可信计算机系统评估标准（TCSEC）。其中一个内容就是要阻止未被授权而浏览机密信息。TCSEC规定了
两个访问控制类型：自主访问控制（DAC）和强制访问控制（MAC）。DAC是指主体可以自主地将访问权限或者访问权限的某个子集授予其他主体。主要是某
些用户（特定客体的用户或具有指定特权的用户）规定别的用户能以怎样的方式访问客体。它主要满足商业和政府的安全需要，以及单级军事应用。但是由于它的控
制是自主的，所以也可能会因为权限的传递而泄漏信息。另外，如果合法用户可以任意运行一个程序来修改他拥有的文件存取控制信息，而操作系统无法区分这种修
改是用户自己的操作，还是恶意程序的非法操作，解决办法就是通过强加一些不可逾越的访问限制。因此，又提出了一种更强有力的访问控制手段，即强制访问控制
（MAC），但是它主要用于多级安全军事应用，很少用于其他方面。现今人们在MAC基础上提出基于角色的访问控制（RBAC），它是一种强制访问控制形
式，但它不是基于多级安全需求。其策略是根据用户在组织内部的角色制定的。用户不能任意的将访问权限传递给其他用户。这是RBAC和DAC之间最基本的不
同。 <br /><br />　　基于角色访问控制（RBAC）模型是目前国际上流行的先进的安全访问控制方法。它通过分配和取消角色来完成用户权限的授予和取消，并且提供角
色分配规则。安全管理人员根据需要定义各种角色，并设置合适的访问权限，而用户根据其责任和资历再被指派为不同的角色。这样，整个访问控制过程就分成两个
部分，即访问权限与角色相关联，角色再与用户关联，从而实现了用户与访问权限的逻辑分离。 <br /><br />　　由于实现了用户与访问权限的逻辑分离，基于角色的策略极大的方便了权限管理。例如，如果一个用户的职位发生变化，只要将用户当前的角色去掉，
加入代表新职务或新任务的角色即可。研究表明，角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多，并且给用户分配角色不需要很多技术，可以由
行政管理人员来执行，而给角色配置权限的工作比较复杂，需要一定的技术，可以由专门的技术人员来承担，但是不给他们给用户分配角色的权限，这与现实中的情
况正好一致。 <br /><br />　　基于角色访问控制可以很好的描述角色层次关系，实现最小特权原则和职责分离原则。 <br /><br />　　2.RBAC的正式定义 <br /><br />　　基于角色访问控制（RBAC）的定义已经在第十五届国际计算机安全会议上以集合的形式给出。定义如下： <br /><br />　　对于每一主体，激活角色是当前使用的主体： <br /><br />　　AR（s：subject）={主体s的激活角色} <br /><br />　　每一主体可被授权扮演一个或更多角色： <br /><br />　　RA（s：subject）={主体s的授权角色} <br /><br />　　每一角色可被授权执行一个或更多事务： <br /><br />　　TA（r：role）={授权给角色r的事务} <br /><br />　　主体可以执行事务。如果主体s可以在当前时间执行事务t，则预测exec（s，t）是真，否则为假： <br /><br />　　exec(s: subject, t: tran) =true, 如果主体s可以执行事务t。 <br /><br />　　执行过程中的三个基本规则： <br /><br />　　2.1 角色分配：仅当主体选择或被赋予一个角色，主体才能执行一个事务。 <br /><br />　　　<img src="http://www.stcore.com/imgfiles/2003.4.11.13.14.38.a.gif" /><br /><br />　　身份证明和鉴别过程（例如登录）不是一个事务。其他用户的所有在系统上的活动都可通过事务处理。因此要求所有激活用户具有某个激活角色。 <br /><br />　　2.2 角色授权：主体的激活角色必须是被授权的：<br />同上面的（1）一起，规则保证用户只能接收他们授予的角色。 <br /><br />　　2.3 事务授权：仅当事务被授权给主体激活角色时，主体才能执行该事务。 <br /><br />　　　<img src="http://www.stcore.com/imgfiles/2003.4.11.13.15.14.c.gif" /><br /><br />　　同（1）和（2）一起，本规则保证用户只可执行授权给他们的事务。注意，因为条件是“仅当（only
if）”，本规则允许事务执行的出现附加限制的可能性。即，规则不保证一个事务只是因为它在TA(AR(s))中就是可执行的，TA(AR(s))是由主
体激活角色执行的潜在事务集合。例如，一个主管角色的实习生可被赋予“主管”角色，但是在运用他/她用户角色时有限制，即对一主管可正常访问的子集，实习
生可能受到限制。 <br /><br />　　上文中，“事务”的定义是变换过程（transformation
procedure）加上一个由变换过程访问的数据项集。因为数据访问已被构建到事务中，所以上面规则的访问控制不要求对用户访问数据目标的权利或变换程
序访问数据项的权利作任何检查。由于在设计阶段将操作和数据绑定为一个事务，所以存在安全性问题，例如此时的在保险查询事务中提出的个人隐私的问题。 <br /><br />　　当规则中“事务”只指变换程序时，需要重新定义“事务”的含义，即不包括对目标的绑定。若要实施方式控制则需要第四个规则，即在模型中用户通
过事务程序访问目标。例如，利用事务（重新定义为变换程序），第四个规则可被定义为对象访问函数access(r, I, o, x)， <br /><br />　　<img src="http://www.stcore.com/imgfiles/2003.4.11.13.15.24.d.gif" /><br /><br />　　它表明了是否允许角色r的主体利用事务t以x的方式来访问对象o，其中x是已经缩小的模式的集合。例如读，写，附加。 <br /><br />　　第四项规则可适用于医院配置。一位医生可被提供读/写药方的访问控制，而医院的药剂师可能只具有读的访问权力。（单独调用前三个规则，将事务过程t与t能访问的数据对象绑定在一块，并且只控制对事务的访问）。我们可以使用第四个规则替换，更有益于满足机密性的要求。 <br /><br />　　RBAC的另一个用途是支持完整性。完整性以几种不同的方式定义，但完整性的一个方面是要求数据和程序只能由授权用户以被授权的方式修改。这看起来对于很多真实的系统是一合理的安全目标，同时RBAC应适用于这样的系统。 <br /><br />　　一般来说，决定数据是否只以授权的方式修改的问题与修改事务是同样复杂的。由于这个原因，实际的方法是事务直接与另一事务合并。要求系统通过
规则（4）中的访问函数控制事务程序对对象的访问，但是要取得完整性的同时需要极大的系统开销。因此，在RBAC中包含事务对对象的访问控制函数将在一些
应用集中是有用的，但并不是所有的应用。 <br /><br />　　3.最小特权策略 <br /><br />　　最小特权原则对于满足完整性目标是非常重要的。最小特权原则要求用户只具有执行一项工作所必需的权限。要保证最小特权要求验证用户的工作是什
么，要确定执行该项工作所要求的权限最小集合，并限制用户的权限域。若拒绝了不是主体职责的事务，则那些被拒绝的权限就不能绕过阻止安全性策略。尽管最小
特权包含当前存在于TCSEC的内容当中，但仍限制系统管理员的权限。通过使用RBAC，很容易满足一般系统的用户执行最小权限。 <br /><br />　　4.职责分离 <br /><br />　　RBAC机制可被系统管理员用于执行职责分离的策略。职责分离对于反欺诈行为是非常有效的。它是在真实系统中最重要的想法。 <br /><br />　　职责分离或者是静态的，或者是动态的。符合静态职责分离要求职能由个人角色的分配和事务角色的分配决定的。最难的是动态职责分配，其中符合动态职责分离的职能在系统操作期间决定。动态职责分离目的是允许操作更灵活。 <br /><br />　　根据角色分配访问权利在定义职责分离上也是有帮助的，它由系统执行。 <br /><br />　　5.结论 <br /><br />　　虽然商业和政府组织中很多终端用户能够访问信息，但他们都不“拥有”信息。而这些组织机构恰恰是实际系统对象的“拥有者”，并且自主访问控制是不可能适合的。基于角色访问控制（RBAC）是一个非自主访问控制机制，它允许促进组织具体安全策略的中央管理。<br />访问控制决策通常基于角色，个人用户采取的角色作为组织的组成。一个角色规定了一个事务集合，即用户或用户集合可在组织内执行。RBAC提供命名和描述个人和权利之间的关系的方法，提供很多商业和政府组织需要的安全处理方法。 <br /><br />　　本文提到的基于角色访问控制（RBAC）的定义，已经在第十五届国际计算机安全会议上以集合的形式给出。本文的目的是让更多热爱网络安全的朋友了解RBAC，使这一新型的访问控制方案得到更多的应用。 <br /><br /><img src ="http://www.blogjava.net/zpuser/aggbug/128062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-07-04 12:10 <a href="http://www.blogjava.net/zpuser/archive/2007/07/04/128062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NFC</title><link>http://www.blogjava.net/zpuser/archive/2007/06/28/126942.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Thu, 28 Jun 2007 15:31:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/06/28/126942.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/126942.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/06/28/126942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/126942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/126942.html</trackback:ping><description><![CDATA[
		<div>NFC(Near Field Communication, 近距离通讯技术)是脱胎于无线设备间的一种“非接触式射频识别”(RFID)及互联技术，为所有消费性电子产品提供了一个极为便利的通讯方式。</div>
		<div> </div>
		<div>
				<b>1</b>
				<b>．技术优势</b>
		</div>
		<div>NFC在单一芯片上结合了感应式读卡器，感应式卡片和点对点的功能。在数厘米（通常是15厘米以内）距离之间于13.56MHz频率范围内运
作，通过射频信号自动识别目标对象并获取相关数据，识别工作无须人工干预，任意两个设备（如移动电话、蓝牙设备、ＷｉＦｉ设备）接近而不需要线缆接插，就
可以实现相互间的通信，可以满足任何两个无线设备间的信息交换、内容访问、服务交换。此外，拥有 NFC
功能的消费电子装置可以轻易地交换或储存个人资料，其中包括各种讯息、照片、MP3等。为消费者实现使用简便、免安装设定、现场立即联机、智能型门控等功
能，完全符合现代消费者的需求。</div>
		<div> </div>
		<div>
				<b>2</b>
				<b>．应用类型</b>
		</div>
		<div>NFC 应用可区分为四个基本类型：</div>
		<div>
				<b>Touch and Go</b>
		</div>
		<div>这类应用就像门禁管制或车票及门票等，使用者只需携带储存着票证或门控代码的装置靠近读取装置即可，它还可做为简易的数据撷取应用，例如从海报上的智能型标签直接读取网址。 </div>
		<div> </div>
		<div>
				<b>Touch and Confirm</b>
		</div>
		<div>这类应用主要涵盖行动付费机制，通常使用者必须输入密码，以确认交易行为，有时则只要直接进行交易即可。 </div>
		<div> </div>
		<div>
				<b>Touch and Connect</b>
		</div>
		<div>将两个内建 NFC 的装置相连接，以进行点对点数据传输，例如下载音乐、交换影像与同步处理通讯簿等。 </div>
		<div> </div>
		<div>
				<b>Touch and Explore</b>
		</div>
		<div>NFC 装置所提供的功能极为丰富，消费者可以自行探索，找出 NFC 装置潜在的功能与服务。 </div>
		<div> </div>
		<div>全球消费电子巨头索尼和飞利浦公司、联合全球最大的手机厂商诺基亚，制定了该无线技术的标准，3家公司在2004年年初已经开始把NFC技术集
成到移动电话、数码相机、小型数码摄像机、电视机和汽车导航系统等设备中，目前已经在ISO 18092和ISO
21481、ECMA(340,352和356)、ETSI TS 102 190内进行标准化。另外，NFC同时兼容于以ISO
14443A为基础的感应式智能卡基础架构，如飞利浦的MIFARE技术，索尼(Sony)的FeliCa卡。</div>
		<div> </div>
		<div>
				<b>3</b>
				<b>．发展前景</b>
		</div>
		<div>ＮＦＣ具有成本低廉、方便易用和更富直观性等特点，这让它在某些领域显得更具潜力——ＮＦＣ通过一个芯片、一根天线和一些软件的组合，能够实现
各种设备在几厘米范围内的通信，而费用仅为２～３欧元。据ＡＢＩ
Ｒｅｓｅａｒｃｈ有关ＮＦＣ有最新研究，ＮＦＣ市场可能发迹于移动手持设备。ＡＢＩ估计，到２００５年以后，市场会出现采用ＮＦＣ芯片的智能手机和增强型
手持设备。到２００９年，这种手持设备将占一半以上的市场。如果ＮＦＣ技术能得到普及，它将在很大程度上改变人们使用许多电子设备的方式，甚至改变使用信
用卡、钥匙和现金的方式。</div>
		<div> </div>
		<div>NFC作为一种新兴的技术，大致总结了蓝牙技术协同工作能力差的弊病。不过，它的目标并非是完全取代蓝牙、Wi-Fi等其他无线技术，而是在不
同的场合、不同的领域起到相互补充的作用。因为NFC的数据传输速率较低，仅为212Kbps，不适合诸如音视频流等需要较高带宽的应用。 </div>
		<div> </div>
		<div>需要密切关注的是，中国政府正在制定自己的RFID标准，而飞利浦的NFC技术是否完全兼容并得到中国政府的认可对消费者相当重要。中国国家标
准化管理委员会成立了国家标准工作组，负责起草、制定中国有关RFID的国家标准，据称这样将使中国获得相关的自主知识产权，又能将RFID发展纳入标准
化、规范化的轨道。整个认证过程很可能需要飞利浦等公司公开一些关键的技术，这可能成为NFC在中国推广应用的绊脚石。 </div>
<img src ="http://www.blogjava.net/zpuser/aggbug/126942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-06-28 23:31 <a href="http://www.blogjava.net/zpuser/archive/2007/06/28/126942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下CVS服务器简单解决方案</title><link>http://www.blogjava.net/zpuser/archive/2007/06/12/123678.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Tue, 12 Jun 2007 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/06/12/123678.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/123678.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/06/12/123678.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/123678.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/123678.html</trackback:ping><description><![CDATA[
		<br />
		<b>1、安装配置</b>
		<br />RH linux AS 4下默认安装有CVS服务器。<br /><br /><font size="2"><b>建立CVS组和用户</b></font><br /><font size="2"># groupadd cvs<br /><br />创建默认的管理账户<br /># useradd -g cvs -G cvsroot<br /># passwd cvsroot<br /><br />创建普通操作用户<br /># useradd -g cvs -s sbin/nologin -M cvsuser<br /># passwd cvsuser<br /><br /><br /><b>建立仓库</b><br /># cd /usr<br /># mkdir cvsroot<br /># chown -R cvsroot:cvs /usr/cvsro<br /><br />加入:export CVSROOT=/usr/cvsroot到/etc/profile<br /><br /><b>配置自动启动</b><br />在 /etc/xinetd.d 目录下创建一个文件，随便命名，比如 cvs
</font><p><font size="2">vi /etc/xinetd.d/cvs</font></p><p><font size="2">在其中添上</font></p><p><font size="2">service cvspserver</font></p><p><font size="2">{</font></p><p><font size="2">socket_type = stream</font></p><p><font size="2">wait = no</font></p><p><font size="2">user = root</font></p><p><font size="2">env = HOME=</font></p><p><font size="2">server = /usr/bin/cvs</font></p><p><font size="2">server-tags = --allow-root=/home/cvsroot pserver</font></p><p><font size="2">}</font></p><font size="2"><b>重启 xinetd</b></font><font size="2"><br />/etc/init.d/xinetd restart</font><br /><br /><font size="2"><b>初始化和加入仓库</b><br />cvs init /usr/cvsroot</font><font size="2"><br />这样CVS就可以用了</font><br /><p><font size="2">添加仓库: 进入到你的源码目录</font></p><p><font size="2">cd /your/sources/path</font></p><p><font size="2">然后执行</font></p><p><font size="2">cvs export SOURCE_DIR_NAME Author Version</font></p><p><font size="2">其中的SOURCE_DIR_NAME 就是你的工程在 CVSROOT 目录中保存的目录名, Author 为工程作者， Version 为你的工程发行版本号，必须以字母开头</font></p><img src ="http://www.blogjava.net/zpuser/aggbug/123678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-06-12 18:02 <a href="http://www.blogjava.net/zpuser/archive/2007/06/12/123678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache与Tomcat平台全面解决方案</title><link>http://www.blogjava.net/zpuser/archive/2007/04/29/114555.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Sun, 29 Apr 2007 05:39:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/04/29/114555.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/114555.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/04/29/114555.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/114555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/114555.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: WEB														服务器解决方案																																																						Apache+Tomcat																																																								 ...&nbsp;&nbsp;<a href='http://www.blogjava.net/zpuser/archive/2007/04/29/114555.html'>阅读全文</a><img src ="http://www.blogjava.net/zpuser/aggbug/114555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-04-29 13:39 <a href="http://www.blogjava.net/zpuser/archive/2007/04/29/114555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache安装配置与优化</title><link>http://www.blogjava.net/zpuser/archive/2007/04/29/114548.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Sun, 29 Apr 2007 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/04/29/114548.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/114548.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/04/29/114548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/114548.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/114548.html</trackback:ping><description><![CDATA[
		<span lang="EN-US">本文</span>针对apache  web服务器的安装配置收集有效的一些经验和方法，用于交流。<span style="font-family: 宋体;"></span><h3 style="margin-left: 36pt; text-indent: -36pt;"><span style="" lang="EN-US"><span style="">1.</span></span><!--[endif]--><span lang="EN-US">Apache</span><span style="font-family: 宋体;">安装配置</span></h3><p class="MsoNormal"><span lang="EN-US">Apache</span><span style="font-family: 宋体;">的安装，考虑只用于</span><span lang="EN-US">Tomcat</span><span style="font-family: 宋体;">的前段代理，处理图片和静态文件的请求，并把动态请求转发到</span><span lang="EN-US">tomcat</span><span style="font-family: 宋体;">服务处理。本文使用编译安装方式，把跟需求无关的模块关闭，只使用最小的模块编译，提高软件性能。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">配置编译命令请参考：</span></p><p class="MsoNormal"><span lang="EN-US"><a href="http://www.uplinux.com/download/doc/apache/ApacheManual/install.html#configure">http://www.uplinux.com/download/doc/apache/ApacheManual/install.html#configure</a></span></p><p class="MsoNormal"><span style="font-family: 宋体;">编译参数说明：</span></p><p class="MsoNormal"><span style="font-family: 宋体;">编译和包含是两个不同的概念。编译是指这个模块被编译了，要想使用它，只用简单的修改</span><span lang="EN-US">httpd.conf</span><span style="font-family: 宋体;">加上</span><span lang="EN-US">LoadModule xxx_module<span style=""> 
</span>libexec/mod_xxx.so </span><span style="font-family: 宋体;">明确指出。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">用以前命令可以查看缺省时已编译和包含进去的模块。不用显式的</span><span lang="EN-US">--enable-MODULE[=shared] </span><span style="font-family: 宋体;">和</span><span lang="EN-US">LoadModule </span><span style="font-family: 宋体;">操作。就已经可以使用的。</span></p><ol><li><span lang="EN-US">core.c</span><span style="font-family: 宋体;">：</span><span lang="EN-US">Apache HTTP </span><span style="font-family: 宋体;">服务器提供的核心功能。必须要有的。</span></li><li><span lang="EN-US">mod_access.c</span><span style="font-family: 宋体;">：安全认证大大降低访问速度，建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_auth.c </span><span style="font-family: 宋体;">：安全认证大大降低访问速度，建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_include.c</span><span style="font-family: 宋体;">：</span><span lang="EN-US">server side include</span><span style="font-family: 宋体;">已经过时了，建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_log_config.c</span><span style="font-family: 宋体;">：用于定制</span><span lang="EN-US">log</span><span style="font-family: 宋体;">格式</span><span lang="EN-US">.</span><span style="font-family: 宋体;">最好保留</span><span lang="EN-US">.</span></li><li><span lang="EN-US"><span style=""></span>mod_env.c</span><span style="font-family: 宋体;">：修改传送到</span><span lang="EN-US"> CGI </span><span style="font-family: 宋体;">脚本和</span><span lang="EN-US"> SSI </span><span style="font-family: 宋体;">页面的系统环境（变量）。一般说来，可以不需要。</span></li><li><span lang="EN-US"><span style=""></span>mod_setenvif.c </span><span style="font-family: 宋体;">：用户设置环境变量和认证相关，如果没有使用压缩输出，建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>prefork.c</span><span style="font-family: 宋体;">：</span><span lang="EN-US">Implements a
non-threaded, pre-forking web server</span><span style="font-family: 宋体;">。参考下面的</span><span lang="EN-US">mpm</span><span style="font-family: 宋体;">介绍。</span></li><li><span lang="EN-US"><span style=""></span>http_core.c</span><span style="font-family: 宋体;">：</span><span lang="EN-US">Apache HTTP </span><span style="font-family: 宋体;">服务器提供的核心功能。必须要有的。</span></li><li><span lang="EN-US"><span style=""></span>mod_mime.c</span><span style="font-family: 宋体;">：用于增加文件应用的关联。最好保留。</span></li><li><span lang="EN-US"><span style=""></span>mod_status.c</span><span style="font-family: 宋体;">：</span><span lang="EN-US">Provides information on server activity and performance </span><span style="font-family: 宋体;">。一般说来，可以不需要。</span></li><li><span lang="EN-US"><span style=""></span>mod_autoindex.c</span><span style="font-family: 宋体;">：不需要将没有缺省</span><span lang="EN-US">index</span><span style="font-family: 宋体;">文件的目录下所有文件列出，建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_asis.c</span><span style="font-family: 宋体;">：尽量不使用</span><span lang="EN-US">CGI</span><span style="font-family: 宋体;">：一直是</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">安全问题最多的地方，建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_cgi.c</span><span style="font-family: 宋体;">：尽量不使用</span><span lang="EN-US">CGI</span><span style="font-family: 宋体;">：一直是</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">安全问题最多的地方，建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_negotiation.c </span><span style="font-family: 宋体;">：内容协商，</span><span style="font-family: 宋体;">以根据浏览器提供的设置选择不同媒介类型、语言、字符集和编码的最佳表现，</span><span style="font-family: 宋体;">还有对来自浏览器的不完整内容协商信息作智能处理的能力。一般说来，可以不需要。</span></li><li><span lang="EN-US"><span style=""></span>mod_dir.c</span><span style="font-family: 宋体;">：用于缺省</span><span lang="EN-US">index</span><span style="font-family: 宋体;">文件：</span><span lang="EN-US">index.php</span><span style="font-family: 宋体;">等。我们现在的应用不需要这个。看情况而定。</span></li><li><span lang="EN-US"><span style=""></span>mod_imap.c</span><span style="font-family: 宋体;">：尽量不使用</span><span lang="EN-US">CGI</span><span style="font-family: 宋体;">：一直是</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">安全问题最多的地方，建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_actions.c</span><span style="font-family: 宋体;">：尽量不使用</span><span lang="EN-US">CGI</span><span style="font-family: 宋体;">：一直是</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">安全问题最多的地方，建议</span><span lang="EN-US">disable it </span></li><li><span lang="EN-US"><span style=""></span>mod_userdir.c</span><span style="font-family: 宋体;">：比如：需要在</span><span lang="EN-US">~/username/</span><span style="font-family: 宋体;">下调试</span><span lang="EN-US">php.</span><span style="font-family: 宋体;">可用可不用</span><span lang="EN-US">.</span><span style="font-family: 宋体;">建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_alias.c</span><span style="font-family: 宋体;">：比如：需要将以前的</span><span lang="EN-US">URL</span><span style="font-family: 宋体;">进行转向或者需要使用</span><span lang="EN-US">CGI
script-alias.</span><span style="font-family: 宋体;">建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US"><span style=""></span>mod_so.c </span><span style="font-family: 宋体;">：如果编译中包含有任何动态模块，则</span><span lang="EN-US">mod_so</span><span style="font-family: 宋体;">模块会被自动包含进核心。如果希望核心能够装载</span><span lang="EN-US">DSO</span><span style="font-family: 宋体;">，而不实际编译任何动态模块，需要明确指定</span><span lang="EN-US">--enable-so</span><span style="font-family: 宋体;">。我们的应用使用静态编译，不需要它。建议</span><span lang="EN-US">disable it .</span></li><li><span lang="EN-US">CC="pgcc" CFLAGS="-O2" </span><span style="font-family: 宋体;">：编译器参数优化</span></li><li><span lang="EN-US">--profix</span><span style="font-family: 宋体;">：</span><span lang="EN-US">apache</span><span style="font-family: 宋体;">的安装目录，默认是安装在</span><span lang="EN-US">/usr/local/apache<o:p></o:p></span></li></ol><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">$ cd </span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">tools<br />$ tar –xzvf apache</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">2.0</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">59</span><span style="color: rgb(0, 0, 0);">.tar.gz<br />$ cd httpd2.</span><span style="color: rgb(0, 0, 0);">0.59</span><span style="color: rgb(0, 0, 0);"><br />$ CC</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">pgcc</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> CFLAGS</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(128, 0, 0);">-O2</span><span style="color: rgb(128, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> \<br />.</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">configure </span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">prefix</span><span style="color: rgb(0, 0, 0);">=/</span><span style="color: rgb(0, 0, 0);">usr</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">apache</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">2.0</span><span style="color: rgb(0, 0, 0);">.</span><span style="color: rgb(0, 0, 0);">59</span><span style="color: rgb(0, 0, 0);"> \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">access \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">auth \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">include \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">env \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">status \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">autoindex \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">asis \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">cgi \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">negotiation \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">imap \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">actions \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">userdir \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">disable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">alias \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">enable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">deflate \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">enable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">headers \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">enable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">setenvif \<br /></span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">enable</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">so<br />$ make<br />$ make install</span></div><p class="MsoNormal"><span style="font-family: 宋体;">安装完成后，因为编译关闭了很多默认的功能模块，所以直接使用发布的默认配置是不能启动服务器的，需要作调整。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">设</span><span lang="EN-US">apache</span><span style="font-family: 宋体;">的安装目录为</span><span lang="EN-US">$APACHE_HOME</span></p><p class="MsoNormal"><span style="font-family: 宋体;">备份默认配置文件</span><span lang="EN-US">$APACHE_HOME/conf/httpd.conf</span><span style="font-family: 宋体;">，然后使用</span><span lang="EN-US">highperformance.conf</span><span style="font-family: 宋体;">最为配置文件</span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">$ cd $APACHE_HOME</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">conf</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);"><br />$ mv httpd.conf httpd.conf_bak<br />$ cp highperformance.conf httpd.conf<br />$ ..</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">bin</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">apachectr start</span></div></span></p><p class="MsoNormal"><span style="font-family: 宋体;">如果启动失败，请屏蔽调</span><span lang="EN-US">httpd.conf</span><span style="font-family: 宋体;">中的</span><span lang="EN-US">mod_access</span><span style="font-family: 宋体;">相关命令，如</span><span lang="EN-US">Order</span><span style="font-family: 宋体;">等，关于目录权限的控制在本例中可以使用变通方式解决，使用没有加载目录权限控制功能。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">启动验证，访问</span><span lang="EN-US"><a href="http://$ip/">http://$IP/</a></span><span style="font-family: 宋体;">，如果正常显示页面，表示成功。</span></p><h3 style="margin-left: 36pt; text-indent: -36pt;"><!--[if !supportLists]--><span style="" lang="EN-US"><span style="">2.</span></span><!--[endif]--><span lang="EN-US">PMP</span></h3><p class="MsoNormal"><span lang="EN-US">MPM</span><span style="font-family: 宋体;">（</span><span lang="EN-US">Multi-Processing Modules</span><span style="font-family: 宋体;">，多道处理模块）</span></p><p class="MsoNormal"><span style="font-family: 宋体;">指定</span><span lang="EN-US">MPM</span><span style="font-family: 宋体;">的方法</span><span lang="EN-US"></span></p><p class="MsoNormal"><span lang="EN-US">$ ./configure --help|grep mpm</span></p><p class="MsoNormal"><span style="font-family: 宋体;">显示如下：</span><span lang="EN-US"></span></p><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; color: rgb(255, 102, 0);" lang="EN-US">--with-mpm=MPM
</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; color: rgb(255, 102, 0);" lang="EN-US">Choose
the process model for Apache to use. </span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; color: rgb(255, 102, 0);" lang="EN-US">MPM={beos|worker|prefork|mpmt_os2|
perchild|leader|threadpool}</span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal"><span style="font-family: 宋体;">主要阐述</span><span lang="EN-US">prefork</span><span style="font-family: 宋体;">，如果不用“</span><span lang="EN-US">--with-mpm</span><span style="font-family: 宋体;">”显式指定某种</span><span lang="EN-US">MPM</span><span style="font-family: 宋体;">，</span><span lang="EN-US">prefork</span><span style="font-family: 宋体;">就是</span><span lang="EN-US">Unix</span><span style="font-family: 宋体;">平台上缺省的</span><span lang="EN-US">MPM</span><span style="font-family: 宋体;">，</span><span lang="EN-US">prefork</span><span style="font-family: 宋体;">本身并没有使用到线程，</span><span lang="EN-US">2.0</span><span style="font-family: 宋体;">版使用它是为了与</span><span lang="EN-US">1.3</span><span style="font-family: 宋体;">版保持兼容性；</span><span lang="EN-US">prefork</span><span style="font-family: 宋体;">用单独的子进程来处理不同的请求，进程之间是彼此独立的，这也使其成为最稳定的</span><span lang="EN-US">MPM</span><span style="font-family: 宋体;">之一。</span></p><p class="MsoNormal"><span lang="EN-US">prefork</span><span style="font-family: 宋体;">的工作原理是，控制进程在最初建立“</span><span lang="EN-US">StartServers</span><span style="font-family: 宋体;">”个子进程后，为了满足</span><span lang="EN-US">MinSpareServers</span><span style="font-family: 宋体;">设置的需要创建一个进程，等待一秒钟，继续创建两个，再等待一秒钟，继续创建四个……如此按指数级增加创建的进程数，最多达到每秒</span><span lang="EN-US">32</span><span style="font-family: 宋体;">个，直到满足</span><span lang="EN-US">MinSpareServers</span><span style="font-family: 宋体;">设置的值为止。这就是预派生（</span><span lang="EN-US">prefork</span><span style="font-family: 宋体;">）的由来。这种模式可以不必在请求到来时再产生新的进程，从而减小了系统开销以增加性能。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">下面是</span><span lang="EN-US">prefork</span><span style="font-family: 宋体;">的默认配置段：</span></p><p class="MsoNormal"><span lang="EN-US">&lt;IfModule prefork.c&gt;</span></p><p class="MsoNormal" style="margin-left: 10.5pt;"><span lang="EN-US">StartServers<span style="">         </span>5<span style="">  </span></span></p><p class="MsoNormal" style="margin-left: 10.5pt;"><span lang="EN-US">MinSpareServers<span style="">      </span>5<span style="">  </span></span></p><p class="MsoNormal" style="margin-left: 10.5pt;"><span lang="EN-US">MaxSpareServers<span style="">     </span>10<span style="">  </span></span></p><p class="MsoNormal" style="margin-left: 10.5pt;"><span lang="EN-US">MaxClients<span style="">         </span>150<span style="">  </span></span></p><p class="MsoNormal" style="margin-left: 10.5pt;"><span lang="EN-US">MaxRequestsPerChild<span style="">  </span>0 </span></p><p class="MsoNormal"><span lang="EN-US">&lt;/IfModule&gt;</span></p><p class="MsoNormal"><b style=""><span lang="EN-US">MinSpareServers<o:p></o:p></span></b></p><p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">设置了最小的空闲进程数。</span></p><p class="MsoNormal"><b style=""><span lang="EN-US">MaxSpareServers<o:p></o:p></span></b></p><p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">设置了最大的空闲进程数，如果空闲进程数大于这个值，</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">会自动</span><span lang="EN-US">kill</span><span style="font-family: 宋体;">掉一些多余进程。这个值不要设得过大，但如果设的值比</span><span lang="EN-US">MinSpareServers</span><span style="font-family: 宋体;">小，</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">会自动把其调整为</span><span lang="EN-US">MinSpareServers+1</span><span style="font-family: 宋体;">。如果站点负载较大，可考虑同时加大</span><span lang="EN-US">MinSpareServers</span><span style="font-family: 宋体;">和</span><span lang="EN-US">MaxSpareServers</span><span style="font-family: 宋体;">。</span></p><p class="MsoNormal"><b style=""><span lang="EN-US">MaxClients<o:p></o:p></span></b></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">MaxClients</span><span style="font-family: 宋体;">是这些指令中最为重要的一个，设定的是</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">可以同时处理的请求，是对</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">性能影响最大的参数。其缺省值</span><span lang="EN-US">150</span><span style="font-family: 宋体;">是远远不够的，如果请求总数已达到这个值（可通过</span><span lang="EN-US">ps -ef|grep
http|wc -l</span><span style="font-family: 宋体;">来确认），那么后面的请求就要排队，直到某个已处理请求完毕。这就是系统资源还剩下很多而</span><span lang="EN-US">HTTP</span><span style="font-family: 宋体;">访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值。虽然理论上这个值越大，可以处理的请求就越多，但</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">默认的限制不能大于</span><span lang="EN-US">256</span><span style="font-family: 宋体;">（在</span><span lang="EN-US">2.0</span><span style="font-family: 宋体;">中源于</span><span lang="EN-US">#define DEFAULT_SERVER_LIMIT 256</span><span style="font-family: 宋体;">）。如果把这个值设为大于</span><span lang="EN-US">256</span><span style="font-family: 宋体;">，那么</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">将无法起动。事实上，</span><span lang="EN-US">256</span><span style="font-family: 宋体;">对于负载稍重的站点也是不够的。在</span><span lang="EN-US">Apache 1.3</span><span style="font-family: 宋体;">中，这是个硬限制。如果要加大这个值，必须在“</span><span lang="EN-US">configure</span><span style="font-family: 宋体;">”前手工修改的源代码树下的</span><span lang="EN-US">src/include/httpd.h</span><span style="font-family: 宋体;">中查找</span><span lang="EN-US">256</span><span style="font-family: 宋体;">，就会发现“</span><span lang="EN-US">#define HARD_SERVER_LIMIT <st1:chmetcnv unitname="”" sourcevalue="256" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">256<span style="font-family: 宋体;" lang="EN-US"><span lang="EN-US">”</span></span></st1:chmetcnv><span style="font-family: 宋体;" lang="EN-US">这行。把</span>256</span><span style="font-family: 宋体;">改为要增大的值（如</span><span lang="EN-US">4000</span><span style="font-family: 宋体;">），然后重新编译</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">即可。在</span><span lang="EN-US">Apache 2.0</span><span style="font-family: 宋体;">中新加入了</span><span lang="EN-US">ServerLimit</span><span style="font-family: 宋体;">指令，使得无须重编译</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">就可以加大</span><span lang="EN-US">MaxClients</span><span style="font-family: 宋体;">。</span><span lang="EN-US">ServerLimit</span><span style="font-family: 宋体;">使用也是单独添加一行在这就可以了。如果</span><span lang="EN-US">ServerLimit</span><span style="font-family: 宋体;">的值再这定义超过了</span><span lang="EN-US">20000</span><span style="font-family: 宋体;">，就要修改</span><span lang="EN-US">server/mpm/prefork/prefork.c<span style="">  </span>#define MAX_SERVER_LIMIT 20000</span><span style="font-family: 宋体;">。将</span><span lang="EN-US">20000</span><span style="font-family: 宋体;">改成更大的值。</span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">MaxRequestsPerChild<o:p></o:p></span></b></p><p class="MsoNormal" style="text-indent: 18pt;"><span style="font-family: 宋体;">设置的是每个子进程可处理的请求数。每个子进程在处理了“</span><span lang="EN-US">MaxRequestsPerChild</span><span style="font-family: 宋体;">”个请求后将自动销毁。</span><span lang="EN-US">0</span><span style="font-family: 宋体;">意味着无限，即子进程永不销毁。虽然缺省设为</span><span lang="EN-US">0</span><span style="font-family: 宋体;">可以使每个子进程处理更多的请求，但如果设成非零值也有两点重要的好处：可防止意外的内存泄漏；在服务器负载下降的时侯会自动减少子进程数。</span></p><p class="MsoNormal" style="text-indent: 18pt;"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal" style="text-indent: 18pt;"><span lang="EN-US">Apache+jk2</span><span style="font-family: 宋体;">的每个进程的的大小是</span><st1:chmetcnv unitname="m" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on"><span lang="EN-US">2M</span></st1:chmetcnv><span style="font-family: 宋体;">，本系统预计分配给</span><span lang="EN-US">apache</span><span style="font-family: 宋体;">的内存为</span><st1:chmetcnv unitname="m" sourcevalue="400" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on"><span lang="EN-US">400M</span></st1:chmetcnv><span style="font-family: 宋体;">，那么根据公式：</span></p><p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US">apache_max_process_with_good_perfermance
&lt; (<st1:chmetcnv unitname="m" sourcevalue="400" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">400M</st1:chmetcnv> / <st1:chmetcnv unitname="m" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on">2m</st1:chmetcnv>) * 2 = 400<br />
apache_max_process </span><span style="font-family: 宋体;">＝</span><span lang="EN-US">400 * 1.5 = 700</span></p><p class="MsoNormal"><span style="font-family: 宋体;">即最佳性能设置为</span><span lang="EN-US">:400</span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span style="font-family: 宋体;">按照上面的分析，本系统的的</span><span lang="EN-US">prefork.c</span><span style="font-family: 宋体;">配置为：</span></p><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">IfModule prefork.c</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /><br />ServerLimit      </span><span style="color: rgb(0, 0, 0);">400</span><span style="color: rgb(0, 0, 0);"><br /><br />MaxClients       </span><span style="color: rgb(0, 0, 0);">400</span><span style="color: rgb(0, 0, 0);"><br /><br />StartServers     </span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);"><br /><br />MinSpareServers  </span><span style="color: rgb(0, 0, 0);">5</span><span style="color: rgb(0, 0, 0);"><br /><br />MaxSpareServers </span><span style="color: rgb(0, 0, 0);">10</span><span style="color: rgb(0, 0, 0);"><br /><br /></span><span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">IfModule</span><span style="color: rgb(0, 0, 0);">&gt;</span></div><h3 style="margin-left: 36pt; text-indent: -36pt;"><!--[if !supportLists]--><span style="" lang="EN-US"><span style="">3.</span></span><!--[endif]--><span lang="EN-US">gzip</span><span style="font-family: 宋体;">压缩输出</span></h3><p class="MsoNormal"><span style="font-family: 宋体;">通过加入</span><span lang="EN-US">mode_deflate</span><span style="font-family: 宋体;">模块对服务器输出压缩传输，可以减小输出压力，节约带宽。</span></p><p class="MsoNormal"><span style="font-family: 宋体; color: rgb(255, 102, 0);">可以减少</span><span style="color: rgb(255, 102, 0);" lang="EN-US">40%</span><span style="font-family: 宋体; color: rgb(255, 102, 0);">左右的流量，减少机器用于传输的负载</span><span style="color: rgb(255, 102, 0);" lang="EN-US">.<o:p></o:p></span></p><p class="MsoNormal"><span style="font-family: 宋体;">压缩输出的配置需要以下三个模块功能支持</span></p><p class="MsoNormal"><span lang="EN-US">mod_setenvif.c</span></p><p class="MsoNormal"><span lang="EN-US">mod_deflate </span></p><p class="MsoNormal"><span lang="EN-US">mod_headers</span></p><p class="MsoNormal"><span style="font-family: 宋体;">具体说明请参考：</span><span lang="EN-US"><a href="http://www.uplinux.com/download/doc/apache/ApacheManual/mod/">http://www.uplinux.com/download/doc/apache/ApacheManual/mod/</a></span></p><p class="MsoNormal"><b style=""><span style="font-family: 宋体;">配置</span><span lang="EN-US"><o:p></o:p></span></b></p><p class="MsoNormal"><span style="font-family: 宋体;">参考：</span><span lang="EN-US"><a href="http://www.uplinux.com/download/doc/apache/ApacheManual/mod/mod_deflate.html">http://www.uplinux.com/download/doc/apache/ApacheManual/mod/mod_deflate.html</a></span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css<br /><br /># Compress everything except images<br /><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Location </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /><br /># Insert filter<br /><br />SetOutputFilter DEFLATE<br /><br /># Netscape 4.x has some problems<img src="http://www.blogjava.net/images/dot.gif" /><br /><br />BrowserMatch ^Mozilla/4 gzip-only-text/html<br /><br /># Netscape 4.06-4.08 have some more problems<br /><br />BrowserMatch ^Mozilla/4\.0[678] no-gzip<br /><br /># MSIE masquerades as Netscape, but it is fine<br /><br />BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br /><br /># Don't compress images<br /><br />SetEnvIfNoCase Request_URI \<br /><br />\.(?:gif|jpe?g|png)$ no-gzip dont-vary<br /><br /># Make sure proxies don't deliver the wrong content<br /><br />Header append Vary User-Agent env=!dont-vary<br /><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Location</span><span style="color: rgb(0, 0, 255);">&gt;</span></div></span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><img src ="http://www.blogjava.net/zpuser/aggbug/114548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-04-29 13:19 <a href="http://www.blogjava.net/zpuser/archive/2007/04/29/114548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOMCAT-5.5.X优化配置</title><link>http://www.blogjava.net/zpuser/archive/2007/04/29/114543.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Sun, 29 Apr 2007 05:08:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/04/29/114543.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/114543.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/04/29/114543.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/114543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/114543.html</trackback:ping><description><![CDATA[本文主要收集关于TOMCAT的优化配置设置。<br /><br /><h3 style="margin-left: 36pt; text-indent: -36pt;"><!--[if !supportLists]--><span style="" lang="EN-US"><span style="">1.</span></span><!--[endif]--><span style="font-family: 宋体;">精简</span><span lang="EN-US">Tomcat</span><span style="font-family: 宋体;">和配置文件</span></h3><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span lang="EN-US">1</span><span style="font-family: 宋体;">．删除不需要的管理应用和帮助应用，提高</span><span lang="EN-US">tomcat</span><span style="font-family: 宋体;">安全性。</span></p><p class="MsoNormal"><span lang="EN-US"># </span><span style="font-family: 宋体;">删除</span><span lang="EN-US">webapps</span><span style="font-family: 宋体;">下所有文件</span></p><p class="MsoNormal"><span lang="EN-US"># rm –fr $CATALINA_HOME/webapps/*</span></p><p class="MsoNormal"><span lang="EN-US"># </span><span style="font-family: 宋体;">删除</span><span lang="EN-US">server/wenapps</span><span style="font-family: 宋体;">下所有文件</span></p><p class="MsoNormal"><span lang="EN-US"># rm –fr $CATALINA_HOME/server/webapps/*</span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span lang="EN-US">2</span><span style="font-family: 宋体;">．精简</span><span lang="EN-US">sever.xml</span><span style="font-family: 宋体;">配置文件</span></p><p class="MsoNormal"><span style="font-family: 宋体;">使用</span><span lang="EN-US">tomcat</span><span style="font-family: 宋体;">发布版本中的最小配置文件，提高性能，如果有功能上的需求，在逐个的加入功能配置。</span></p><p class="MsoNormal"><span lang="EN-US"># </span><span style="font-family: 宋体;">备份原来的</span><span lang="EN-US">server.xml</span><span style="font-family: 宋体;">为</span><span lang="EN-US">server.xml_bak</span></p><p class="MsoNormal"><span lang="EN-US"># mv server.xml server.xml_bak</span></p><p class="MsoNormal"><span lang="EN-US"># </span><span style="font-family: 宋体;">复制</span><span lang="EN-US">server-minimal.xml</span><span style="font-family: 宋体;">为</span><span lang="EN-US">server.xml</span></p><p class="MsoNormal"><span lang="EN-US"># cp server-minimal.xml server.xml</span></p><h3 style="margin-left: 36pt; text-indent: -36pt;"><!--[if !supportLists]--><span style="" lang="EN-US"><span style="">2.</span></span><!--[endif]--><span style="font-family: 宋体;">连接器优化</span></h3><p class="MsoNormal"><span style="font-family: 宋体;">在</span><span lang="EN-US">$CATALINA_HOME/conf/server.xml</span><span style="font-family: 宋体;">配置文件中的</span><span lang="EN-US">Connetctor</span><span style="font-family: 宋体;">节点，和连接数相关的参数配置和优化。</span><span lang="EN-US"><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">maxThreads<o:p></o:p></span></b></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Tomcat</span><span style="font-family: 宋体;">使用线程来处理接收的每个请求。这个值表示</span><span lang="EN-US">Tomcat</span><span style="font-family: 宋体;">可创建的最大的线程数。默认值</span><span lang="EN-US">200</span><span style="font-family: 宋体;">。</span><span lang="EN-US"> </span><span style="font-family: 宋体;">可以根据机器的时期性能和内存大小调整，一般可以在</span><span lang="EN-US">400-500</span><span style="font-family: 宋体;">。最大可以在</span><span lang="EN-US">800</span><span style="font-family: 宋体;">左右。</span><span lang="EN-US"><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">acceptCount<br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></b></p><p class="MsoNormal"><span style="font-family: 宋体;">　　指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理队列中的请求数，超过这个数的请求将不予处理。默认值</span><span lang="EN-US">10</span><span style="font-family: 宋体;">。</span><span lang="EN-US"> <br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">minSpareThreads<br /></span></b><span lang="EN-US">Tomcat</span><span style="font-family: 宋体;">初始化时创建的线程数。默认值</span><span lang="EN-US">4</span><span style="font-family: 宋体;">。</span><span lang="EN-US"> </span></p><p class="MsoNormal"><b style=""><span lang="EN-US"><o:p> </o:p></span></b></p><p class="MsoNormal"><b style=""><span lang="EN-US">maxSpareThreads<br /></span></b><span style="font-family: 宋体;">一旦创建的线程超过这个值，</span><span lang="EN-US">Tomcat</span><span style="font-family: 宋体;">就会关闭不再需要的</span><span lang="EN-US">socket</span><span style="font-family: 宋体;">线程。默认值</span><span lang="EN-US">50</span><span style="font-family: 宋体;">。</span><span lang="EN-US"> <br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">enableLookups</span></b><span lang="EN-US"> </span></p><p class="MsoNormal"><span style="font-family: 宋体;">是否反查域名，默认值为</span><span lang="EN-US">true</span><span style="font-family: 宋体;">。为了提高处理能力，应设置为</span><span lang="EN-US">false <br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">connnectionTimeout<o:p></o:p></span></b></p><p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">网络连接超时，默认值</span><span lang="EN-US">20000</span><span style="font-family: 宋体;">，单位：毫秒。设置为</span><span lang="EN-US">0</span><span style="font-family: 宋体;">表示永不超时，这样设置有隐患的。通常可设置为</span><span lang="EN-US">30000</span><span style="font-family: 宋体;">毫秒。</span><span lang="EN-US">(</span><span style="font-family: 宋体;">本系统由于与后台系统接口超时时间较长，使用设置为</span><span lang="EN-US">60000) <br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><b style=""><o:p></o:p></b></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">maxKeepAliveRequests <o:p></o:p></span></b></p><p class="MsoNormal"><span style="font-family: 宋体;">保持请求数量，默认值</span><span lang="EN-US">100</span><span style="font-family: 宋体;">。</span><span lang="EN-US"> <br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">bufferSize<br /></span></b><span style="font-family: 宋体;">输入流缓冲大小，默认值</span><span lang="EN-US">2048 bytes</span><span style="font-family: 宋体;">。</span><span lang="EN-US"> </span></p><p class="MsoNormal"><span lang="EN-US"><br /><b style="">compression</b></span></p><p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">压缩传输，取值</span><span lang="EN-US">on/off/force</span><span style="font-family: 宋体;">，默认值</span><span lang="EN-US">off</span><span style="font-family: 宋体;">。</span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> </span><span style="font-family: 宋体;">其中和最大连接数相关的参数为</span><span lang="EN-US">maxThreads</span><span style="font-family: 宋体;">和</span><span lang="EN-US">acceptCount</span><span style="font-family: 宋体;">。如果要加大并发连接数，应同时加大这两个参数。</span><span lang="EN-US">web server</span><span style="font-family: 宋体;">允许的最大连接数还受制于操作系统的内核参数设置，通常</span><span lang="EN-US">Windows</span><span style="font-family: 宋体;">是</span><span lang="EN-US">2000</span><span style="font-family: 宋体;">个左右，</span><span lang="EN-US">Linux</span><span style="font-family: 宋体;">是</span><span lang="EN-US">1000</span><span style="font-family: 宋体;">个左右。</span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><b style=""><span lang="EN-US">Tomcat</span></b><b style=""><span style="font-family: 宋体;">中如何禁止和允许列目录下的文件</span><span lang="EN-US"> <br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></b></p><p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">在</span><span lang="EN-US">$CATALINA_HOME/conf/web.xml</span><span style="font-family: 宋体;">中，把</span><span lang="EN-US">listings</span><span style="font-family: 宋体;">参数设置成</span><span lang="EN-US">false</span><span style="font-family: 宋体;">即可，如下：</span><span lang="EN-US"> </span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><br /></span><span style="font-family: 宋体;">　　　　</span><span lang="EN-US">listings<br /></span><span style="font-family: 宋体;">　　　　</span><span lang="EN-US">false</span></p><p class="MsoNormal"><span style="font-family: 宋体;">　　　　</span><span lang="EN-US">... </span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><b style=""><span style="font-family: 宋体;">具体操作</span><span lang="EN-US"><o:p></o:p></span></b></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span lang="EN-US"># vi $CATALINA_HOME/conf/server.xml</span></p><p class="MsoNormal"><span style="font-family: 宋体;">修改用于</span><span lang="EN-US">AJP</span><span style="font-family: 宋体;">的连接：</span></p><p class="MsoNormal"><span lang="EN-US">&lt;Connector port="8009"
protocol="AJP/1.3" /&gt;</span></p><p class="MsoNormal"><span style="font-family: 宋体;">为：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">   
</span>&lt;Connector port="8009"</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">               </span>maxTreads="500"
minSpareThreads="10" maxSpareThreads="50"</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">               </span>acceptCount="50"
connectionTimeout="60000"</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">               </span>enableLookups="false"
redirectPort="8443" protocol="AJP/1.3" /&gt;</span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span style="font-family: 宋体;">修改通用连接：</span></p><p class="MsoNormal"><span lang="EN-US">&lt;Connector port="8080" /&gt;</span></p><p class="MsoNormal"><span style="font-family: 宋体;">为：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">   
</span>&lt;Connector port="8080"</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">               </span>maxTreads="500"
minSpareThreads="10" maxSpareThreads="50"</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">               </span>acceptCount="50"
connectionTimeout="60000"</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">               </span>enableLookups="false"
redirectPort="8443" protocol="AJP/1.3" </span></p><p class="MsoNormal"><span lang="EN-US"><span style="">          
</span>compression="on" </span></p><p class="MsoNormal"><span lang="EN-US"><span style="">          
</span>compressionMinSize="2048" </span></p><p class="MsoNormal"><span lang="EN-US"><span style="">          
</span>noCompressionUserAgents="gozilla, traviata" </span></p><p class="MsoNormal"><span lang="EN-US"><span style="">          
</span>compressableMimeType="text/html,text/xml"/&gt;</span></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span style="font-family: 宋体;">修改主机和应用配置：</span></p><p class="MsoNormal"><span lang="EN-US">&lt;Host name="localhost"
appBase="webapps" /&gt;</span></p><p class="MsoNormal"><span style="font-family: 宋体;">为：</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">    
</span>&lt;Host name="localhost" appBase=" "</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">      
</span>unpackWARs="true" autoDeploy="true"</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">      
</span>xmlValidation="false" xmlNamespaceAware="false"&gt;</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">       
</span>&lt;Context path="" docBase="/www/xxxx/site/web"
reloadable="true" debug="0"/&gt;</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">     
</span>&lt;/Host&gt;</span></p><h3 style="margin-left: 36pt; text-indent: -36pt;"><!--[if !supportLists]--><span style="" lang="EN-US"><span style="">3.</span></span><!--[endif]--><span style="font-family: 宋体;">优化</span><span lang="EN-US">JDK</span></h3><p class="MsoNormal"><span lang="EN-US">Tomcat</span><span style="font-family: 宋体;">默认可以使用的内存为</span><span lang="EN-US">128MB,Windows</span><span style="font-family: 宋体;">下</span><span lang="EN-US">,</span><span style="font-family: 宋体;">在文件</span><span lang="EN-US">{tomcat_home}/bin/catalina.bat</span><span style="font-family: 宋体;">，</span><span lang="EN-US">Unix</span><span style="font-family: 宋体;">下，在文件</span><span lang="EN-US">$CATALINA_HOME/bin/catalina.sh</span><span style="font-family: 宋体;">的前面，增加如下设置：</span><span lang="EN-US"> </span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">JAVA_OPTS='$JAVA_OPTS
-Xms[</span><span style="font-family: 宋体;">初始化内存大小</span><span lang="EN-US">] -Xmx[</span><span style="font-family: 宋体;">可以使用的最大内存</span><span lang="EN-US">] <br /></span><span style="font-family: 宋体;">或</span></p><p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">设置环境变量：</span><span lang="EN-US">export JAVA_OPTS=”$JAVA_OPTS -Xms[</span><span style="font-family: 宋体;">初始化内存大小</span><span lang="EN-US">] -Xmx[</span><span style="font-family: 宋体;">可以使用的最大内存</span><span lang="EN-US">]”</span></p><p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">一般说来，你应该使用物理内存的</span><span lang="EN-US"> 80% </span><span style="font-family: 宋体;">作为堆大小。如果本机上有</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">服务器，可以先折算</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">需要的内存，然后修改堆大小。建议设置为</span><span lang="EN-US">70</span><span style="font-family: 宋体;">％；建议设置</span><span lang="EN-US">[[</span><span style="font-family: 宋体;">初始化内存大小</span><span lang="EN-US">]</span><span style="font-family: 宋体;">等于</span><span lang="EN-US">[</span><span style="font-family: 宋体;">可以使用的最大内存</span><span lang="EN-US">]</span><span style="font-family: 宋体;">，这样可以减少平凡分配堆而降低性能。</span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoNormal"><span style="font-family: 宋体;">本例使用加入环境变量的方式：</span></p><p class="MsoNormal"><span lang="EN-US"># vi /etc/profile</span></p><p class="MsoNormal"><span style="font-family: 宋体;">加入：</span><span lang="EN-US">export JAVA_OPTS=”$JAVA_OPTS
-Xms700 –Xmx700</span></p><p class="MsoNormal"><span lang="EN-US"># source /etc/profile</span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><o:p> </o:p></span></p><h3 style="margin-left: 36pt; text-indent: -36pt;"><span style="" lang="EN-US"><span style="">4.</span></span><!--[endif]--><span style="font-family: 宋体;">APR整合</span><span lang="EN-US"></span></h3><p class="MsoNormal"><span style="font-family: 宋体;">请参见：</span><span lang="EN-US"><a target="_blank" title="TOMCAT-5.5.X整合APR" href="/zpuser/archive/2007/04/26/113827.html">TOMCAT-5.5.X</a></span><a href="http://tempuri.org/tempuri.html"><span style="font-family: 宋体;">整合</span><span lang="EN-US">APR</span></a></p><p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p><br /><img src ="http://www.blogjava.net/zpuser/aggbug/114543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-04-29 13:08 <a href="http://www.blogjava.net/zpuser/archive/2007/04/29/114543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>公司XX老网站性能调优</title><link>http://www.blogjava.net/zpuser/archive/2007/04/26/113891.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Thu, 26 Apr 2007 11:41:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/04/26/113891.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/113891.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/04/26/113891.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/113891.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/113891.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: TOC \o &quot;1-3&quot; \h \z \u 																												1.    WEB服务器...  PAGEREF _Toc162410723 \h 3 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F006300310036003200...&nbsp;&nbsp;<a href='http://www.blogjava.net/zpuser/archive/2007/04/26/113891.html'>阅读全文</a><img src ="http://www.blogjava.net/zpuser/aggbug/113891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-04-26 19:41 <a href="http://www.blogjava.net/zpuser/archive/2007/04/26/113891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOMCAT-5.5.X整合APR</title><link>http://www.blogjava.net/zpuser/archive/2007/04/26/113827.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Thu, 26 Apr 2007 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/04/26/113827.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/113827.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/04/26/113827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/113827.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/113827.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="">
				<!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-begin'></span><span
style='mso-spacerun:yes'> </span>TOC \o &quot;1-3&quot; \n \h \z \u <span
style='mso-element:field-separator'></span></span><![endif]-->
				<span lang="EN-US">
						<o:p>
						</o:p>
						<br />
						<span class="MsoHyperlink">
								<span style="">
										<a href="#_Toc165367108">1.<b><span style="color: windowtext; text-transform: uppercase; text-decoration: none;"><span style="">    </span></span></b><span style="font-family: 宋体;" lang="EN-US"><span lang="EN-US">准备</span></span></a>
								</span>
						</span>
						<b>
								<span style="text-transform: uppercase;">
										<o:p>
										</o:p>
								</span>
						</b>
				</span>
		</p>
		<p class="MsoNormal" style="">
				<span class="MsoHyperlink">
						<span style="" lang="EN-US">
								<a href="#_Toc165367109">2.<b><span style="color: windowtext; text-transform: uppercase; text-decoration: none;"><span style="">    </span></span></b><span style="font-family: 宋体;" lang="EN-US"><span lang="EN-US">整合</span></span></a>
						</span>
				</span>
				<b>
						<span style="text-transform: uppercase;" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoToc3" style="">
				<span class="MsoHyperlink">
						<span style="" lang="EN-US">
								<a href="#_Toc165367110">
										<span style="font-family: Arial;">1.1.</span>
										<span style="font-size: 10.5pt; color: windowtext; text-decoration: none;">
												<span style="">     </span>
										</span>
										<span style="font-family: 黑体;" lang="EN-US">
												<span lang="EN-US">安装</span>
										</span>
										<span style="font-family: Arial;">jdk1.5</span>
								</a>
						</span>
				</span>
				<span style="font-size: 10.5pt;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoToc3" style="">
				<span class="MsoHyperlink">
						<span style="" lang="EN-US">
								<a href="#_Toc165367111">
										<span style="font-family: Arial;">1.2.</span>
										<span style="font-size: 10.5pt; color: windowtext; text-decoration: none;">
												<span style="">     </span>
										</span>
										<span style="font-family: 黑体;" lang="EN-US">
												<span lang="EN-US">安装</span>
										</span>
										<span style="font-family: Arial;">apr-1.2.8</span>
								</a>
						</span>
				</span>
				<span style="font-size: 10.5pt;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoToc3" style="">
				<span class="MsoHyperlink">
						<span style="" lang="EN-US">
								<a href="#_Toc165367112">
										<span style="font-family: Arial;">1.3.</span>
										<span style="font-size: 10.5pt; color: windowtext; text-decoration: none;">
												<span style="">     </span>
										</span>
										<span style="font-family: 黑体;" lang="EN-US">
												<span lang="EN-US">安装</span>
										</span>
										<span style="font-family: Arial;">Tomcat-5.5.17</span>
								</a>
						</span>
				</span>
				<span style="font-size: 10.5pt;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoToc3" style="">
				<span class="MsoHyperlink">
						<span style="" lang="EN-US">
								<a href="#_Toc165367113">
										<span style="font-family: Arial;">1.4.</span>
										<span style="font-size: 10.5pt; color: windowtext; text-decoration: none;">
												<span style="">     </span>
										</span>
										<span style="font-family: 黑体;" lang="EN-US">
												<span lang="EN-US">设置</span>
										</span>
										<span style="font-family: Arial;">Tomcat</span>
										<span style="font-family: 黑体;" lang="EN-US">
												<span lang="EN-US">整合</span>
										</span>
										<span style="font-family: Arial;">APR</span>
								</a>
						</span>
				</span>
				<span style="font-size: 10.5pt;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoToc3" style="">
				<span class="MsoHyperlink">
						<span style="" lang="EN-US">
								<a href="#_Toc165367114">
										<span style="font-family: Arial;">1.5.</span>
										<span style="font-size: 10.5pt; color: windowtext; text-decoration: none;">
												<span style="">     </span>
										</span>
										<span style="font-family: 黑体;" lang="EN-US">
												<span lang="EN-US">启动验证安装</span>
										</span>
								</a>
						</span>
				</span>
				<span style="font-size: 10.5pt;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="">
				<span class="MsoHyperlink">
						<span style="" lang="EN-US">
								<a href="#_Toc165367115">3.<b><span style="color: windowtext; text-transform: uppercase; text-decoration: none;"><span style="">    </span></span></b><span style="font-family: 宋体;" lang="EN-US"><span lang="EN-US">参考</span></span></a>
						</span>
				</span>
				<b>
						<span style="text-transform: uppercase;" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<h1 style="margin-left: 18pt; text-indent: -18pt;">
				<a name="_Toc165367108">
				</a>
				<a name="_Toc165367088">
				</a>
				<a name="_Toc165367033">
						<span style="">
								<span style="">
										<!--[if !supportLists]-->
										<span style="" lang="EN-US">
												<span style="">1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"></span></span>
										</span>
										<!--[endif]-->
										<span style="font-family: 宋体;">准备</span>
								</span>
						</span>
				</a>
		</h1>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">操作系统：</span>
				<span lang="EN-US">RedHat
AS4 update1<br />
Tomcat-<st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">5.5.17</st1:chsdate> :http://tomcat.apache.org<br />
arp<st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">1.2.8</st1:chsdate>:http://apr.apache.org/<br />
jdk1.5.x:http://java.sun.com</span>
		</p>
		<h1 style="margin-left: 18pt; text-indent: -18pt;">
				<a name="_Toc165367109">
				</a>
				<a name="_Toc165367089">
				</a>
				<a name="_Toc165367034">
						<span style="">
								<span style="">
										<!--[if !supportLists]-->
										<span style="" lang="EN-US">
												<span style="">2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"></span></span>
										</span>
										<!--[endif]-->
										<span style="font-family: 宋体;">整合</span>
								</span>
						</span>
				</a>
		</h1>
		<h3 style="margin-left: 27pt; text-indent: -27pt;">
				<a name="_Toc165367110">
				</a>
				<a name="_Toc165367090">
				</a>
				<a name="_Toc165367035">
						<span style="">
								<span style="">
										<!--[if !supportLists]-->
										<span class="2Char">
												<span style="" lang="EN-US">
														<span style="">1.1.</span>
												</span>
										</span>
										<!--[endif]-->
										<span class="2Char">
												<span style="font-family: 黑体;">安装</span>
										</span>
								</span>
						</span>
				</a>
				<span style="">
						<span style="">
								<span style="">
										<span class="2Char">
												<span style="" lang="EN-US">jdk1.5</span>
										</span>
								</span>
						</span>
				</span>
				<span class="2Char">
						<span style="" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</h3>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">略</span>
				<span lang="EN-US">
						<br />
				</span>
				<span style="font-family: 宋体;">请安装完成后，设置</span>
				<span lang="EN-US">JAVA_HOME</span>
				<span class="3Char">
						<span style="font-size: 16pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<h3 style="margin-left: 27pt; text-indent: -27pt;">
				<a name="_Toc165367111">
				</a>
				<a name="_Toc165367091">
				</a>
				<a name="_Toc165367036">
						<span style="">
								<span style="">
										<!--[if !supportLists]-->
										<span class="2Char">
												<span style="" lang="EN-US">
														<span style="">1.2.</span>
												</span>
										</span>
										<!--[endif]-->
										<span class="2Char">
												<span style="font-family: 黑体;">安装</span>
										</span>
								</span>
						</span>
				</a>
				<span style="">
						<span style="">
								<span style="">
										<span class="2Char">
												<span style="" lang="EN-US">apr-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">1.2.8</st1:chsdate></span>
										</span>
								</span>
						</span>
				</span>
				<span class="2Char">
						<span style="" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</h3>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">默认安装后，</span>
				<span lang="EN-US">apr</span>
				<span style="font-family: 宋体;">的安装目录为：</span>
				<b>
						<span style="color: red;" lang="EN-US">/usr/local/apr</span>
				</b>
				<span lang="EN-US">
						<br />
						<br />
$ cd /tools<br />
$ wget http://apache.mirrors.tds.net/apr/apr-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">1.2.8</st1:chsdate>.tar.gz<br />
$ tar -xzvf apr-1.2.8.tar.gz<br />
$ cd apr-1.2.8<br />
$ ./configure<br />
$ make <br />
$ make install</span>
				<span class="3Char">
						<span style="font-size: 16pt; font-family: Arial;" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<h3 style="margin-left: 27pt; text-indent: -27pt;">
				<a name="_Toc165367112">
				</a>
				<a name="_Toc165367092">
				</a>
				<a name="_Toc165367037">
						<span style="">
								<span style="">
										<!--[if !supportLists]-->
										<span class="2Char">
												<span style="" lang="EN-US">
														<span style="">1.3.</span>
												</span>
										</span>
										<!--[endif]-->
										<span class="2Char">
												<span style="font-family: 黑体;">安装</span>
										</span>
								</span>
						</span>
				</a>
				<span style="">
						<span style="">
								<span style="">
										<span class="2Char">
												<span style="" lang="EN-US">Tomcat-<st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">5.5.17</st1:chsdate></span>
										</span>
								</span>
						</span>
				</span>
				<span class="2Char">
						<span style="" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</h3>
		<p class="MsoNormal">
				<span lang="EN-US">$ cd /tools<br />
$ wget http://archive.apache.org/dist/tomcat/tomcat-5/v<st1:chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on">5.5.17</st1:chsdate>/bin/apache-tomcat-5.5.17.tar.gz<br />
$ tar -xzvf apache-tomcat-5.5.17.tar.gz<br />
$ mv apache-tomcat-5.5.17 /usr/local/<br /><br />
2.3.</span>
				<span style="font-family: 宋体;">安装</span>
				<span lang="EN-US">APR<br />
tomcat-5.5.x</span>
				<span style="font-family: 宋体;">的</span>
				<span lang="EN-US">apr</span>
				<span style="font-family: 宋体;">组件是和</span>
				<span lang="EN-US">tomcat-5.5.x</span>
				<span style="font-family: 宋体;">一起发布的，默认在</span>
				<span lang="EN-US">$CATALINA_HOME/bin/tomcat-native.tar.gz<br /><br />
$ cd $CATALINA_HOME/bin/<br />
$ tar -xzvf tomcat-native.tar.gz<br />
$ cd tomcat-native-1.1.3/jni/native<br />
$ ./configure --with-apr=<b><span style="color: red;">/usr/local/apr</span></b><br />
$ make<br />
$ make install</span>
				<span class="3Char">
						<span style="font-size: 16pt; font-family: Arial;" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</p>
		<h3 style="margin-left: 27pt; text-indent: -27pt;">
				<a name="_Toc165367113">
				</a>
				<a name="_Toc165367093">
				</a>
				<a name="_Toc165367038">
						<span style="">
								<span style="">
										<!--[if !supportLists]-->
										<span class="2Char">
												<span style="" lang="EN-US">
														<span style="">1.4.</span>
												</span>
										</span>
										<!--[endif]-->
										<span class="2Char">
												<span style="font-family: 黑体;">设置</span>
										</span>
								</span>
						</span>
				</a>
				<span style="">
						<span style="">
								<span style="">
										<span class="2Char">
												<span style="" lang="EN-US">Tomcat</span>
										</span>
								</span>
						</span>
				</span>
				<span style="">
						<span style="">
								<span style="">
										<span class="2Char">
												<span style="font-family: 黑体;">整合</span>
										</span>
								</span>
						</span>
				</span>
				<span style="">
						<span style="">
								<span style="">
										<span class="2Char">
												<span style="" lang="EN-US">APR</span>
										</span>
								</span>
						</span>
				</span>
				<span class="2Char">
						<span style="" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</h3>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">修改</span>
				<span lang="EN-US">tomcat</span>
				<span style="font-family: 宋体;">的启动</span>
				<span lang="EN-US">shell</span>
				<span style="font-family: 宋体;">（</span>
				<span lang="EN-US">catalina.sh</span>
				<span style="font-family: 宋体;">），在该文件中加入启动参数：</span>
				<span lang="EN-US">CATALINA_OPTS="$CATALINA_OPTS
-Djava.library.path=<b><span style="color: red;">/usr/local/apr/lib</span></b>"</span>
				<span style="font-family: 宋体;">。也可以在环境变量中配置</span>
				<span lang="EN-US">:export
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=<b><span style="color: red;">/usr/local/apr/lib</span></b>"<br /><br />
$ export CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=<b><span style="color: red;">/usr/local/apr/lib<o:p></o:p></span></b></span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<h3 style="margin-left: 27pt; text-indent: -27pt;">
				<a name="_Toc165367114">
				</a>
				<a name="_Toc165367094">
				</a>
				<a name="_Toc165367039">
						<span style="">
								<span style="">
										<!--[if !supportLists]-->
										<span class="2Char">
												<span style="" lang="EN-US">
														<span style="">1.5.</span>
												</span>
										</span>
										<!--[endif]-->
										<span class="2Char">
												<span style="font-family: 黑体;">启动验证安装</span>
										</span>
								</span>
						</span>
				</a>
				<span style="">
				</span>
				<span style="">
				</span>
				<span style="">
				</span>
				<span class="2Char">
						<span style="" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</span>
		</h3>
		<p class="MsoNormal">
				<span lang="EN-US">
						<br />
$ cd $CATALINA_HOME/bin<br />
$ ./catalina.sh run<br /><br /></span>
				<span style="font-family: 宋体;">如果看到下面的启动日志，表示成功。</span>
				<span lang="EN-US">
						<br />
2007-4-26 15:34:32 org.apache.coyote.http11.Http11AprProtocol init<br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--></span>
		</p>
		<h1 style="margin-left: 18pt; text-indent: -18pt;">
				<a name="_Toc165367115">
				</a>
				<a name="_Toc165367095">
				</a>
				<a name="_Toc165367040">
						<span style="">
								<span style="">
										<!--[if !supportLists]-->
										<span style="" lang="EN-US">
												<span style="">3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"></span></span>
										</span>
										<!--[endif]-->
										<span style="font-family: 宋体;">参考</span>
								</span>
						</span>
				</a>
		</h1>
		<p class="MsoNormal">
				<span lang="EN-US">tomcat apr</span>
				<span style="font-family: 宋体;">组件官方：</span>
				<span lang="EN-US">http://tomcat.apache.org/tomcat-5.5-doc/apr.html</span>
				<b>
						<span style="font-size: 16pt; font-family: Arial;" lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
<img src ="http://www.blogjava.net/zpuser/aggbug/113827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-04-26 16:16 <a href="http://www.blogjava.net/zpuser/archive/2007/04/26/113827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SIM</title><link>http://www.blogjava.net/zpuser/archive/2007/03/07/102448.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Wed, 07 Mar 2007 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/03/07/102448.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/102448.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/03/07/102448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/102448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/102448.html</trackback:ping><description><![CDATA[移动电话机与SIM卡共同构成移动通信终端设备。无论是GSM系统还是CDMA系统，数字移动电话机用户在“入网”时会得到一张SIM卡。SIM卡 是（Subscriber Identity Model客户识别模块）的缩写 ，也称为智能卡、用户身份识别卡, GSM数字移动电话机必须装上此卡方能使用。<br /><br />SIM卡就是一个在内部包含有大规模集成电路的卡片，卡片内部存储了数字移动电话客户的信息、加密密钥等内容，它可供GSM网络对客户身份进行鉴别，并对客户通话时的语音信息进行加密。SIM卡的使用，完全防止了并机和通话被窃听行为，并且SIM卡的制作是严格按照GSM国际标准和规范来完成的，它使客户的正常通信得到了可靠的保障。现在的数字电话都是必须要安装SIM卡之后才可以使用，如果不安装的话，那么后果相信也就也不用我多说了。在没有安装SIM卡的情况下，我们仅仅只能拨打像119、112这种紧急电话的号码。<br /><p>SIM卡在GSM系统中的应用，使得卡和手机分离，一张SIM卡唯一标识一个客户。一张SIM卡可以插入任何一部GSM手机中使用，而使用手机所产生的通信费用则自动记录在该SIM卡所唯一标识的客户的帐户上.<br /><br />我们在使用手机时，会接触到5种密码 ：SIM卡的PIN、PIN2、PUK、PUK2和手机密码。前四种初始密码都是SIM卡供应商移动、联通提供的，手机密码是手机生产商提供的。它们之间的关系如下：<br /><br />1、PIN码(即PIN1码)就是SIM卡的个人识别密码 ，一般在修改前原始密码是1234，如果不是就不要再试了，打1860/1001咨询。打开开机PIN码，刚每次开机后就要输入PIN码！如果输入三次错误，需要用PUK码 解锁，PUK码 由移动、联通提供，如果输入十次错误会导致SIM卡烧毁，所以有问题不要自己随便猜测密码 ，马上找移动、联通。<br /><br />  2、PIN2码是设定手机计费时使用的，如果输入三次错误需要用 PUK 2码解锁。目前移动、联通都不提供此项功能支持，即使PIN2密码锁死也不会影响手机正常使用。<br /><br />  3、PIN码连续输入10次都是错误的话就会锁卡要求用PUK码 来解开，而PUK码的输入机会只有3次，3次都输错的话，SIM卡将会给永久锁死，即报废了。<br /><br />  4、PUK码，不管你使用的是全球通还是神州行，网络服务商那里都有资料保存，一旦需要输入时，可以致电相应的服务热线来查询，先核对用户资料就行了。这些密码设定及更改都在菜单－其他设定－安全设定中。</p><p><br />   忘记PIN码可以用PUK码来解密，PUK密码一般不向用户提供，但某些SIM卡除外，比如神州行的用户就随卡提供PUK。如果你的SIM卡的PUK没有随卡提供，你可以到当地的网络运营商营业厅要求解锁，一般是免费的。</p><p>SIM外观 <br />在实际使用中有两种功能相同而形式不同的SIM卡：卡片式（俗称大卡）SIM卡，这种形式的SIM卡符合有关IC卡的ISO7816标准，类似IC卡；嵌入式（俗称小卡）SIM卡，其大小只有25mm×15mm，是半永久性地装入到移动台设备中的卡。 <br /></p><p>“大卡”上真正起作用的是它上面的那张“小卡”，而“小卡”上起作用的部分则是卡面上的铜制接口及其内部胶封的卡内逻辑电路。目前国内流行样式是“小卡”，小卡也可以换成“大卡”（需加装一卡托）。“大卡”和“小卡”分别适用于不同类型的GSM移动电话，早期机型如摩托罗拉GC87C、308C等手机用的是“大卡”，而目前新出的机型基本上都使用“小卡”.</p><p>在SIM卡的背面有以五个一排，被排成四排的一组数字，在这组数字最前面的六位数字所代表的是中国的代号，就像从国外打电话到国内都需要先拨打86一样。第七位数字则代表的是接入号码，如果是5的话，那么这张SIM卡的电话号码前三位就是135的，而如果是6的话，则代表其前三位数字为136，其它的也都以此类推。第八位数字代表的是该SIM卡的功能位，一般情况下显示的数字为0。第九和第十位数字代表了该SIM卡所处的省份。至于第十一和第十二位数字则代表的是该SIM卡的年号，而第十三位数字则是SIM卡供应商的代码。从第十四位开始至第十九位数字则代表了该SIM卡的用户识别码。最后一个数字是校验位。<br /></p><p>什么是Ki、IMEI、IMSI <br />国际移动设备识别码（IMEI：International Mobile Equipment Identification Number）是区别移动设备的标志，储存在移动设备中，可用于监控被窃或无效的移动设备。IMEI组成如下图所示，移动终端设备通过键入“*#06#”即可查得。其总长为15位，每位数字仅使用0～9的数字。其中TAC代表型号装配码，由欧洲型号标准中心分配；FAC代表装配厂家号码；SNR为产品序号，用于区别同一个TAC和FAC中的每台移动设备；SP是备用编码。</p><p>国际移动用户识别码（IMSI：International Mobile Subscriber Identification Number）是区别移动用户的标志，储存在SIM卡中，可用于区别移动用户的有效信息。IMSI组成如下图所示，其总长度不超过15位，同样使用0～9的数字。 其中MCC是移动用户所属国家代号，占3位数字，中国的MCC规定为460；MNC是移动网号码，最多由两位数字组成，用于识别移动用户所归属的移动通信网；MSIN是移动用户识别码，用以识别某一移动通信网中的移动用户。</p><p>Ki (Key identifier)是SIM卡与运营商之间加密数据传递的密钥。GSM的加密方式是一种称为comp-128的数字加密运算，当系统进行验证时会同时使用Ki及IMSI，经过一连串系统安全认证讯息后产生随机变量，并以A3算法进行加密运算与手机内存资料进行比对，当身份确认无误后始可入网。目前GSM使用的Ki长度是16 bytes，相当于128bits，若非经过特殊译码程序，使用者无法读取Ki，安全性极高，使用者无须担心有被盗打电话的顾虑。</p><p><br />由此看来，只要知道SIM卡的Ki、IMSI值，我们就可以通过软件仿真出SIM卡的功能，甚至可以利用多组Ki、IMSI值，用一张微处理器卡片来同时仿真本来需要多张SIM所完成的功能，这就是“一卡多号”技术。<br />SIM卡的软件特性 <br />SIM卡采用新式单片机及存储器管理结构，因此处理功能大大增强。其智能特性的逻辑结构是树型结构。全部特性参数信息都是用数据字段方式表达，SIM卡中存有3类数据信息：</p><p>1. 与持卡者相关的信息以及SIM卡将来准备提供的所有业务信息，这种类型的数据存储在根目录下；<br />2. GSM应用中特有的信息，这种类型的数据存储在GSM目录下；<br />3.   GSM应用所使用的信息，此信息可与其他电信应用或业务共享，位于电信目录下。<br /><br />在SIM卡根目录下有3个应用目录，一个属于行政主管部门应用目录，另外两个属于技术管理的应用目录，分别是GSM应用目录和电信应用目录。所有的目录下均为数据字段，有二进制的和格式化的数据字段。数据字段中的信息有的是永存性的即不能更新的，有的是暂存的需要更新的。每个数据字段都要表达出它的用途、更新程度、数据字段的特性。<br /><br />SIM卡内部的数据 <br />了解完SIM卡的大概之后，我们再来看看SIM卡具体都能存储哪些类型的数据。以目前的情况来看，SIM卡能够存储的数据类型主要被分为以下四种：<br />1. 由SIM卡生产厂商存入的系统原始数据<br />2. 存储手机的固定信息，手机在出售之前都会被SIM卡中心记录到SIM卡当中，主要包括鉴权和加密信息、国际移动用户识别码（IMSI）、IMSI认证算法、加密密匙生成算法、密匙生成前，用户密匙的生成算法（这三种算法均为128位）<br />3. 用户自己存入的数据，如短消息、固定拨号、缩位拨号、性能参数、话费记数等；能够存储有关的电话号码，也就是具备电话簿功能。<br />4. 有关于网络方面的数据，用户在用卡过程中自动存入和更新的网络接续和用户信息类数据，包括最近一次位置登记时手机所在位置识别号、设置的周期性位置更新间隔时间、临时移动用户号等。不过这种数据的存放是暂时性的，也就是说它并不是永久的存放于SIM卡之中。<br /><br /> 5.相关的业务代码，这一点相信也是大家很熟悉的，那就是非常重要的个人识别码(也就使我们平常所说的PIN码)，还有就  是解开锁定用的解锁码(PUK)等等。<br />　　<br />以上四种类型的数据都是存储在SIM卡当中的，而我们通常也是可以利用这些数据来进行手机的设置，每张SIM卡个人密码(PIN)都是可以由用户设置，利用加密的功能可以实现防止手机被其它人所盗用甚至被窃听，由此看来SIM卡不仅仅可以为我们提供打电话的功能，而且还为我们保护自己的隐私而提供了安全的保障。<br /><br />SIM卡内部的数据都存放在各自的目录项内，第一类数据放在根目录，当电源开启后首先进入根目录，再根据指令进入相关的子目录，每种目录及其内部的数据域均有各自的识别码保护，只有经过核对判别以后才能对数据域中的数据进行查询、读出和更新。上面第一类数据通常属于永久性数据，由SIM卡生产厂商注入以后无法更改，第二类数据只有网络运行部门的专门机构才允许查阅和更新，第三、四类数据中的大部分允许用户利用手机对其进行读写操作。<br /><br />SIM卡的类型 <br />SIM卡的存储容量有3kB、8kB、16kB、32kB、64kB等。STK卡(SIM application Tool Kit)是SIM卡的一种，它能为手机提供增值服务，如移动梦网业务等。SIM卡能够储存多少电话号码和短信取决于卡内数据存储器EEPROM的容量（有2KB、3KB、8KB容量），假设一张EEPROM容量为8KB的SIM卡，可储存以下容量的数据：100组电话号码及其对应姓名、15组短信息、25组最近拨出的号码、4位SIM卡密码（PIN）。目前中国移动/中国联通实际对普通用户提供的多数是普通8K的SIM卡。<br /><br />SIM卡的接口<br />    SIM卡是通过卡面上铜制接口来连接卡内逻辑电路与移动终端的，SIM卡芯片有8个触点，通常与移动设备连接需要6个触点。<br /><br />SIM卡是一个装有微处理器（CPU）的芯片卡，它的内部有5个模块，并且每个模块都对应一个功能：微处理器CPU（8位）、程序存储器ROM（3～8kbit）、工作存储器RAM（6～16kbit）数据存储器EEPROM（16～256kbit）和串行通信单元。这5个模块被胶封在SIM卡铜制接口后与普通IC卡封装方式相同。这5个模块必须集成在一块集成电路中，否则其安全性会受到威胁，因为芯片间的连线可能成为非法存取和盗用SIM卡的重要线索。 <br /><br />SIM卡的供电分为5V（1998年前发行）、5V与3V兼容、3V、1.8V等，当然这些卡必须与相应的手机配合使用，即手机产生的SIM卡供电电压与该SIM卡所需的电压相匹配。SIM卡插入手机后，电源端口提供电源给SIM卡内各模块。</p><img src ="http://www.blogjava.net/zpuser/aggbug/102448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-03-07 17:44 <a href="http://www.blogjava.net/zpuser/archive/2007/03/07/102448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STK</title><link>http://www.blogjava.net/zpuser/archive/2007/03/07/102440.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Wed, 07 Mar 2007 09:10:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/03/07/102440.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/102440.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/03/07/102440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/102440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/102440.html</trackback:ping><description><![CDATA[STK是英文SIM Tool Kit的缩写,简称"用户识别应用发展工具",是在GSM手机使用的大容量SIM卡中开发的应用菜单。
<p>　　STK可以理解为一组开发增值业务的命令，一种小型编程语言，它允许基于智能卡的用户身份识别模块(SIM卡)运行自己的应用软件。<br /><br />STK技术主要应用于手机银行、股票交易、外汇买卖、理财秘书等领域。移动新业务“手机银行”、“股票查询与交易”等就是在使用该项技术。</p><p>　　STK卡同原来的SIM卡一样，可以在普通GSM手机上使用。不同的是，STK卡是新一代的智能卡，具有很高的存储量。用户在GSM网点换上STK卡后，每月只需交纳20元左右的一笔固定费用（各省不同）。<br /></p><img src ="http://www.blogjava.net/zpuser/aggbug/102440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-03-07 17:10 <a href="http://www.blogjava.net/zpuser/archive/2007/03/07/102440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]JAVA关键字-final</title><link>http://www.blogjava.net/zpuser/archive/2007/02/10/99196.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Sat, 10 Feb 2007 15:56:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/02/10/99196.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/99196.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/02/10/99196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/99196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/99196.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">在</span>
				<span lang="EN-US">JAVA</span>
				<span style="font-family: 宋体;">语言中，有很多特殊的关键字（</span>
				<span lang="EN-US">final,static,super,supert,this</span>
				<span style="font-family: 宋体;">等）是每个</span>
				<span lang="EN-US">JAVA</span>
				<span style="font-family: 宋体;">程序员必须应该搞清楚的，不仅在实际开发中会用到，而起也是面试或考试题里面青睐的考点之一。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">本文是自己关于关键字</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的一些总结。</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">关键字主要应用在标志和声明类，成员变量和方法为不可变，通过这个基本定义可以扩展到</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">可以限制类和方法的继承关系。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<b>
						<span lang="EN-US">final</span>
						<span style="font-family: 宋体;">变量</span>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">变量分为简单变量和对象变量。声明</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的简单变量，表示该变量从初始化后其值（简单变量直接存储值，而不是引用）就不会改变，需要注意的是在使用其他类提供的</span>
				<span lang="EN-US">public</span>
				<span style="font-family: 宋体;">的</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">简单变量的时候，就算其他类改变了其定义并重新编译，使用的类在重新编译前该值是不会改变的（参考：</span>
				<span lang="EN-US">http://blog.csdn.net/daniel112/archive/2006/10/11/1330255.aspx</span>
				<span style="font-family: 宋体;">）。声明为</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的对象变量表示一旦初始化其引用不会改变。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">变量初始化化可以在声明时或构造函数中完成。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">
						<o:p>
						</o:p>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
								<span style="color: rgb(0, 0, 0);">Public </span>
								<span style="color: rgb(0, 0, 255);">class</span>
								<span style="color: rgb(0, 0, 0);"> MyFinalTest{<br /><br />  </span>
								<span style="color: rgb(0, 128, 0);">/**</span>
								<span style="color: rgb(0, 128, 0);"> 声明时候直接初始化 </span>
								<span style="color: rgb(0, 128, 0);">*/</span>
								<span style="color: rgb(0, 0, 0);">
										<br />
										<br />  Public </span>
								<span style="color: rgb(0, 0, 255);">final</span>
								<span style="color: rgb(0, 0, 0);"> String FINAL_STR </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> “final_str”;<br /><br />  </span>
								<span style="color: rgb(0, 128, 0);">/**</span>
								<span style="color: rgb(0, 128, 0);"> 在构造函数中初始化 </span>
								<span style="color: rgb(0, 128, 0);">*/</span>
								<span style="color: rgb(0, 0, 0);">
										<br />
										<br />  Private </span>
								<span style="color: rgb(0, 0, 255);">final</span>
								<span style="color: rgb(0, 0, 0);"> String FINAL_STR1;<br /><br /> <br /><br />  Public MyFinalTest(){<br /><br />    FINAL_STR1 </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> “asdfasd”;<br /><br />}<br /><br />}<br /></span>
						</div>
				</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<b>
						<span lang="EN-US">final</span>
						<span style="font-family: 宋体;">类</span>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">定义为</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的类表示该类不能被继承，也就是说该类是一个功能设计完成，不在需要扩展的类。同时该成员方法也对应默认标志为</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">，成员变量随定义而定。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 0);">Public </span>
				<span style="color: rgb(0, 0, 255);">final</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">class</span>
				<span style="color: rgb(0, 0, 0);"> FinalClass{<br /><br />  Public </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> method1(){}<br /><br />  </span>
				<span style="color: rgb(0, 128, 0);">/**</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
						<br />  * 没有必要加关键字final<br /><br />  </span>
				<span style="color: rgb(0, 128, 0);">*/</span>
				<span style="color: rgb(0, 0, 0);">
						<br />
						<br />  Public </span>
				<span style="color: rgb(0, 0, 255);">final</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> method2(){}<br /><br />}</span>
		</div>
		<br />
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<b>
						<span lang="EN-US">final</span>
						<span style="font-family: 宋体;">方法</span>
				</b>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">定义为</span>
				<span lang="EN-US">final</span>
				<span style="font-family: 宋体;">的方法表示该方法不能被子类覆写（</span>
				<span lang="EN-US">override</span>
				<span style="font-family: 宋体;">）。</span>
		</p>
<img src ="http://www.blogjava.net/zpuser/aggbug/99196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-02-10 23:56 <a href="http://www.blogjava.net/zpuser/archive/2007/02/10/99196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的装机软件</title><link>http://www.blogjava.net/zpuser/archive/2007/02/07/98464.html</link><dc:creator>acooly</dc:creator><author>acooly</author><pubDate>Tue, 06 Feb 2007 19:14:00 GMT</pubDate><guid>http://www.blogjava.net/zpuser/archive/2007/02/07/98464.html</guid><wfw:comment>http://www.blogjava.net/zpuser/comments/98464.html</wfw:comment><comments>http://www.blogjava.net/zpuser/archive/2007/02/07/98464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zpuser/comments/commentRss/98464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zpuser/services/trackbacks/98464.html</trackback:ping><description><![CDATA[
		<h3>1.系统软件</h3>
		<p>firefox : <a href="http://www.mozilla.com/en-US/firefox/">http://www.mozilla.com/en-US/firefox/</a><br />realplayer:<a title="http://cn.real.com/?src=realplayer" href="http://cn.real.com/?src=realplayer" target="_blank">http://cn.real.com/?src=realplayer</a><br />迅雷：<a target="_blank" title="http://www.xunlei.com" href="http://www.xunlei.com">http://www.xunlei.com</a><br />WinRar:<a target="_blank" title="http://www.winrar.com.cn/" href="http://www.winrar.com.cn/">http://www.winrar.com.cn/</a><br /><span class="filecss"><span class="tpc_content"><font size="2">HappyShow(超强万能播放器)完美版：<a target="_blank" title="http://www.ogg.cn/software/view-software-244.html" href="http://www.ogg.cn/software/view-software-244.html">http://www.ogg.cn/software/view-software-244.html</a><br />拼音++:</font></span></span><a target="_blank" title="http://dir.jjol.cn/Pyjj/" href="http://dir.jjol.cn/Pyjj/"><span class="filecss"><span class="tpc_content"></span></span><font size="2">http://dir.jjol.cn/Pyjj/</font></a><br />影音风暴：<a target="_blank" title="http://www.skycn.com/soft/98.html" href="http://www.skycn.com/soft/98.html">http://www.skycn.com/soft/98.html</a></p>
<img src ="http://www.blogjava.net/zpuser/aggbug/98464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zpuser/" target="_blank">acooly</a> 2007-02-07 03:14 <a href="http://www.blogjava.net/zpuser/archive/2007/02/07/98464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>