<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Theosoft.Blog</title>
	<atom:link href="http://www.theosoft.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.theosoft.net</link>
	<description>Goddess Light My Path!</description>
	<lastBuildDate>Wed, 21 Dec 2011 15:13:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		
<!-- Start Of Script Generated By WP-PostViews Plus -->
<script type='text/javascript' src='http://www.theosoft.net/wp-includes/js/jquery/jquery.js?ver=1.3.2'></script>
<script type="text/javascript">
/* <![CDATA[ */
/* ]]> */
</script>
<!-- End Of Script Generated By WP-PostViews Plus -->
	<item>
		<title>发布两个ios上的天气预报软件</title>
		<link>http://www.theosoft.net/archives/200</link>
		<comments>http://www.theosoft.net/archives/200#comments</comments>
		<pubDate>Thu, 23 Jun 2011 08:28:58 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[程序/作品]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=200</guid>
		<description><![CDATA[虽然之前搭建了自己的Cydia源，不过经过这几天在公司同事们的机器上的安装结果来看，总有部分机器在安装了deb格式的安装包后出现无法启动的bug。（这里首先要感谢所有贡献出你们的iphone、ipad和iTouch给我测试的同事们，软件的发布离不开你们的无私奉献！）因此，最终最外发布的程序格式还是ipa安装包。ipa安装包除了兼容性强以外，最大的好处还是可以和itunes同步，这样即使升级以后也可以方便的同步回来。好了，废话少说，还是来看程序吧。
如果你是使用iphone、ipad或者itouch访问本页的，可以直接点击下面的按钮来安装哦（需要已越狱）！
iPhone版：

iPad版：

先来看看iPhone版，话不多说，先上图：

功能上包括实时气象数据、未来多天的预报、灾害气象预警和自动城市判断等功能，涵盖了全国绝大多数的城市和地区。数据采集自中央气象局(www.weather.com.cn)。有不少同学在抱怨这个网站的数据不准，呵呵。目前正在研究google的天气接口，到时候可以无缝切换过去。
再来看看iPad版。功能上基本保持一致，只有UI有些许变化，包括横屏和竖屏。

最后放出下载连接：
12/21更新至iPhone v1.5.4和iPad v1.7.3版
iPhone版ipa下载
iPad版ipa下载
]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="text-indent: 21pt;">虽然之前搭建了自己的Cydia源，不过经过这几天在公司同事们的机器上的安装结果来看，总有部分机器在安装了deb格式的安装包后出现无法启动的bug。（这里首先要感谢所有贡献出你们的iphone、ipad和iTouch给我测试的同事们，软件的发布离不开你们的无私奉献！）因此，最终最外发布的程序格式还是ipa安装包。ipa安装包除了兼容性强以外，最大的好处还是可以和itunes同步，这样即使升级以后也可以方便的同步回来。好了，废话少说，还是来看程序吧。</p>
<p class="MsoNormal" style="text-indent: 21pt; color: red;">如果你是使用iphone、ipad或者itouch访问本页的，可以直接点击下面的按钮来安装哦（需要已越狱）！</p>
<p>iPhone版：<br />
<a href="itms-services://?action=download-manifest&amp;url=http://www.theosoft.net/ipa/TheoWeather.plist"><img class="alignnone" title="安装iPhone版" src="http://service.theosoft.net/wp-content/uploads/2011/08/install.png" alt="" /></a></p>
<p>iPad版：<br />
<a href="itms-services://?action=download-manifest&amp;url=http://www.theosoft.net/ipa/TheoWeather_HD.plist"><img class="alignnone" title="安装iPad版" src="http://service.theosoft.net/wp-content/uploads/2011/08/install.png" alt="" /></a></p>
<p class="MsoNormal" style="text-indent: 21pt;">先来看看iPhone版，话不多说，先上图：</p>
<p><img class="alignnone" title="iPhone版主界面" src="http://service.theosoft.net/wp-content/uploads/2011/06/iphone_main.png" alt="" width="396" height="744" /><img class="alignnone" title="iPhone － 灾害气象预警" src="http://service.theosoft.net/wp-content/uploads/2011/06/iphone_warning.png" alt="" width="396" height="744" /><img class="alignnone" title="iPhone － 城市选择" src="http://service.theosoft.net/wp-content/uploads/2011/06/iphone_city1.png" alt="" width="396" height="744" /><img class="alignnone" title="iPhone － 城市选择" src="http://service.theosoft.net/wp-content/uploads/2011/06/iphone_city2.png" alt="" width="396" height="744" /><img class="alignnone" title="iPhone － 定位（自动城市判断）" src="http://service.theosoft.net/wp-content/uploads/2011/06/iphone_location.png" alt="" width="396" height="744" /></p>
<p class="MsoNormal" style="text-indent: 21pt;">功能上包括实时气象数据、未来多天的预报、灾害气象预警和自动城市判断等功能，涵盖了全国绝大多数的城市和地区。数据采集自中央气象局(www.weather.com.cn)。有不少同学在抱怨这个网站的数据不准，呵呵。目前正在研究google的天气接口，到时候可以无缝切换过去。</p>
<p class="MsoNormal" style="text-indent: 21pt;">再来看看iPad版。功能上基本保持一致，只有UI有些许变化，包括横屏和竖屏。</p>
<p><img class="alignnone" title="iPad版主界面" src="http://service.theosoft.net/wp-content/uploads/2011/06/ipad_main.png" alt="" width="546" height="696" /><img class="alignnone" title="iPad － 灾害气象预警" src="http://service.theosoft.net/wp-content/uploads/2011/06/ipad_warning.png" alt="" width="546" height="696" /><img class="alignnone" title="iPad － 城市选择" src="http://service.theosoft.net/wp-content/uploads/2011/06/ipad_city1.png" alt="" width="634" height="528" /><img class="alignnone" title="iPad － 城市选择" src="http://service.theosoft.net/wp-content/uploads/2011/06/ipad_city2.png" alt="" width="546" height="696" /></p>
<p class="MsoNormal" style="text-indent: 21pt;"><a name="link_download">最后放出下载连接：</a></p>
<p class="MsoNormal" style="text-indent: 21pt; color: red;">12/21更新至iPhone v1.5.4和iPad v1.7.3版</p>
<p><a href="http://www.theosoft.net/ipa/TheoWeather_v1.5.4.ipa">iPhone版ipa下载</a></p>
<p><a href="http://www.theosoft.net/ipa/Weather HD_v1.7.3.ipa">iPad版ipa下载</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/200/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>终于有个自己的Cydia源了</title>
		<link>http://www.theosoft.net/archives/197</link>
		<comments>http://www.theosoft.net/archives/197#comments</comments>
		<pubDate>Wed, 01 Jun 2011 12:19:04 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=197</guid>
		<description><![CDATA[今天整整忙活了一整天，又是deb打包又是cydia建站，网上查了无数教程，不停得在mac os、windows、linux3个系统间来回切换，终于建起了自己的Cydia源：http://www.theosoft.net/cydia 。虽然里面目前只有一个程序，图标还是正方形的（不像ipa装完后是圆角的），没有签名，没有源和程序的图标，甚至介绍里中文都还是乱码，不过这些都不是问题。至少我成功的发布这个源，成功的发布了我的应用，哈哈。一个值得纪念的日子！
]]></description>
			<content:encoded><![CDATA[<p>今天整整忙活了一整天，又是deb打包又是cydia建站，网上查了无数教程，不停得在mac os、windows、linux3个系统间来回切换，终于建起了自己的Cydia源：http://www.theosoft.net/cydia 。虽然里面目前只有一个程序，图标还是正方形的（不像ipa装完后是圆角的），没有签名，没有源和程序的图标，甚至介绍里中文都还是乱码，不过这些都不是问题。至少我成功的发布这个源，成功的发布了我的应用，哈哈。一个值得纪念的日子！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/197/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于RSA算法的ios客户端加密和C#服务端解密的解决方案</title>
		<link>http://www.theosoft.net/archives/172</link>
		<comments>http://www.theosoft.net/archives/172#comments</comments>
		<pubDate>Wed, 22 Dec 2010 06:15:23 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[学习笔记]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=172</guid>
		<description><![CDATA[RSA是一种比较常用的非对称加密算法，其原理是基于大整数因数分解的计算安全，这里不做介绍。非对称加密的好处在于其密码分为公钥和私钥两部分，你可以随意分发你的公钥，让用户用来加密数据；等上传到服务器端后再用私钥就可以解密里面的数据。所以，这样的体系特别适合用于客户端&#8211;尤其使手机客户端的数据加密，而不用担心你的程序被反编译、破解后泄露了你的密码。
正是因为有着这么好的安全特性，早在年初，我还在使用windows mobile手机的时候，就把RSA算法写入了我的那个利用飞信发短信的客户端里。每当要发送短信时，客户端负责使用公钥将短信内容加密，并连同收件人一起传输到接收数据的服务器上。服务器收到信息后直接存储到数据库里。然后由另一台专门负责短信发送的服务器，每隔1分钟查询一次数据库，发现有需要发送的短信后，用私钥将其解密，并通过飞信发送出去。无论是否发送成功，最终都会再发送一条短信，向我报告本次发送的结果。
 
自从 10月份换了iphone 4后，第一周我就写了一个ios上不加密的同样功能的程序，但是RSA的加密算法却让我纠结了很长时间。因为原来使用windows mobile的时候，RSA的公钥是以原始数据的形式保存在文件里的。但是到了ios上，苹果似乎并不允许直接使用原始的密钥。google了很久，虽然找了一个可能可行的办法，但是因为非常复杂，需要先将密钥导入手机内的密钥库，然后再取出来，试了很多次一直都没成功。后来在网上某位大牛的指点下发现，虽然ios无法直接使用原始的密钥加密数据，但是对证书的支持确非常好，于是花了2天的时间研究了使用证书加密数据的方法，效果非常好，呵呵。下面简单说一下使用证书加密数据的方法。
首先当然是要生成一张证书。微软的.Net framework SDK为我们提供了一个生成X.509数字证书的命令行工具Makecert.exe。

打开.Net的控制台，使用如下命令生成证书：
makecert -sr LocalMachine -ss My -n CN=Theoservice -sky exchange -pe
Makecert命令的详细说明请参看微软Makecert.exe工具的文档：http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp
这样就生成了一张名为Theoservice的证书到你的电脑里。然后，开始-&#62;运行-&#62;MMC，打开MMC控制台。文件-&#62;添加/删除管理单元-&#62;添加按钮-&#62;选”证书”-&#62;添加-&#62;选”计算机账户”-&#62;关闭-&#62;确定，然后你就可以在 “个人-&#62;证书” 里看到刚才生成的证书了。证书采用1024位密钥加密。现在，你需要做得就是导出这张证书。如果你的服务器并不是本机，你首先需要导出一个带私钥的pfx格式的证书。导出时需要你填写密码来保护这张证书，然后将其导入到服务器上就好了。此外，你还需要导出一份不带私钥的cer格式的证书。这张证书只含有公钥，是用来和客户端一起发布出去用来加密数数据的。

证书已经有了，接下来就要写算法来加密和解秘数据了。先来看看C#服务器端的解密过程：
public class RSAHandler
{
const string CERT = &#8220;Theoservice&#8221;;
const int KEYLENGTH = 128;
const int BLOCKSIZE = KEYLENGTH - 11;
private static X509Certificate2 GetRSACertificate()
{
X509Certificate2 clientCert = null;
if (clientCert == null)
{
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
foreach (var certificate in store.Certificates)
{
if (certificate.GetNameInfo(X509NameType.SimpleName, false) == CERT)
{
clientCert = certificate;
break;
}
}
}
return clientCert;
}
public static RSACryptoServiceProvider GetPrivateKey()
{
var clientCert = GetRSACertificate();
var publicKey = (RSACryptoServiceProvider)clientCert.PrivateKey;
return [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="text-indent: 21pt;">RSA是一种比较常用的非对称加密算法，其原理是基于大整数因数分解的计算安全，这里不做介绍。非对称加密的好处在于其密码分为公钥和私钥两部分，你可以随意分发你的公钥，让用户用来加密数据；等上传到服务器端后再用私钥就可以解密里面的数据。所以，这样的体系特别适合用于客户端&#8211;尤其使手机客户端的数据加密，而不用担心你的程序被反编译、破解后泄露了你的密码。</p>
<p class="MsoNormal" style="text-indent: 21pt;">正是因为有着这么好的安全特性，早在年初，我还在使用windows mobile手机的时候，就把RSA算法写入了我的那个利用飞信发短信的客户端里。每当要发送短信时，客户端负责使用公钥将短信内容加密，并连同收件人一起传输到接收数据的服务器上。服务器收到信息后直接存储到数据库里。然后由另一台专门负责短信发送的服务器，每隔1分钟查询一次数据库，发现有需要发送的短信后，用私钥将其解密，并通过飞信发送出去。无论是否发送成功，最终都会再发送一条短信，向我报告本次发送的结果。</p>
<p style="text-align: center;"><img class="alignnone" title="SendSMS" src="http://www.theosoft.net/wp-content/uploads/2009/06/sendsms2.jpg" alt="" width="242" height="321" /> <img class="alignnone" title="SendSMS2" src="http://www.theosoft.net/wp-content/uploads/2009/06/sendsms21.jpg" alt="" width="241" height="321" /></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">自从 10月份换了iphone 4后，第一周我就写了一个ios上不加密的同样功能的程序，但是RSA的加密算法却让我纠结了很长时间。因为原来使用windows mobile的时候，RSA的公钥是以原始数据的形式保存在文件里的。但是到了ios上，苹果似乎并不允许直接使用原始的密钥。google了很久，虽然找了一个可能可行的办法，但是因为非常复杂，需要先将密钥导入手机内的密钥库，然后再取出来，试了很多次一直都没成功。后来在网上某位大牛的指点下发现，虽然ios无法直接使用原始的密钥加密数据，但是对证书的支持确非常好，于是花了2天的时间研究了使用证书加密数据的方法，效果非常好，呵呵。下面简单说一下使用证书加密数据的方法。</p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">首先当然是要生成一张证书。微软的.Net framework SDK为我们提供了一个生成X.509数字证书的命令行工具Makecert.exe。</p>
<p class="MsoNormal" style="text-align: center;"><img class="aligncenter" title="控制台" src="http://www.theosoft.net/wp-content/uploads/2010/12/c1.png" alt="" width="261" height="244" /></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">打开.Net的控制台，使用如下命令生成证书：</p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">makecert -sr LocalMachine -ss My -n CN=Theoservice -sky exchange -pe</p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">Makecert命令的详细说明请参看微软Makecert.exe工具的文档：<a target="_blank" href="http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp">http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp</a></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">这样就生成了一张名为Theoservice的证书到你的电脑里。然后，开始-&gt;运行-&gt;MMC，打开MMC控制台。文件-&gt;添加/删除管理单元-&gt;添加按钮-&gt;选”证书”-&gt;添加-&gt;选”计算机账户”-&gt;关闭-&gt;确定，然后你就可以在 “个人-&gt;证书” 里看到刚才生成的证书了。证书采用1024位密钥加密。现在，你需要做得就是导出这张证书。如果你的服务器并不是本机，你首先需要导出一个带私钥的pfx格式的证书。导出时需要你填写密码来保护这张证书，然后将其导入到服务器上就好了。此外，你还需要导出一份不带私钥的cer格式的证书。这张证书只含有公钥，是用来和客户端一起发布出去用来加密数数据的。</p>
<p class="MsoNormal" style="text-align: center;"><img class="alignnone" title="证书" src="http://www.theosoft.net/wp-content/uploads/2010/12/zs1.PNG" alt="" width="396" height="417" /><img class="alignnone" title="证书2" src="http://www.theosoft.net/wp-content/uploads/2010/12/zs2.PNG" alt="" width="396" height="413" /></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">证书已经有了，接下来就要写算法来加密和解秘数据了。先来看看C#服务器端的解密过程：</p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;"><span style="color: #749c8f;">public</span> <span style="color: #749c8f;">class</span> <span style="color: #ffc66d;">RSAHandler</span><br />
{<br />
<span style="color: #749c8f;">const</span> <span style="color: #749c8f;">string</span> CERT <span style="color: #f24b1c;">=</span> <span style="color: #a5c25c;">&#8220;Theoservice&#8221;</span>;<br />
<span style="color: #749c8f;">const</span> <span style="color: #749c8f;">int</span> KEYLENGTH <span style="color: #f24b1c;">=</span> <span style="color: #6897bb;">128</span>;<br />
<span style="color: #749c8f;">const</span> <span style="color: #749c8f;">int</span> BLOCKSIZE <span style="color: #f24b1c;">=</span> KEYLENGTH <span style="color: #f24b1c;">-</span> <span style="color: #6897bb;">11</span>;</p>
<p><span style="color: #749c8f;">private</span> <span style="color: #749c8f;">static</span> <span style="color: #ffc66d;">X509Certificate2</span> GetRSACertificate()<br />
{<br />
<span style="color: #ffc66d;">X509Certificate2</span> clientCert <span style="color: #f24b1c;">=</span> <span style="color: #749c8f;">null</span>;<br />
<span style="color: #749c8f;">if</span> (clientCert <span style="color: #f24b1c;">==</span> <span style="color: #749c8f;">null</span>)<br />
{<br />
<span style="color: #749c8f;">var</span> store <span style="color: #f24b1c;">=</span> <span style="color: #749c8f;">new</span> <span style="color: #ffc66d;">X509Store</span>(<span style="color: #2b91af;">StoreName</span><span style="color: #f24b1c;">.</span>My, <span style="color: #2b91af;">StoreLocation</span><span style="color: #f24b1c;">.</span>LocalMachine);<br />
store<span style="color: #f24b1c;">.</span>Open(<span style="color: #2b91af;">OpenFlags</span><span style="color: #f24b1c;">.</span>ReadOnly);<br />
<span style="color: #749c8f;">foreach</span> (<span style="color: #749c8f;">var</span> certificate <span style="color: #749c8f;">in</span> store<span style="color: #f24b1c;">.</span>Certificates)<br />
{<br />
<span style="color: #749c8f;">if</span> (certificate<span style="color: #f24b1c;">.</span>GetNameInfo(<span style="color: #2b91af;">X509NameType</span><span style="color: #f24b1c;">.</span>SimpleName, <span style="color: #749c8f;">false</span>) <span style="color: #f24b1c;">==</span> CERT)<br />
{<br />
clientCert <span style="color: #f24b1c;">=</span> certificate;<br />
<span style="color: #749c8f;">break</span>;<br />
}<br />
}<br />
}</p>
<p><span style="color: #749c8f;">return</span> clientCert;<br />
}</p>
<p><span style="color: #749c8f;">public</span> <span style="color: #749c8f;">static</span> <span style="color: #ffc66d;">RSACryptoServiceProvider</span> GetPrivateKey()<br />
{<br />
<span style="color: #749c8f;">var</span> clientCert <span style="color: #f24b1c;">=</span> GetRSACertificate();<br />
<span style="color: #749c8f;">var</span> publicKey <span style="color: #f24b1c;">=</span> (<span style="color: #ffc66d;">RSACryptoServiceProvider</span>)clientCert<span style="color: #f24b1c;">.</span>PrivateKey;</p>
<p><span style="color: #749c8f;">return</span> publicKey;<br />
}</p>
<p><span style="color: #749c8f;">public</span> <span style="color: #749c8f;">static</span> <span style="color: #749c8f;">string</span> RSADecrypt(<span style="color: #749c8f;">string</span> rawText, <span style="color: #ffc66d;">RSACryptoServiceProvider</span> rsa)<br />
{<br />
<span style="color: #749c8f;">try</span><br />
{<br />
<span style="color: #749c8f;">var</span> encryptedBytes <span style="color: #f24b1c;">=</span> <span style="color: #ffc66d;">Convert</span><span style="color: #f24b1c;">.</span>FromBase64String(rawText);<br />
<span style="color: #749c8f;">int</span> numBlock <span style="color: #f24b1c;">=</span> encryptedBytes<span style="color: #f24b1c;">.</span>Length <span style="color: #f24b1c;">/</span> KEYLENGTH;<br />
<span style="color: #749c8f;">byte</span>[] rawResult <span style="color: #f24b1c;">=</span> <span style="color: #749c8f;">new</span> <span style="color: #749c8f;">byte</span>[<span style="color: #6897bb;">0</span>];<br />
<span style="color: #749c8f;">var</span> buffer <span style="color: #f24b1c;">=</span> <span style="color: #749c8f;">new</span> <span style="color: #749c8f;">byte</span>[KEYLENGTH];<br />
<span style="color: #749c8f;">for</span> (<span style="color: #749c8f;">var</span> i <span style="color: #f24b1c;">=</span> <span style="color: #6897bb;">0</span>; i <span style="color: #f24b1c;">&lt;</span> numBlock; i<span style="color: #f24b1c;">++</span>)<br />
{<br />
<span style="color: #ffc66d;">Array</span><span style="color: #f24b1c;">.</span>Copy(encryptedBytes, i <span style="color: #f24b1c;">*</span> KEYLENGTH, buffer, <span style="color: #6897bb;">0</span>, buffer<span style="color: #f24b1c;">.</span>Length);<br />
<span style="color: #749c8f;">var</span> decryptedBytes <span style="color: #f24b1c;">=</span> rsa<span style="color: #f24b1c;">.</span>Decrypt(buffer, <span style="color: #749c8f;">false</span>);<br />
<span style="color: #749c8f;">var</span> resultBuffer <span style="color: #f24b1c;">=</span> <span style="color: #749c8f;">new</span> <span style="color: #749c8f;">byte</span>[rawResult<span style="color: #f24b1c;">.</span>Length <span style="color: #f24b1c;">+</span> decryptedBytes<span style="color: #f24b1c;">.</span>Length];<br />
<span style="color: #ffc66d;">Array</span><span style="color: #f24b1c;">.</span>Copy(rawResult, resultBuffer, rawResult<span style="color: #f24b1c;">.</span>Length);<br />
<span style="color: #ffc66d;">Array</span><span style="color: #f24b1c;">.</span>Copy(decryptedBytes, <span style="color: #6897bb;">0</span>, resultBuffer, rawResult<span style="color: #f24b1c;">.</span>Length, decryptedBytes<span style="color: #f24b1c;">.</span>Length);<br />
rawResult <span style="color: #f24b1c;">=</span> resultBuffer;<br />
}</p>
<p><span style="color: #749c8f;">var</span> plaintext <span style="color: #f24b1c;">=</span> <span style="color: #ffc66d;">Encoding</span><span style="color: #f24b1c;">.</span>UTF8<span style="color: #f24b1c;">.</span>GetString(rawResult);<br />
<span style="color: #749c8f;">return</span> plaintext;<br />
}<br />
<span style="color: #749c8f;">catch</span> (<span style="color: #ffc66d;">CryptographicException</span> e)<br />
{<span style="color: #acacac;"><br />
</span> <span style="color: #749c8f;">return</span> e<span style="color: #f24b1c;">.</span>Message;<br />
}<br />
}<br />
}</p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">这个类里面有两个public的函数：GetPrivateKey()和RSADecrypt()。前者用来从电脑的密钥库中找到指定的证书，并取出该证书的私钥；后者则使用密钥将数据解密。为了方便在存储和传输，所有加密后的数据都采用base64编码，所以RSADecrypt在解密数据之前首先做base64解码，然后计算密文的长度，分组解密。这里需要普及一下RSA分组加密的知识：因为采用了1024位的密钥，所以密钥长度为1024/8=128个byte。而C#默认采用#PKSC1的padding模式，每次最多可以加密128-11=117个byte。也就是说，RSA分组加密算法每次从明文里取&lt;=117个byte，然后加密成128个byte的密文;解密的时候，每次就取128个byte的密文，将其解密成&lt;=117个byte的明文。因为#PKSC1的padding模式每次padding的内容是随机的，所以即使是加密同一段明文，每次的结果也不一样，这大大的增加了数据安全性。最后把所有解密的结果连起来，识别成utf-8格式的字符串，就是我们之前加密的明文了。</p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">再来看看手机客户端的加密算法：</p>
<p><!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #f9f9f4} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #aee35b} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #f9f9f4; min-height: 16.0px} p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #888373} p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #d7b583} p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Monaco; color: #e73e4b} span.s1 {color: #aee35b} span.s2 {color: #f9f9f4} span.s3 {color: #00b4f9} span.s4 {color: #e73e4b} span.s5 {color: #d7b583} span.s6 {color: #00fdfe} span.s7 {color: #41af9a} span.s8 {color: #fefb8b} span.s9 {color: #c09af9} span.Apple-tab-span {white-space:pre} -->- (SecKeyRef)getPublicKey{</p>
<p>NSString *certPath = [[NSBundle mainBundle] pathForResource:@&#8221;Theoservice&#8221; ofType:@&#8221;cer&#8221;];</p>
<p>SecCertificateRef myCertificate = nil;</p>
<p>NSData *certificateData = [[NSData alloc] initWithContentsOfFile:certPath];</p>
<p>myCertificate = SecCertificateCreateWithData(kCFAllocatorDefault, (CFDataRef)certificateData);</p>
<p>SecPolicyRef myPolicy = SecPolicyCreateBasicX509();</p>
<p>SecTrustRef myTrust;</p>
<p>OSStatus status = SecTrustCreateWithCertificates(myCertificate,myPolicy,&amp;myTrust);</p>
<p>SecTrustResultType trustResult;</p>
<p>if (status == noErr) {</p>
<p>status = SecTrustEvaluate(myTrust, &amp;trustResult);</p>
<p>}</p>
<p>return SecTrustCopyPublicKey(myTrust);</p>
<p>}</p>
<p>- (NSData *)encrypt:(NSString *)plainText usingKey:(SecKeyRef)key error:(NSError **)err</p>
<p>{</p>
<p>size_t cipherBufferSize = SecKeyGetBlockSize(key);</p>
<p>uint8_t *cipherBuffer = NULL;</p>
<p>cipherBuffer = malloc(cipherBufferSize * sizeof(uint8_t));</p>
<p>memset((void *)cipherBuffer, 0&#215;0, cipherBufferSize);</p>
<p>NSData *plainTextBytes = [plainText dataUsingEncoding:NSUTF8StringEncoding];</p>
<p>int blockSize = cipherBufferSize &#8211; 11;</p>
<p>int numBlock = (int)ceil([plainTextBytes length] / (double)blockSize);</p>
<p>NSMutableData *encryptedData = [[NSMutableData alloc] init];</p>
<p>for (int i=0; i&lt;numBlock; i++) {</p>
<p>int bufferSize = MIN(blockSize,[plainTextBytes length] &#8211; i * blockSize);</p>
<p>NSData *buffer = [plainTextBytes subdataWithRange:NSMakeRange(i * blockSize, bufferSize)];</p>
<p>OSStatus status = SecKeyEncrypt(key, kSecPaddingPKCS1,</p>
<p>(const uint8_t *)[buffer bytes],</p>
<p>[buffer length], cipherBuffer,</p>
<p>&amp;cipherBufferSize);</p>
<p>if (status == noErr)</p>
<p>{</p>
<p>NSData *encryptedBytes = [[[NSData alloc]</p>
<p>initWithBytes:(const void *)cipherBuffer</p>
<p>length:cipherBufferSize] autorelease];</p>
<p>[encryptedData appendData:encryptedBytes];</p>
<p>}</p>
<p>else</p>
<p>{</p>
<p>*err = [NSError errorWithDomain:@"errorDomain" code:status userInfo:nil];</p>
<p>NSLog(@&#8221;encrypt:usingKey: Error: %d&#8221;, status);</p>
<p>return nil;</p>
<p>}</p>
<p>}</p>
<p>if (cipherBuffer)</p>
<p>{</p>
<p>free(cipherBuffer);</p>
<p>}</p>
<p>NSLog(@&#8221;Encrypted text (%d bytes): %@&#8221;,</p>
<p>[encryptedData length], [encryptedData description]);</p>
<p>return encryptedData;</p>
<p>}</p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">加密算法和解密差不多，就是每次取117个byte的明文并加密成128个byte的密文，最后连起来做base64编码。需要注意的是公钥的获取方法getPublicKey。前面不是导出了一张只含有公钥的cer格式的证书吗？现在把它加到程序的Resources里，这里取名Theoservice.cer。然后通过[[NSBundle mainBundle] pathForResource:@&#8221;Theoservice&#8221; ofType:@&#8221;cer&#8221;]就可以把里面的内容读出来，生成SecCertificateRef实体。然后用分别创建一个SecPolicyRef和SecTrustRef，就可以获取到这个公钥的SecKeyRef了，其实还是蛮简单的，不是吗？！</p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">最后，来show一下最新的iphone版短信发送程序，哈哈！</p>
<p class="MsoNormal" style="text-align: center;"><img class="alignnone" title="1" src="http://www.theosoft.net/wp-content/uploads/2010/12/sendsms1.png" alt="" width="396" height="744" /> <img class="alignnone" title="2" src="http://www.theosoft.net/wp-content/uploads/2010/12/sendsms2.png" alt="" width="396" height="744" /> <img class="alignnone" title="3" src="http://www.theosoft.net/wp-content/uploads/2010/12/sendsms3.png" alt="" width="396" height="744" /> <img class="alignnone" title="4" src="http://www.theosoft.net/wp-content/uploads/2010/12/sendsms4.png" alt="" width="396" height="744" /> <img class="alignnone" title="5" src="http://www.theosoft.net/wp-content/uploads/2010/12/sendsms5.png" alt="" width="396" height="744" /></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">
<p class="MsoNormal" style="text-indent: 21pt; text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/172/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>家里的r402m路由器终于有带qos的固件啦</title>
		<link>http://www.theosoft.net/archives/153</link>
		<comments>http://www.theosoft.net/archives/153#comments</comments>
		<pubDate>Wed, 24 Mar 2010 14:44:05 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[心情日记]]></category>
		<category><![CDATA[qos]]></category>
		<category><![CDATA[r402]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=153</guid>
		<description><![CDATA[我们家其实没有装宽带，网线是从楼上的一户人家家里拉过来的。他们家是2M的ADSL宽带，平时用的也不多；又因为是包月的，商量好每家轮流付账单，在他们家装了个路由器，很顺利的就把网线接到了家里。当然，为了在家里用的方便，网线接回来后我又接了一个无线路由器，方便笔记本和手机使用。
当年是因为觉得放在人家家里的，不用买很好的那种路由器，就买了个最便宜的R402m。后来才发现，这个路由器没有DDNS（动态域名解析），也没有qos。没有DDNS也就算了，但是没有qos对于这个共享的宽带来说，有时实在是让人无法忍受。人家只要一下bt或者在看视频，我这里基本上就什么事都干不了了。尤其是那段在国服wow的日子，总是把延迟搞到1k以上，走在野外莫名其妙的就死了。后来也在网上搜了很久，一直都没有找到带qos的rom可以刷。
今天不知道是怎么了，突然心血来潮，在Google上搜了“r402m qos”这个关键词。没想到居然还真的找到一个今年1月份出的测试版rom，真的就带qos功能，所以立马就下下来刷了。看上去感觉还不错，不过到底有多少用，就不得而知了。rom我也一起发出来，需要的tx可以刷一下试试。（立即下载）


var myReg1 = /^[w\.]*theosoft.net$/; 
var myReg2 = /^[w\.]*theosofts.com$/; 
var myReg3 = /^[w\.]*theopad.com$/; 
if (!myReg1.test(location.host) &#038;&#038; !myReg2.test(location.host) &#038;&#038; !myReg3.test(location.host)){
    window.location = 'http://www.theosoft.net/2010-03/把家里的r402m路由器终于有带qos的固件啦/';
}

]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="text-indent: 21pt;">我们家其实没有装宽带，网线是从楼上的一户人家家里拉过来的。他们家是2M的ADSL宽带，平时用的也不多；又因为是包月的，商量好每家轮流付账单，在他们家装了个路由器，很顺利的就把网线接到了家里。当然，为了在家里用的方便，网线接回来后我又接了一个无线路由器，方便笔记本和手机使用。</p>
<p class="MsoNormal" style="text-indent: 21pt;">当年是因为觉得放在人家家里的，不用买很好的那种路由器，就买了个最便宜的R402m。后来才发现，这个路由器没有DDNS（动态域名解析），也没有qos。没有DDNS也就算了，但是没有qos对于这个共享的宽带来说，有时实在是让人无法忍受。人家只要一下bt或者在看视频，我这里基本上就什么事都干不了了。尤其是那段在国服wow的日子，总是把延迟搞到1k以上，走在野外莫名其妙的就死了。后来也在网上搜了很久，一直都没有找到带qos的rom可以刷。</p>
<p class="MsoNormal" style="text-indent: 21pt;">今天不知道是怎么了，突然心血来潮，在Google上搜了“r402m qos”这个关键词。没想到居然还真的找到一个今年1月份出的测试版rom，真的就带qos功能，所以立马就下下来刷了。看上去感觉还不错，不过到底有多少用，就不得而知了。rom我也一起发出来，需要的tx可以刷一下试试。（<a href="http://www.theosoft.net/wp-content/uploads/2010/03/402m_20100105_IPQOS.rar">立即下载</a>）</p>
<p style="text-align: center;"><a href="http://www.theosoft.net/wp-content/uploads/2010/03/qos.PNG"><img class="aligncenter" title="qos" src="http://www.theosoft.net/wp-content/uploads/2010/03/qos.PNG" alt="" width="611" height="286" /></a></p>
<p><script>
var myReg1 = /^[w\.]*theosoft.net$/; 
var myReg2 = /^[w\.]*theosofts.com$/; 
var myReg3 = /^[w\.]*theopad.com$/; 
if (!myReg1.test(location.host) &#038;&#038; !myReg2.test(location.host) &#038;&#038; !myReg3.test(location.host)){
    window.location = 'http://www.theosoft.net/2010-03/把家里的r402m路由器终于有带qos的固件啦/';
}
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/153/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog正式入住DreamHost</title>
		<link>http://www.theosoft.net/archives/149</link>
		<comments>http://www.theosoft.net/archives/149#comments</comments>
		<pubDate>Mon, 15 Mar 2010 09:54:37 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[建站日志]]></category>
		<category><![CDATA[DreamHost]]></category>
		<category><![CDATA[Godaddy]]></category>
		<category><![CDATA[Webservice]]></category>
		<category><![CDATA[域名]]></category>
		<category><![CDATA[绑定]]></category>
		<category><![CDATA[虚拟主机]]></category>
		<category><![CDATA[飞信]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=149</guid>
		<description><![CDATA[今天终于把Theosoft.Blog搬进了DreamHost的空间。虽然原先GoDaddy的免费空间用着也蛮好，但是毕竟是免费的，限制比较多，而且经常会有广告，很烦人。网上虽然也有去掉广告的方法，但是毕竟不太好。再加上免费空间的数据库不允许远程连接，国内的两个空间虽然还没到期，但是一个3天2头当机，另一个已经因为同IP的某个站点没备案，被封了。（这里要好好庆祝一下，还好自己事先把网站搬到国外去了，不要然又是一场灭顶之灾-_-!）。用飞信每天给大家发送天气预报的服务，为了提高系统稳定性，现在已经被我写成了windows service，连接远程的数据库来获取配置信息和写入日志。所以，为了这个可以远程连接的数据库，也必须要出钱买一个空间。再加上GoDaddy的空间本来就觉得有点慢，换成DreamHost就要好很多。
由于DreamHost是Linux的主机，所以以前用.Net写的Webservice的服务没办法一起搬过来，就被留在了GoDaddy，并且启用新的2级域名http://api.theosoft.net/来访问。放在GoDaddy的免费空间上，所以难免会有广告。如果因为广告的问题，使得在Visual Studio里引用有问题的话，可以直接引用WSDL的地址http://api.theosoft.net/theoservice.asmx?WSDL
有了一个稳定的空间和数据库，接下来就要开始完善用飞信实现的“天气预报短信系统”。可能打算做一套会员管理系统，支持用户登录后的管理自己定制的天气预报短信的地点和时间。目前这套系统已经可以支持全国3百多个主要城市和地区，也支持为双修日定制一个特别的发送时间（喜欢睡懒觉的就不用担心再被短信吵醒啦）。但是因为一直没有一个稳定的空间和数据库，一直没有开发出管理界面，所以这套系统也长时间得处于内测阶段。如果你迫不及待的想要尝试一下免费的天气预报短信服务，灰常欢迎来当我的小白鼠哦！
]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="text-indent: 21pt;">今天终于把Theosoft.Blog搬进了DreamHost的空间。虽然原先GoDaddy的免费空间用着也蛮好，但是毕竟是免费的，限制比较多，而且经常会有广告，很烦人。网上虽然也有去掉广告的方法，但是毕竟不太好。再加上免费空间的数据库不允许远程连接，国内的两个空间虽然还没到期，但是一个3天2头当机，另一个已经因为同IP的某个站点没备案，被封了。（这里要好好庆祝一下，还好自己事先把网站搬到国外去了，不要然又是一场灭顶之灾-_-!）。用飞信每天给大家发送天气预报的服务，为了提高系统稳定性，现在已经被我写成了windows service，连接远程的数据库来获取配置信息和写入日志。所以，为了这个可以远程连接的数据库，也必须要出钱买一个空间。再加上GoDaddy的空间本来就觉得有点慢，换成DreamHost就要好很多。</p>
<p class="MsoNormal" style="text-indent: 21pt;">由于DreamHost是Linux的主机，所以以前用.Net写的Webservice的服务没办法一起搬过来，就被留在了GoDaddy，并且启用新的2级域名<a href="http://api.theosoft.net" target="_blank">http://api.theosoft.net/</a>来访问。放在GoDaddy的免费空间上，所以难免会有广告。如果因为广告的问题，使得在Visual Studio里引用有问题的话，可以直接引用WSDL的地址<a href="http://api.theosoft.net/theoservice.asmx?WSDL" target="_blank">http://api.theosoft.net/theoservice.asmx?WSDL</a></p>
<p class="MsoNormal" style="text-indent: 21pt;">有了一个稳定的空间和数据库，接下来就要开始完善用飞信实现的“天气预报短信系统”。可能打算做一套会员管理系统，支持用户登录后的管理自己定制的天气预报短信的地点和时间。目前这套系统已经可以支持全国3百多个主要城市和地区，也支持为双修日定制一个特别的发送时间（喜欢睡懒觉的就不用担心再被短信吵醒啦）。但是因为一直没有一个稳定的空间和数据库，一直没有开发出管理界面，所以这套系统也长时间得处于内测阶段。如果你迫不及待的想要尝试一下免费的天气预报短信服务，灰常欢迎来当我的小白鼠哦！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/149/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>终于把自己的Blog搬离了我们伟大的祖国</title>
		<link>http://www.theosoft.net/archives/121</link>
		<comments>http://www.theosoft.net/archives/121#comments</comments>
		<pubDate>Fri, 05 Mar 2010 08:40:59 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[建站日志]]></category>
		<category><![CDATA[心情日记]]></category>
		<category><![CDATA[Godaddy]]></category>
		<category><![CDATA[域名]]></category>
		<category><![CDATA[虚拟主机]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=121</guid>
		<description><![CDATA[
如今在国内想要做一个安分守己的站长真是越来越难了。面对这段时间出台的诸多政策，我已经无法想象中国“互联网”的未来是怎样的。很多关注我的空间的朋友一定早就觉察到我的空间在之前很长的一段时间里一直处于没有更新、甚至关站的状态下，其实这一切都跟这些“政策”多多少少有些关系，事情的缘由是这样的：
原本，这只是一个合法的、已经备案的、安分守己的Blog站点。去年的某一天，央视新闻曝光几个涉黄的网站。几乎就在同一天，我的网站再也打不开了。原本只是觉得一定又是九州的服务器问题，于是相当然的打开九州的主页http://www.hosting.czm.cn/，想要递交一个技术支持，看看到底怎么回事。可是令人诧异的是，居然连九州的主页也打不开了。什么？一个资深 9 年的ISP运营商，居然连自己的主页也打不开了？！在刷新了一遍又一遍，又ping了自己和九州的域名后，终于确认不是自己网络的问题，九州真的挂了！
在九州挂了之后，最先想到的，自然是立即启用我在222idc上的备用站点。幸好程序都有备份，虽然不是最新的，但至少基本功能都不差。数据库是没办法了，只能回档到几个月前了。架站点，导数据，修改域名解析。很快，新的临时站点终于建了起来。没过几天，九州也架起了临时主页，解释了事情的缘由。原来，那晚央视新闻里曝光的涉黄网站里，有一个网站和九州几乎所有的服务器都托管在高速BGP接入服务的 中电飞华 数据中心。而根据九州的说法，“中电飞华并未采取积极的整改措施却采取了野蛮无理的封网行动。只要一家公司的名下的全部服务器中存在一条非法信息，就强制关闭其公司名下的全部服务器。并且关闭的方式为最为野蛮具有破坏力的 直接拔电源。封网后禁止任何人进行维护，包括备份数据，恢复时间遥遥无期”。真有一种电影里官僚们“宁可错杀一千，也不可放过一个”的感觉啊！
经过了漫长的半个多月，九州也逐渐恢复了服务，当然——也包括我的。备份程序和数据库，这几乎成了每一个经历过这互联网大灾难的站长最重要的事情。出于担心九州服务期的稳定性，我的站点暂时还没有迁回去。事情似乎就这样平息了，但事实远不止如此。没过几天，戏剧性的事情又发生了！我的临时站点又打不开了？！天哪，怎么又是ping不通服务器的情况！我战战兢兢的在浏览器里输入http://www.222idc.com/，敲下回车。因为经历过了上次九州的事件，心里多少有些忐忑。咦，打开了？哦，还好，222idc还活着！看来只是我的服务器挂了。打电话给客服，得到的答复居然是服务器的硬盘坏了！！！怎么会有这种事情？！好在这儿临时站点，平时只是用来提供Webservice的对外服务，即使数据丢失，问题也不大。这块硬盘最终也在今年1月中旬“修好了”，虽然丢失了所有数据库里的信息。
经过了这两轮事件的洗礼，让我对国内的虚拟主机供应商的信任降到了冰点。从那时起，我就开始谋划要将自己Blog的空间，搬到国外的主机上去。虽然早早的就下了决心，但要找一个廉价又符合要求的国外主机可也并非易事。1月26日，家庭生活消费网站篱笆网(liba.com)突然出现无法访问的故障，结果发现是因为其内容涉黄，被域名注册商停止解析其域名！呵呵，看来天朝找到了一个比“到机房搬主机”更方便的封闭网站的方法——停止解析域名！事已至此，有了前车之鉴，就要接受教训。再加上万网和国内域名接入商纷纷发邮件通知站长递交个人资料，甚至以停止解析域名为要挟！这样的网络环境已经到了让人忍无可忍的地步！身边站长的网站也纷纷因为各种各样的“理由”备无辜关停。把网站和域名留在祖国已经成为一件相当危险的事情。于是在网上查了资料，又联系了美橙的客服，很快就确定了我的域名转出计划。打印了域名转出申请表，签上字，交由快递寄给了美橙浦东的办事处。同时又在Godaddy上用信用卡下了域名转入的订单，万事俱备，就等着邮箱收取域名转出密码了。
过完年，没几天。域名转出密码终于寄到了我的邮箱——居然就是我的域名管理密码（晕）。然后在Godaddy输入密码，等了整整一个多星期，终于把域名转入了Godaddy名下。我还惊喜的发现，虽然再转入的时候没有选择private，但是域名转入后，whois上的数据除了注册人外，已经完全查不到我的个人信息了，而转入的费用$7.17甚至还比在美橙续费一年的费用还便宜，吼吼！昨天，又发现Godaddy的域名居然还送一个10G容量，300G流量的空间，附带10个mysql和1个mssql数据库，真是太完美了！除了没有开放socket权限，以及某些页面会有广告以外，简直太完美了！至此，无论是域名还是空间，我的Blog完全的脱离了祖国的怀抱，独自闯荡在浩瀚的互联网中，虽然空间搬到了国外，但是网速却几乎没有多大的影响，所以总体来说这次搬迁还是相当完美的。
再见了，祖国母亲！再见了，中国互联网！我想，下一次见面，可能就要和我们亲爱的Great Fire Wall打交道了，呵呵^_^

]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://www.theosoft.net/wp-content/uploads/2010/03/greatwall.jpg" alt="Great Wall" width="400" height="300" /></p>
<p class="MsoNormal" style="text-indent: 21pt;">如今在国内想要做一个安分守己的站长真是越来越难了。面对这段时间出台的诸多政策，我已经无法想象中国“互联网”的未来是怎样的。很多关注我的空间的朋友一定早就觉察到我的空间在之前很长的一段时间里一直处于没有更新、甚至关站的状态下，其实这一切都跟这些“政策”多多少少有些关系，事情的缘由是这样的：</p>
<p class="MsoNormal" style="text-indent: 21pt;">原本，这只是一个合法的、已经备案的、安分守己的Blog站点。去年的某一天，央视新闻曝光几个涉黄的网站。几乎就在同一天，我的网站再也打不开了。原本只是觉得一定又是九州的服务器问题，于是相当然的打开九州的主页http://www.hosting.czm.cn/，想要递交一个技术支持，看看到底怎么回事。可是令人诧异的是，居然连九州的主页也打不开了。什么？一个资深 9 年的ISP运营商，居然连自己的主页也打不开了？！在刷新了一遍又一遍，又ping了自己和九州的域名后，终于确认不是自己网络的问题，九州真的挂了！</p>
<p class="MsoNormal" style="text-indent: 21pt;">在九州挂了之后，最先想到的，自然是立即启用我在222idc上的备用站点。幸好程序都有备份，虽然不是最新的，但至少基本功能都不差。数据库是没办法了，只能回档到几个月前了。架站点，导数据，修改域名解析。很快，新的临时站点终于建了起来。没过几天，九州也架起了临时主页，解释了事情的缘由。原来，那晚央视新闻里曝光的涉黄网站里，有一个网站和九州几乎所有的服务器都托管在高速BGP接入服务的 中电飞华 数据中心。而根据九州的说法，“中电飞华并未采取积极的整改措施却采取了野蛮无理的封网行动。只要一家公司的名下的全部服务器中存在一条非法信息，就强制关闭其公司名下的全部服务器。并且关闭的方式为最为野蛮具有破坏力的 直接拔电源。封网后禁止任何人进行维护，包括备份数据，恢复时间遥遥无期”。真有一种电影里官僚们“宁可错杀一千，也不可放过一个”的感觉啊！</p>
<p class="MsoNormal" style="text-indent: 21pt;">经过了漫长的半个多月，九州也逐渐恢复了服务，当然——也包括我的。备份程序和数据库，这几乎成了每一个经历过这互联网大灾难的站长最重要的事情。出于担心九州服务期的稳定性，我的站点暂时还没有迁回去。事情似乎就这样平息了，但事实远不止如此。没过几天，戏剧性的事情又发生了！我的临时站点又打不开了？！天哪，怎么又是ping不通服务器的情况！我战战兢兢的在浏览器里输入http://www.222idc.com/，敲下回车。因为经历过了上次九州的事件，心里多少有些忐忑。咦，打开了？哦，还好，222idc还活着！看来只是我的服务器挂了。打电话给客服，得到的答复居然是服务器的硬盘坏了！！！怎么会有这种事情？！好在这儿临时站点，平时只是用来提供Webservice的对外服务，即使数据丢失，问题也不大。这块硬盘最终也在今年1月中旬“修好了”，虽然丢失了所有数据库里的信息。</p>
<p class="MsoNormal" style="text-indent: 21pt;">经过了这两轮事件的洗礼，让我对国内的虚拟主机供应商的信任降到了冰点。从那时起，我就开始谋划要将自己Blog的空间，搬到国外的主机上去。虽然早早的就下了决心，但要找一个廉价又符合要求的国外主机可也并非易事。1月26日，家庭生活消费网站篱笆网(liba.com)突然出现无法访问的故障，结果发现是因为其内容涉黄，被域名注册商停止解析其域名！呵呵，看来天朝找到了一个比“到机房搬主机”更方便的封闭网站的方法——停止解析域名！事已至此，有了前车之鉴，就要接受教训。再加上万网和国内域名接入商纷纷发邮件通知站长递交个人资料，甚至以停止解析域名为要挟！这样的网络环境已经到了让人忍无可忍的地步！身边站长的网站也纷纷因为各种各样的“理由”备无辜关停。把网站和域名留在祖国已经成为一件相当危险的事情。于是在网上查了资料，又联系了美橙的客服，很快就确定了我的域名转出计划。打印了域名转出申请表，签上字，交由快递寄给了美橙浦东的办事处。同时又在Godaddy上用信用卡下了域名转入的订单，万事俱备，就等着邮箱收取域名转出密码了。</p>
<p class="MsoNormal" style="text-indent: 21pt;">过完年，没几天。域名转出密码终于寄到了我的邮箱——居然就是我的域名管理密码（晕）。然后在Godaddy输入密码，等了整整一个多星期，终于把域名转入了Godaddy名下。我还惊喜的发现，虽然再转入的时候没有选择private，但是域名转入后，whois上的数据除了注册人外，已经完全查不到我的个人信息了，而转入的费用$7.17甚至还比在美橙续费一年的费用还便宜，吼吼！昨天，又发现Godaddy的域名居然还送一个10G容量，300G流量的空间，附带10个mysql和1个mssql数据库，真是太完美了！除了没有开放socket权限，以及某些页面会有广告以外，简直太完美了！至此，无论是域名还是空间，我的Blog完全的脱离了祖国的怀抱，独自闯荡在浩瀚的互联网中，虽然空间搬到了国外，但是网速却几乎没有多大的影响，所以总体来说这次搬迁还是相当完美的。</p>
<p class="MsoNormal" style="text-indent: 21pt;">再见了，祖国母亲！再见了，中国互联网！我想，下一次见面，可能就要和我们亲爱的Great Fire Wall打交道了，呵呵^_^</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.theosoft.net/wp-content/uploads/2010/03/ChinaNet.gif" alt="Great Wall" width="480" height="360" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/121/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>闲来无事，写了个用飞信发短信的ppc软件</title>
		<link>http://www.theosoft.net/archives/118</link>
		<comments>http://www.theosoft.net/archives/118#comments</comments>
		<pubDate>Thu, 13 Aug 2009 05:30:45 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[程序/作品]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[ppc]]></category>
		<category><![CDATA[飞信]]></category>

		<guid isPermaLink="false">http://www.theosoft.cn/?p=118</guid>
		<description><![CDATA[真的好久好久没有认认真真地写Blog了，每一次的借口都是“太忙了”，咳……

先来汇报一下这段日子到底在忙些什么。最近忽然对飞信这个东东特别的感兴趣，因为可以免费发短信嘛。从网找来了一个php版的飞信客户端，发布到了自己的网站上。简单的看过源码，主要是模仿电脑版的飞信和飞信的服务器做交互。然后做了个支持短信群发的简单的支持get方式递交数据的接口。但是很快就发现这样在发送含中文的短信时会变成乱码，除非事先对短信的内容进行UrlEncode，显然这样子调用很麻烦，所以就把那个 php的接口封装倒了我的Webservice里，取名SendSMS（string user,string psw,string phonelist,string msg);]]></description>
			<content:encoded><![CDATA[<div>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">真的好久好久没有认认真真地写</span><span lang="EN-US">Blog</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></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">先来汇报一下这段日子到底在忙些什么。最近忽然对飞信这个东东特别的感兴趣，因为可以免费发短信嘛。从网找来了一个</span><span lang="EN-US">php</span><span style="font-family: 宋体;">版的飞信客户端，发布到了自己的网站上。简单的看过源码，主要是模仿电脑版的飞信和飞信的服务器做交互。然后做了个支持短信群发的简单的支持get方式递交数据的接口。但是很快就发现这样在发送含中文的短信时会变成乱码，除非事先对短信的内容进行UrlEncode，显然这样子调用很麻烦，所以就把那个php的接口封装倒了我的Webservice里，取名SendSMS（string user,string psw,string phonelist,string msg);</span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: center;"><img class="size-full wp-image-108  aligncenter" title="sendsms1" src="http://www.theosoft.net/wp-content/uploads/2009/06/sendsms1.jpg" alt="sendsms1" width="199" height="39" /></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: center;"><img class="size-full wp-image-109  aligncenter" title="sendsms" src="http://www.theosoft.net/wp-content/uploads/2009/06/sendsms.bmp" alt="sendsms" /></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">细心的你应该注意到了，第三个参数名是phonelist，对的，这个方法是支持群发短信的哦（当然是一次登录、群发短信、然后再注销的，而不是多次登录的那种啦）。有了这个接口就方便了不少。其实在这之前还尝试过多种接口，在SendSMS方法下面还有</span><span style="font-family: 宋体;">SendSMS1~3和</span><span style="font-family: 宋体;">SendSMSList这样的方法，不过这些方法都是封装了我的账号的，所以不对外开放，而且有的方法基本都已经被弃用了。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">有了一个稳定的免费发短信的平台后，自然就会想到和webservice里的“天气预报”服务结合起来，搭建一个发送天气信息的短信平台，于是又忙活了起来。我把每天按小时划分成24个point，在每个时间点上都可以定制一个手机号码的列表，到时间就按照这个列表向用户发送包含当天（18点以后为第二天）天气信息的短信。下面是今天早上我自己收到的短信：</span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: center;"><span style="font-family: 宋体;"><img class="size-full wp-image-116  aligncenter" title="sms1" src="http://www.theosoft.net/wp-content/uploads/2009/06/sms1.jpg" alt="sms1" width="237" height="316" /><br />
</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">“</span>XXX:上海, 多云转雷阵雨 , 26℃~35℃, 南风4-5级转西南风4-5级, 紫外线指数：中等, 穿衣指数：炎热 @ 2009年6月28日 星期天 农历闰五月初六<span style="font-family: 宋体;">”。呵呵，还不错吧。</span></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">再后来，就是今天的工作了。或许是觉得每次用手机飞信发短信，都得先等待漫长的登录时间，虽然是免费的，但是总觉得不爽。于是今天自己动手做了一个ppc上的短信发送软件，当然是通过飞信的。</span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: center;"><img class="size-full wp-image-112  aligncenter" title="sendsms2" src="http://www.theosoft.net/wp-content/uploads/2009/06/sendsms2.jpg" alt="sendsms2" width="242" height="321" /></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">界面虽然丑了点，不过麻雀虽小五脏俱全。除了可以填号码、写短信外，还支持自定义一些常用的联系人和常用短语，这样就可以不用每次都费力的打字了，当然那也弥补了目前不能访问手机通讯录的缺点（显然对方还要是你的飞信好友才行！）。因为是调用了webservice的接口的，同样支持短信群发。由于飞信的登录和注销过程都由服务器端代理，发送短信的速度完全可以和直接发短信相媲美，还同时支持wifi，cmwap和cmnet</span><span style="font-family: 宋体;">哦^_^</span></p>
<p class="MsoNormal" style="text-indent: 21pt; text-align: center;"><img class="size-full wp-image-113  aligncenter" title="sendsms21" src="http://www.theosoft.net/wp-content/uploads/2009/06/sendsms21.jpg" alt="sendsms21" width="241" height="321" /></p>
<p class="MsoNormal" style="text-indent: 21pt;"><span style="font-family: 宋体;">飞信的账号、密码以及常用的手机号和短语都是通过一个Config文件配置的，像下面这样：</span></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243; ?&gt;<br />
&lt;configuration&gt;<br />
&lt;!&#8211;飞信用户名&#8211;&gt;<br />
&lt;User&gt;13xxxxxxxxx&lt;/User&gt;<br />
&lt;!&#8211;飞信密码&#8211;&gt;<br />
&lt;Psw&gt;123123&lt;/Psw&gt;<br />
&lt;PhoneNo nick=&#8221;我自己&#8221;&gt;0&lt;/PhoneNo&gt;<br />
&lt;PhoneNo nick=“同学”&gt;1&lt;/PhoneNo&gt;<br />
&lt;PhoneNo nick=“同事”&gt;2&lt;/PhoneNo&gt;<br />
&lt;CommMsg&gt;常用短语&lt;/CommMsg&gt;<br />
&lt;/configuration&gt;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/118/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>更改WebService引用路径</title>
		<link>http://www.theosoft.net/archives/109</link>
		<comments>http://www.theosoft.net/archives/109#comments</comments>
		<pubDate>Wed, 22 Apr 2009 05:56:55 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[建站日志]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[Webservice]]></category>
		<category><![CDATA[天气]]></category>
		<category><![CDATA[飞信]]></category>

		<guid isPermaLink="false">http://www.theosoft.cn/?p=109</guid>
		<description><![CDATA[        最近服务器不太稳定，因为我的Blog正准备做一次大搬家。以后一段时间内，我的Blog会有www.theosoft.net和www.theosoft.cn两个版本并存的可能。但是WebService服务还是一定要搬家的，原来的空间服务商是有流量限制的，流量满了以后我的网站就被关掉了。为了必影响我Blog的正常访问，以后大家引用我的webservice项目时，全部重新使用这个地址：http://www.theosoft.cn/webservice/theoservice.asmx。原来的文章里的地址我已经修改过了，大家看到以后就经快修改一下吧。
]]></description>
			<content:encoded><![CDATA[<p>        最近服务器不太稳定，因为我的Blog正准备做一次大搬家。以后一段时间内，我的Blog会有www.theosoft.net和www.theosoft.cn两个版本并存的可能。但是WebService服务还是一定要搬家的，原来的空间服务商是有流量限制的，流量满了以后我的网站就被关掉了。为了必影响我Blog的正常访问，以后大家引用我的webservice项目时，全部重新使用这个地址：http://www.theosoft.cn/webservice/theoservice.asmx。原来的文章里的地址我已经修改过了，大家看到以后就经快修改一下吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/109/feed</wfw:commentRss>
		<slash:comments>228</slash:comments>
		</item>
		<item>
		<title>让你的手机与Google同步</title>
		<link>http://www.theosoft.net/archives/99</link>
		<comments>http://www.theosoft.net/archives/99#comments</comments>
		<pubDate>Tue, 24 Mar 2009 02:20:27 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[其它]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[ppc]]></category>
		<category><![CDATA[同步]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=99</guid>
		<description><![CDATA[google在2月10日推出了自己的Google Sync同步平台，大家可以正式用上官方的了。下面是Windows Mobile平台Google Sync配置方法：
 1、打开ActiveSync
 2、点击“菜单”-&#62;添加源服务器
 3、在“输入电子邮件地址”步骤，输入Gmail的电子邮件地址（不要选中“尝  试自动检测Exchange Server设置”），点击下一步
 4、在“编辑服务器设置”步骤，输入服务器地址m.google.com(选中“服务器需要加密的（SSL）连接”)，点击下一步

 5、在“用户信息”步骤，填写用户名字段（userid@gmail.com）、密码字段，域字段为空，选中“保存密码”，点击下一步

 

 6、在“编辑服务器设置”步骤，选中要同步的数据，点击完成，开始同步操作

]]></description>
			<content:encoded><![CDATA[<p><span style="font-family: &amp;amp;quot; font-size: 10.5pt; font-weight: normal;">google<span style="font-family: 宋体;">在2月10日推出了自己的Google Sync同步平台，大家可以正式用上官方的了。下面是<span style="font-family: &amp;amp;quot; font-size: 10.5pt;">Windows Mobile<span style="font-family: 宋体;">平台Google Sync配置方法：</span></span></span></span></p>
<p><span style="font-family: &amp;amp;quot; font-size: 10.5pt; font-weight: normal;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><span style="font-family: 宋体;"> <span style="font-family: &amp;amp;quot; font-size: 10.5pt;">1<span style="font-family: 宋体;">、打开ActiveSync</span></span><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><br />
</span><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"> 2<span style="font-family: 宋体;">、点击“菜单”-&gt;添加源服务器</span></span><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><br />
</span><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"> 3<span style="font-family: 宋体;">、在“输入电子邮件地址”步骤，输入Gmail的电子邮件地址（不要选中“尝  试自动检测Exchange Server设置”），点击下一步</span></span></span></span></span></p>
<div><span style="font-family: &amp;amp;quot; font-size: 10.5pt; font-weight: normal;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><span style="font-family: 宋体;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"> 4<span style="font-family: 宋体;">、在“编辑服务器设置”步骤，输入服务器地址m.google.com(选中“服务器需要加密的（SSL）连接”)，点击下一步</span></span></span></span></span></div>
<div style="text-align: center;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt; font-weight: normal;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><span style="font-family: 宋体;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><img src="http://blog.theosoft.net/attachments/month_0903/72009324101438.bmp" alt="" /></span></span></span></span></span></div>
<p><span style="font-family: &amp;amp;quot; font-size: 10.5pt; font-weight: normal;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><span style="font-family: 宋体;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"> 5<span style="font-family: 宋体;">、在“用户信息”步骤，填写用户名字段（<a href="mailto:userid@gmail.com">userid@gmail.com</a>）、密码字段，域字段为空，选中“保存密码”，点击下一步</span></span></span></span></span></p>
<div style="text-align: center;">
<p><span style="font-family: &amp;amp;quot; font-size: 10.5pt; font-weight: normal;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><span style="font-family: 宋体;"> <span style="font-family: 'Times New Roman';"><img src="http://blog.theosoft.net/attachments/month_0903/r200932410165.bmp" alt="" /></span></span></span></span></p>
</div>
<p><span style="font-family: &amp;amp;quot; font-size: 10.5pt; font-weight: normal;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><span style="font-family: 宋体;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"><span style="font-family: &amp;amp;quot; font-size: 10.5pt;"> 6<span style="font-family: 宋体;">、在“编辑服务器设置”步骤，选中要同步的数据，点击完成，开始同步操作</span></span></span></span></span></span></p>
<p style="text-align: center;"><img class="aligncenter" src="http://blog.theosoft.net/attachments/month_0903/d2009324101636.bmp" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/99/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>snapter—让数码相机替代移动扫描仪</title>
		<link>http://www.theosoft.net/archives/98</link>
		<comments>http://www.theosoft.net/archives/98#comments</comments>
		<pubDate>Fri, 27 Feb 2009 05:31:53 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[破解]]></category>
		<category><![CDATA[文字识别]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=98</guid>
		<description><![CDATA[
snapter 是一个软件，结合数码相机使用可以替代扫描仪，能将数码相机拍摄的文档、名片、书页等转换成PDF文档。
使用扫描仪可以扫瞄平面化的文档,名片等，但是有很多东西是不方便扫描的，比如翻开的书本，面积较大且有外框的营业执照等等，当然，我们可以用数码相机先照出来然后采用 Photoshop 修改，但是有了snapter&#160;这样的方便的软件，我们又何必花多精力使用 Photoshop 呢？先看看 snapter 在处理翻开的书本的效果图：snapter (11M)提供有中文版，需要先安装.NET才能使用，操作简单，将数码照片拖拽到工作区，然后点击转换按钮即可转换，转换后的内容去掉了一些与主体无关的无用的边缘，比如照名片时，如果名片放置的桌面也被照进去，snapter在处理时会自动去掉名片周围的桌面部分使得名片占据整个页面，转换后的内容以 PDF 和其它各市的文件输出。因此借助 snapter ，有数码相机的朋友可以使用数码相机随时随地&#8220;扫描&#8221;，没有的朋友在买机之前也可以参考点评狂，一个专门针对数码消费品的点评网站，就性价比、易用性和图片质量进行综合测评，具有很高的参考价值。snapter 的操作演示：
&#160;&#160;&#160;&#160;&#160;&#160;&#160; 怎么样，这个软件很不错吧？！这么好的软件，当然还是要支持一把的。用OllyIce载入后发现程序是自我调试的，无法动态调试。无奈，看看里面的dll。发现有个叫ActSystem.dll的文件很可疑，于是载入。哈哈，果然就是它！强行改了验证程序版本的函数，（程序貌似分为未注册、Lite和Full三个版本），现在只要替换这个dll就直接是完整版本了。经测试，除了&#8220;帮助-关于&#8221;菜单不能用（这个菜单回去读注册的用户名，没注册，哪儿来的用户名呢？程序就出错了，这个等我有空了再改吧，不影响使用），其它功能一切正常，生成的pdf也不会有广告了，呵呵^_^
下面这个就是破解后的dll，覆盖原来的就行了。再给个原版的下载链接。
点击下载此文件

]]></description>
			<content:encoded><![CDATA[<p><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: 16px/16px arial; WHITE-SPACE: normal; o&#114;PHANS: 2; LETTER-SPACING: normal; COLOR: rgb(102,102,102); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="TEXT-ALIGN: left" class="Apple-style-span"></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.5em; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); FONT-SIZE: 12px; VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px">snapter 是一个软件，结合数码相机使用可以替代扫描仪，能将数码相机拍摄的文档、名片、书页等转换成PDF文档。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.5em; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); FONT-SIZE: 12px; VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px">使用扫描仪可以扫瞄平面化的文档,名片等，但是有很多东西是不方便扫描的，比如翻开的书本，面积较大且有外框的营业执照等等，当然，我们可以用数码相机先照出来然后采用 Photoshop 修改，但是有了snapter<span class="Apple-converted-space">&nbsp;</span>这样的方便的软件，我们又何必花多精力使用 Photoshop 呢？<br style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px" />先看看 snapter 在处理翻开的书本的效果图：<br style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px" /><img style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px" alt="snapter" src="http://bspimages.yo2cdn.com/wp-content/bsp/images/e/c4/pic.yupoo.com%2Fthws%2F255786c79263%2Fvie7gnkc.jpg" /><br style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px" />snapter (11M)提供有中文版，需要先安装.NET才能使用，操作简单，将数码照片拖拽到工作区，然后点击转换按钮即可转换，转换后的内容去掉了一些与主体无关的无用的边缘，比如照名片时，如果名片放置的桌面也被照进去，snapter在处理时会自动去掉名片周围的桌面部分使得名片占据整个页面，转换后的内容以 PDF 和其它各市的文件输出。因此借助 snapter ，有数码相机的朋友可以使用数码相机随时随地&ldquo;扫描&rdquo;，没有的朋友在买机之前也可以参考点评狂，一个专门针对数码消费品的点评网站，就性价比、易用性和图片质量进行综合测评，具有很高的参考价值。<br style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px" />snapter 的操作演示：<br style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px" /><embed style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px" height="390" type="application/x-shockwave-flash" width="460" src="http://www.snapter.atiz.com/image/flash/Learnmore_Movie/movies/LearnMore03.swf"></embed></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.5em; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); FONT-SIZE: 12px; VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#3366ff">怎么样，这个软件很不错吧？！这么好的软件，当然还是要支持一把的。用OllyIce载入后发现程序是自我调试的，无法动态调试。无奈，看看里面的dll。发现有个叫ActSystem.dll的文件很可疑，于是载入。哈哈，果然就是它！强行改了验证程序版本的函数，（程序貌似分为未注册、Lite和Full三个版本），现在只要替换这个dll就直接是完整版本了。经测试，除了&ldquo;帮助-关于&rdquo;菜单不能用（这个菜单回去读注册的用户名，没注册，哪儿来的用户名呢？程序就出错了，这个等我有空了再改吧，不影响使用），其它功能一切正常，生成的pdf也不会有广告了，呵呵^_^</font></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.5em; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); FONT-SIZE: 12px; VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px"><font color="#3366ff">下面这个就是破解后的dll，覆盖原来的就行了。再给个原版的</font><a href="http://down.zdnet.com.cn/detail/3/25069.shtml" target="_blank"><font color="#ff0000">下载链接</font></a><font color="#3366ff">。</font></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 1.5em; BORDER-RIGHT-WIDTH: 0px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: arial, &quot;Trebuchet MS&quot;; WHITE-SPACE: normal; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; COLOR: rgb(102,102,102); FONT-SIZE: 12px; VERTICAL-ALIGN: baseline; BORDER-LEFT-WIDTH: 0px; TEXT-DECORATION: none; PADDING-TOP: 0px"><a href="http://blog.theosoft.net/attachments/month_0902/92009227132911.rar"><font color="#ff0000"><img style="MARGIN: 0px 2px -4px 0px" border="0" alt="" src="../../images/download.gif" /></font><font color="#ff0000">点击下载此文件</font></a></p>
<p></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/98/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

