<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_ghx88</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/10491/rss</id><updated>2011-05-28T08:36:29Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/10491/rss"/><entry><id>http://www.cnblogs.com/ghx88/archive/2011/05/28/2060843.html</id><title type="text">[ 转]discuz 的加密与解密函数authcode解析</title><summary type="text">discuz的 authcode 函数可以说对中国的PHP界作出了重大贡献。包括康盛自己的产品，以及大部分中国使用PHP的公司都用这个函数进行加密，authcode 是使用异或运算进行加密和解密。原理如下，假如：加密明文：1010 1001密匙：1110 0011密文：0100 1010得出密文0100 1010，解密之需和密匙异或下就可以了解密密文：0100 1010密匙：1110 0011明文：1010 1001并没有什么高深的算法，密匙重要性很高，所以，关键在于怎么生成密匙。那我们一起看下康盛的authcode怎么做的吧</summary><published>2011-05-28T08:34:00Z</published><updated>2011-05-28T08:34:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2011/05/28/2060843.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2011/05/28/2060843.html"/><content type="html">&lt;p&gt;引用来自:&lt;a href="http://www.akii.org/"&gt;http://www.akii.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;discuz的 authcode 函数可以说对中国的PHP界作出了重大贡献。包括康盛自己的产品，以及大部分中国使用PHP的公司都用这个函数进行加密，authcode 是使用异或运算进行加密和解密。&lt;/p&gt;&lt;p&gt;原理如下，假如：&lt;/p&gt;&lt;p&gt;加密&lt;/p&gt;&lt;p&gt;明文：1010 1001&lt;br /&gt;密匙：1110 0011&lt;br /&gt;密文：0100 1010&lt;/p&gt;&lt;p&gt;得出密文0100 1010，解密之需和密匙异或下就可以了&lt;/p&gt;&lt;p&gt;解密&lt;/p&gt;&lt;p&gt;密文：0100 1010&lt;br /&gt;密匙：1110 0011&lt;br /&gt;明文：1010 1001&lt;/p&gt;&lt;p&gt;并没有什么高深的算法，密匙重要性很高，所以，关键在于怎么生成密匙。&lt;/p&gt;&lt;p&gt;那我们一起看下康盛的authcode怎么做的吧&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 参数解释&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &lt;span style="color: #008000;"&gt;// $string： 明文 或 密文&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &lt;span style="color: #008000;"&gt;// $operation：DECODE表示解密,其它表示加密&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &lt;span style="color: #008000;"&gt;// $key： 密匙&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &lt;span style="color: #008000;"&gt;// $expiry：密文有效期&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; authcode(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$string&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$operation&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;DECODE&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$key&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$expiry&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 动态密匙长度，相同的明文会生成不同密文就是依靠动态密匙&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt; &lt;span style="color: #008000;"&gt;    // 加入随机密钥，可以令密文无任何规律，即便是原文和密钥完全相同，加密结果也会每次不同，增大破解难度。&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt; &lt;span style="color: #008000;"&gt;    // 取值越大，密文变动规律越大，密文变化 = 16 的 $ckey_length 次方&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; &lt;span style="color: #008000;"&gt;    // 当此值为 0 时，则不产生随机密钥&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$ckey_length&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; &lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 密匙&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$key&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;md5&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$key&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;?&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$key&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$GLOBALS&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;discuz_auth_key&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;span style="color: #000000;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 密匙a会参与加解密&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$keya&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;md5&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$key&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 密匙b会用来做数据完整性验证&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$keyb&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;md5&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$key&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 密匙c用于变化生成的密文&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$keyc&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$ckey_length&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;?&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #800080;"&gt;$operation&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;DECODE&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;?&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$string&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$ckey_length&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;md5&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;microtime&lt;/span&gt;&lt;span style="color: #000000;"&gt;())&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #800080;"&gt;$ckey_length&lt;/span&gt;&lt;span style="color: #000000;"&gt;)) &lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 参与运算的密匙&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$cryptkey&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$keya&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;md5&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$keya&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #800080;"&gt;$keyc&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$key_length&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;strlen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$cryptkey&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 明文，前10位用来保存时间戳，解密时验证数据有效性，10到26位用来保存$keyb(密匙b)，解密时会通过这个密匙验证数据完整性&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt; &lt;span style="color: #008000;"&gt;    // 如果是解码的话，会从第$ckey_length位开始，因为密文前$ckey_length位保存 动态密匙，以保证解密正确&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$string&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$operation&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;DECODE&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;?&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;base64_decode&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$string&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$ckey_length&lt;/span&gt;&lt;span style="color: #000000;"&gt;)) &lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;sprintf&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;%010d&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$expiry&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;?&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$expiry&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;time&lt;/span&gt;&lt;span style="color: #000000;"&gt;() &lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;md5&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #800080;"&gt;$keyb&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #800080;"&gt;$string&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$string_length&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;strlen&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$string&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$result&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;range&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #800080;"&gt;$rndkey&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;array&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 产生密匙簿&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;255&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$rndkey&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;ord&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$cryptkey&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$key_length&lt;/span&gt;&lt;span style="color: #000000;"&gt;]);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt; &lt;span style="color: #000000;"&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 用固定的算法，打乱密匙簿，增加随机性，好像很复杂，实际上并不会增加密文的强度&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;256&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$rndkey&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;]) &lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;256&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$tmp&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;40&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;41&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$tmp&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;42&lt;/span&gt; &lt;span style="color: #000000;"&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;43&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 核心加解密部分&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;44&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$a&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$string_length&lt;/span&gt;&lt;span style="color: #000000;"&gt;; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;45&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$a&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #800080;"&gt;$a&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;256&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;46&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$a&lt;/span&gt;&lt;span style="color: #000000;"&gt;]) &lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;256&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;47&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$tmp&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$a&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;48&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$a&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;49&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$tmp&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;50&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 从密匙簿得出密匙进行异或，再转成字符&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;51&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #800080;"&gt;$result&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;.=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;chr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;ord&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$i&lt;/span&gt;&lt;span style="color: #000000;"&gt;]) &lt;/span&gt;&lt;span style="color: #000000;"&gt;^&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$a&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$box&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #800080;"&gt;$j&lt;/span&gt;&lt;span style="color: #000000;"&gt;]) &lt;/span&gt;&lt;span style="color: #000000;"&gt;%&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;256&lt;/span&gt;&lt;span style="color: #000000;"&gt;]));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;52&lt;/span&gt; &lt;span style="color: #000000;"&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;53&lt;/span&gt; &lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$operation&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;DECODE&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;54&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; substr($result, 0, 10) == 0 验证数据有效性&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;55&lt;/span&gt; &lt;span style="color: #008000;"&gt;        // substr($result, 0, 10) - time() &amp;gt; 0 验证数据有效性&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;56&lt;/span&gt; &lt;span style="color: #008000;"&gt;        // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;57&lt;/span&gt; &lt;span style="color: #008000;"&gt;        // 验证数据有效性，请看未加密明文的格式&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;58&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;((&lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$result&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;||&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$result&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;time&lt;/span&gt;&lt;span style="color: #000000;"&gt;() &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$result&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;md5&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$result&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;26&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #800080;"&gt;$keyb&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;16&lt;/span&gt;&lt;span style="color: #000000;"&gt;)) {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;59&lt;/span&gt; &lt;span style="color: #000000;"&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;substr&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$result&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;26&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;60&lt;/span&gt; &lt;span style="color: #000000;"&gt;        } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;61&lt;/span&gt; &lt;span style="color: #000000;"&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;62&lt;/span&gt; &lt;span style="color: #000000;"&gt;        }&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;63&lt;/span&gt; &lt;span style="color: #000000;"&gt;    } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; {&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;64&lt;/span&gt; &lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 把动态密匙保存在密文里，这也是为什么同样的明文，生产不同密文后能解密的原因&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;65&lt;/span&gt; &lt;span style="color: #008000;"&gt;        // 因为加密后的密文可能是一些特殊字符，复制过程可能会丢失，所以用base64编码&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;66&lt;/span&gt; &lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;$keyc&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;str_replace&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;base64_encode&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800080;"&gt;$result&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;67&lt;/span&gt; &lt;span style="color: #000000;"&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;68&lt;/span&gt; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ghx88/aggbug/2060843.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ghx88/archive/2011/05/28/2060843.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2010/09/10/1823426.html</id><title type="text">Balsamiq Mockups完全手册[转]</title><summary type="text">Balsamiq Mockups出自加利福尼亚州的Balsamiq工作室，创始人Peldi在 2008年6月推出了这款手绘风格的产品原型设计工具，并广受好评。2年多来，Balsamiq工作作为一个微型独立软件开发商，专注于Mockups的 开发设计，仅3周便实现了盈利，18个月内销售额达到200万美元，用户端数量超过10万个，这与Balsamiq Mockups的市场用户细分的成功以及产品特性是分不开的。</summary><published>2010-09-10T08:30:00Z</published><updated>2010-09-10T08:30:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2010/09/10/1823426.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2010/09/10/1823426.html"/><content type="html">&lt;address&gt;&amp;nbsp;【转自：&lt;a href="http://www.hanjunxing.com/balsamiq-mockups-one-for-all"&gt;韩军星的博客&lt;/a&gt;】&lt;/address&gt;&lt;p&gt;&lt;strong&gt;&lt;strong&gt;什么是Balsamiq Mockups&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="产品原型工具" href="http://www.balsamiq.com/" target="_blank"&gt;Balsamiq Mockups&lt;/a&gt;出自加利福尼亚州的Balsamiq工作室，创始人&lt;a title="Balsamiq Mockups创始人" href="http://www.balsamiq.com/blog/" target="_blank"&gt;Peldi&lt;/a&gt;在 2008年6月推出了这款手绘风格的产品原型设计工具，并广受好评。2年多来，Balsamiq工作作为一个微型独立软件开发商，专注于Mockups的 开发设计，仅3周便实现了盈利，18个月内销售额达到200万美元，用户端数量超过10万个，这与Balsamiq  Mockups的市场用户细分的成功以及产品特性是分不开的。&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/balsamiq-mockups.jpg"&gt;&lt;img title="balsamiq mockups样例" src="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/balsamiq-mockups.jpg" alt="" height="285" width="370" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;Balsamiq Mockups的用途和价值&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;在&lt;a title="互联网产品设计" href="http://www.hanjunxing.com/web-product-design-process" target="_blank"&gt;Web产品设计&lt;/a&gt;中，Balsamiq Mockups是产品设计师&lt;a title="绘制线框图及草图" href="http://www.uxbooth.com/blog/tools-for-sketching-user-experiences/" target="_blank"&gt;绘制线框图或产品原型界面&lt;/a&gt;的利器。在产品设计的需求阶段，&lt;a title="产品原型设计" href="http://cdc.tencent.com/?p=2146" target="_blank"&gt;低保真的线框图或者草图设计介于产品流程设计与高保真DEMO设计之间&lt;/a&gt;，在Balsamiq Mockups出现之前，流程图可以使用&lt;a title="Visio画流程图" href="http://www.hanjunxing.com/visio-web-flow-charts" target="_blank"&gt;Visio&lt;/a&gt;，高保真DEMO可以使用&lt;a title="Axure用户高保真DEMO" href="http://www.hanjunxing.com/axure-rp-chinese-realease" target="_blank"&gt;Axure&lt;/a&gt;，但我们并没有好用的草图设计工具；在&lt;a title="互联网产品设计管理" href="http://www.hanjunxing.com/product-management-and-design" target="_blank"&gt;产品设计管理&lt;/a&gt;中，我们通常在产品的业务流程和数据流转已经相当明确时才开始进一步考虑产品的结构层和框架层，虽然此时纸、笔、白板都是非常简单方便的交流工具，但是他们的最大劣势就是&amp;#8212;&amp;#8212;很难将有价值的原型保存下来。Balsamiq Mockups的出现完美的解决了这个问题。&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/sketchboard-630.jpg"&gt;&lt;img title="纸质的线框图组成了产品原型" src="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/sketchboard-630.jpg" alt="" height="304" width="550" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;Balsamiq Mockups的优点和特色&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;span style="color: #008000;"&gt;可存：&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;告别那一堆堆的纸质&lt;a title="线框图前的草图" href="http://www.ixda.org/node/21817" target="_blank"&gt;线框图&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;吧&amp;#8230;&lt;br /&gt; &lt;span style="color: #008000;"&gt;易用：&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;UI控件支持自动拖拽，并且可以实现自动对齐；&lt;br /&gt; &lt;span style="color: #008000;"&gt;美观：&lt;/span&gt;&lt;a title="Balsamiq Mockups手绘风格" href="http://www.balsamiq.com/products/mockups/examples" target="_blank"&gt;手绘风格&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;，简约清爽；&lt;br /&gt; &lt;span style="color: #008000;"&gt;丰富：&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;从按钮到输入框，从导航条到页面、表格，甚至包括了最潮的Iphone元素；&lt;br /&gt; &lt;span style="color: #008000;"&gt;方便：&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;对元素的修改除了工具栏外，还可以使用隐藏编辑框，支持快捷键；&lt;br /&gt; &lt;span style="color: #008000;"&gt;兼容：&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;可使用XML语言保存元素，也可以导出PNG图片，可以插入到任何项目；&lt;br /&gt; &lt;span style="color: #008000;"&gt;跨平台：&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Windows、Mac OS、Linux下都可以使用，还有能集成在Confluence，JIRA，和XWiki中的版本，对了，如果你没时间下载桌面版，还可以直接使用网页版的Balsamiq Mockups&amp;#8230;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;a href="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/Balsamiq-Mockups%E7%9A%84%E4%BC%98%E7%82%B9.jpg"&gt;&lt;img title="Balsamiq Mockups的界面UI元素" src="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/Balsamiq-Mockups%E7%9A%84%E4%BC%98%E7%82%B9.jpg" alt="" height="292" width="550" /&gt;&lt;/a&gt;&lt;br /&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;Balsamiq Mockups的风险和劣势&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: #993300;"&gt;应用范围：&lt;/span&gt;就像之前提到的，Balsamiq Mockups最好用于&lt;a title="web产品设计" href="http://hi.baidu.com/shru/blog/item/e16058d62c23682406088b30.html" target="_blank"&gt;商用web产品设计&lt;/a&gt;中的低保真线框图或者草图设计，相对于纸和笔，它不够灵活；相对于Axure，它不够精确；&lt;/p&gt; &lt;p&gt;&lt;span style="color: #993300;"&gt;使用语言：&lt;/span&gt;暂时没有英文版的Balsamiq Mockups，虽然相对于用惯国外软件的产品设计师/前端交互设计师来说，这并不是什么大问题，但毕竟这提到了使用门槛，童鞋们还是要学好英语；（关于中文汉化版Balsamiq Mockups下面会提到）&lt;/p&gt; &lt;p&gt;&lt;span style="color: #993300;"&gt;价格不菲：&lt;/span&gt;79美元的价格并不适合喜欢的朋友尝鲜；而对于国内公司而言，在产品设计领域的理念和意识，远达不到花钱去买一个细分的专业软件的程度。即便不使用Balsamiq Mockups，地球照样转。（关于Balsamiq Mockups的免费方法下面会提到）&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;使用Balsamiq Mockups的职业和互联网公司&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;使用Balsamiq Mockups的人包括产品经理、产品设计师、用户体验设计师、交互设计师、网站前端设计师等等，随便谁都可以。这并不重要，问题是很多大公司都在使用，来看看&lt;a href="http://webteam.tencent.com/?p=1741" target="_blank"&gt;腾讯CDC对Balsamiq Mockups的分析&lt;/a&gt;，或者&lt;a href="http://hi.baidu.com/inetpm/blog/item/36262813b595e6866438db4d.html" target="_blank"&gt;搜狐产品经理对Balsamiq Mockups的推荐&lt;/a&gt;，甚至现在&lt;a href="http://ecvip.org/archives/790" target="_blank"&gt;网易招聘产品设计师都要求会Balsamiq Mockups&lt;/a&gt;了&amp;#8230;&amp;#8230;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;下载和安装Balsamiq Mockups&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;首先提供在线安装Balsamiq Mockups的方法：&lt;/strong&gt;&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;gt;&amp;gt; &lt;a href="http://www.balsamiq.com/products/mockups/download" target="_blank"&gt;点击进入Balsamiq Mockups官方下载安装页面&lt;/a&gt; &amp;lt;&amp;lt;&lt;/p&gt; &lt;p&gt;点击图标直接安装即可，安装内容包括Adobe AIR环境以及Mockups主体桌面程序：&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;a href="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/%E5%AE%89%E8%A3%85Adobe-AIR.jpg"&gt;&lt;img title="安装Adobe AIR" src="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/%E5%AE%89%E8%A3%85Adobe-AIR.jpg" alt="" height="156" width="548" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;如果你的电脑安装时出现问题，可以尝试分步下载安装Balsamiq Mockups：&lt;/strong&gt;&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;确保你的电脑安装了Adobe AIR，下载后安装到默认文件夹&lt;/p&gt; &lt;p&gt;&amp;gt;&amp;gt; &lt;a href="http://get.adobe.com/cn/air/" target="_blank"&gt;点击进入 Adobe AIR 的最新版本安装页 &lt;/a&gt;&amp;lt;&amp;lt;&lt;/p&gt; &lt;p&gt;安装完Adobe AIR后直接下载Balsamiq Mockups桌面程序，无论是Windows还是Mac都可以正常使用，下载后安装到你需要的文件夹即可&lt;/p&gt; &lt;p&gt;&amp;gt;&amp;gt; &lt;a href="mockupshttp://dl.dropbox.com/u/41723/builds/1.6/MockupsForDesktop.air" target="_blank"&gt;直接下载 Balsamiq 官方网站的桌面端程序&lt;/a&gt;&amp;lt;&amp;lt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;最后，当你无法安装Balsamiq Mockups或者没时间安装时，Balsamiq还为你提供了&lt;a title="Balsamiq Mockups的SAAS版" href="http://www.balsamiq.com/demos/mockups/Mockups.html" target="_blank"&gt;在线Web版本的Mockups&lt;/a&gt;。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;免费获得Balsamiq Mockups的license key注册码&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;如果不注册，Balsamiq  Mockups便只能绘图，不能保存你的Mockups，同时每隔5分钟会弹出提示框请你输入许可证。虽然对企业而言，79美元的注册费并不多，购买大量 许可还有打折优惠，但对于个人使用者或者希望体验的朋友来说，免费的总是最好的。Balsamiq非常体贴的推出了&amp;#8220;&lt;a title="免费获得Balsamiq Mockups的license key" href="http://www.balsamiq.com/products/mockups/desktop#buy" target="_blank"&gt;免费获得Balsamiq Mockups许可证密钥的几个方法&lt;/a&gt;&amp;#8221;，包括：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;如果你是非营利、慈善机构、开源贡献者；&lt;br /&gt; 如果你是技术/软件博客作者或者记者；&lt;br /&gt; 如果你是学校高中班老师；&lt;br /&gt; 如果你加入可用性专业培训；&lt;br /&gt; 如果你是大学的教授或者学生；&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;当然，对普通人而言，在你的博客上写一篇关于Balsamiq Mockups的评测或者介绍，做口碑营销，是比较靠谱的办法，这并不困难，因此不要去寻找所谓的破解和注册机了&amp;#8212;&amp;#8212;&lt;strong&gt;当你完成博客时，给Balsamiq写邮件索要免费的Mockups注册码吧！&lt;/strong&gt;&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="color: #008000;"&gt;&lt;strong&gt;邮箱：free@balsamiq.com&lt;br /&gt; 主题：I want to review Mockups on my software blog!&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; 内容：关于Balsamiq Mockups介绍的博客URL&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;PS.以下是我成功申请Balsamiq Mockups的免费Serial Key的邮件以及Balsamiq首席运营官Valerie Liberty的回信&lt;/strong&gt;，再次感谢Balsamiq的慷慨并强烈表扬Valerie Liberty的高效，重点在于，回信的美国当地时间是晚上10点多&amp;#8230;&amp;#8230;&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="color: #008080;"&gt;发送至 free@balsamiq.com&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 日期 2010年3月18日 下午1:08&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; 主题 I want to review Mockups on my software blog!&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: #008080;"&gt;Hi,This is my blog&amp;#8217;s URL what about Balsamiq Mockups:http://www.hanjunxing.com/balsamiq-mockups-one-for-all&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt; Could you give me a license, free of charge,please?Thank you very much!&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="color: #008000;"&gt;日期 2010年3月18日 下午2:11&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; 主题 Re: I want to review Mockups on my software blog!&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: #008000;"&gt;It&amp;#8217;s my pleasure to give you the license below:&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; Organization name:***&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; Serial Key:***&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; Enjoy Balsamiq Mockups and thanks for spreading the word, I am looking&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; forward to seeing your review!&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; Valerie Liberty&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt; Chief Operating Officer, Wow! Division&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;Balsamiq Mockups如何输入中文&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;选择菜单栏 View &amp;gt;&amp;gt; 将 Use System Fonts 勾上，就能完美支持中文输入。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;strong&gt;Balsamiq Mockups的中文汉化版本&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;目前Balsamiq没有发布中文版的Mockups，同时由于Balsamiq  Mockups是基于Flash的应用程序，所以无法安装汉化补丁或汉化包。值得庆幸的是，Balsamiq  Mockups的操作非常简单和人性化，你不需要专门的Balsamiq  Mockups教程，因为你甚至不需要看文字提示就可以快速上手绘制自己的产品原型了。最后，为需要的朋友提供一个Balsamiq  Mockups的山寨中文汉化版：Balsamiq Mockups中英文对照图，顺便做一个Balsamiq Mockups的界面DEMO：&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/Balsamiq-Mockups.jpg"&gt;&lt;img title="Balsamiq Mockups中文汉化版" src="http://www.hanjunxing.com/blog/wp-content/uploads/2010/03/Balsamiq-Mockups.jpg" alt="" height="281" width="550" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ghx88/aggbug/1823426.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ghx88/archive/2010/09/10/1823426.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2009/05/19/1460168.html</id><title type="text">使用安全json parser防止json注入</title><summary type="text">有些程序员如果没有很好的在javascript中解析json数据，往往会直接eval把json转成js对象，这时候如果json的数据中包含了被注入的恶意数据，则可能导致代码注入的问题。正确的做法是分割出json里包含的特殊字符，然后再解析为对象http://json.org/json2.js 中是通过正则来完成的。// We split the second stage into 4 regexp...</summary><published>2009-05-19T06:17:00Z</published><updated>2009-05-19T06:17:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2009/05/19/1460168.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2009/05/19/1460168.html"/><content type="text">有些程序员如果没有很好的在javascript中解析json数据，往往会直接eval把json转成js对象，这时候如果json的数据中包含了被注入的恶意数据，则可能导致代码注入的问题。正确的做法是分割出json里包含的特殊字符，然后再解析为对象http://json.org/json2.js 中是通过正则来完成的。// We split the second stage into 4 regexp...</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2008/11/18/1336140.html</id><title type="text">[转]Yahoo!网站性能最佳体验的34条黄金守则——内容</title><summary type="text">   Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。Excetional Performance团队总结出了一系列可以提高网站速度的方法。可以分为7大类34条。包括内容、服务器、cookie、CSS、JavaScript、图片、移动应用等七部分。</summary><published>2008-11-18T09:40:00Z</published><updated>2008-11-18T09:40:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2008/11/18/1336140.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2008/11/18/1336140.html"/><content type="text">   Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。Excetional Performance团队总结出了一系列可以提高网站速度的方法。可以分为7大类34条。包括内容、服务器、cookie、CSS、JavaScript、图片、移动应用等七部分。</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2008/11/17/1335086.html</id><title type="text">人生的时间管理法则</title><summary type="text">“时间就是金钱”的观念早已深人人心，而对于职场中人来讲，做好时间管理不仅意味着丰厚的经济利益，更能令自己的事业突飞猛进。</summary><published>2008-11-17T05:47:00Z</published><updated>2008-11-17T05:47:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2008/11/17/1335086.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2008/11/17/1335086.html"/><content type="text">“时间就是金钱”的观念早已深人人心，而对于职场中人来讲，做好时间管理不仅意味着丰厚的经济利益，更能令自己的事业突飞猛进。</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2008/10/21/1315609.html</id><title type="text">JavaScript 读取地址栏参数</title><summary type="text">[代码]</summary><published>2008-10-21T01:12:00Z</published><updated>2008-10-21T01:12:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2008/10/21/1315609.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2008/10/21/1315609.html"/><content type="text">[代码]</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2008/05/30/1210427.html</id><title type="text">无题</title><summary type="text">１。题目：一边……一边……小朋友写：他一边脱衣服，一边穿裤子。老师批语：他到底是要脱还是要穿啊？２。题目：其中小朋友写：我的其中一只左脚受伤了。老师批语：你是蜈蚣吗？３。题目：陆陆续续小朋友写：下班了，爸爸陆陆续续的回家了。老师批语：你到底有几个爸爸呀？４。题目：难过小朋友写：我家门前有条水沟很难过。老师批语：老师更难过。５。题目：又 又小朋友写：我...</summary><published>2008-05-30T00:36:00Z</published><updated>2008-05-30T00:36:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2008/05/30/1210427.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2008/05/30/1210427.html"/><content type="text">１。题目：一边……一边……小朋友写：他一边脱衣服，一边穿裤子。老师批语：他到底是要脱还是要穿啊？２。题目：其中小朋友写：我的其中一只左脚受伤了。老师批语：你是蜈蚣吗？３。题目：陆陆续续小朋友写：下班了，爸爸陆陆续续的回家了。老师批语：你到底有几个爸爸呀？４。题目：难过小朋友写：我家门前有条水沟很难过。老师批语：老师更难过。５。题目：又 又小朋友写：我...</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2008/05/30/1210426.html</id><title type="text">唐僧的家书</title><summary type="text">唐僧的家书: 亲爱的悟空，我这封信写的很慢，因为知道你看字不快。 我们已经搬家了，不过地址没改，因为搬家的时候把门牌带来了。 这礼拜下两次雨，第一次下3天，第二次下4天。 昨天我们去买比撒，店员问我要切成8片还是12片，我说8片就成了，12片吃不完。 我给你寄去件外套，怕邮寄时超重，把扣子剪下来放口袋里了。 嫦娥生了，因为不知道是男是女，所以不知道你是该当舅舅还是阿姨。 最后告诉你本来想给你寄...</summary><published>2008-05-30T00:35:00Z</published><updated>2008-05-30T00:35:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2008/05/30/1210426.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2008/05/30/1210426.html"/><content type="text">唐僧的家书: 亲爱的悟空，我这封信写的很慢，因为知道你看字不快。 我们已经搬家了，不过地址没改，因为搬家的时候把门牌带来了。 这礼拜下两次雨，第一次下3天，第二次下4天。 昨天我们去买比撒，店员问我要切成8片还是12片，我说8片就成了，12片吃不完。 我给你寄去件外套，怕邮寄时超重，把扣子剪下来放口袋里了。 嫦娥生了，因为不知道是男是女，所以不知道你是该当舅舅还是阿姨。 最后告诉你本来想给你寄...</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2008/05/23/1205389.html</id><title type="text">如何成为一个专家</title><summary type="text">  阻碍你从业余选手变成专家的唯一因素就是:专注。 天才？如果我们投入足够的时间并足够专注，我们都可以一跃（至少接近）成为天才。至少大脑科学家们是这么说的。最棒的是――这样做从来都不晚。</summary><published>2008-05-23T00:47:00Z</published><updated>2008-05-23T00:47:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2008/05/23/1205389.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2008/05/23/1205389.html"/><content type="text">  阻碍你从业余选手变成专家的唯一因素就是:专注。 天才？如果我们投入足够的时间并足够专注，我们都可以一跃（至少接近）成为天才。至少大脑科学家们是这么说的。最棒的是――这样做从来都不晚。</content></entry><entry><id>http://www.cnblogs.com/ghx88/archive/2008/05/21/1204391.html</id><title type="text">[原创]JQuery实现表格的列列交换</title><summary type="text">&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;NewDocument&lt;/TITLE&gt;&lt;SCRIPTLANGUAGE="JavaScript"src="jquery.js"&gt;&lt;/SCRIPT&gt;&lt;SCRIPTLANGUAGE="JavaScript"&gt;$(function(){$("#tb1tr:firsttd").each(...</summary><published>2008-05-21T15:13:00Z</published><updated>2008-05-21T15:13:00Z</updated><author><name>ghx88</name><uri>http://www.cnblogs.com/ghx88/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ghx88/archive/2008/05/21/1204391.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ghx88/archive/2008/05/21/1204391.html"/><content type="text">&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;NewDocument&lt;/TITLE&gt;&lt;SCRIPTLANGUAGE="JavaScript"src="jquery.js"&gt;&lt;/SCRIPT&gt;&lt;SCRIPTLANGUAGE="JavaScript"&gt;$(function(){$("#tb1tr:firsttd").each(...</content></entry></feed>
