<?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>Thu, 17 May 2012 03:51:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>教你获取藏在wp客户端里的秘密</title>
		<link>http://www.theosoft.net/archives/229</link>
		<comments>http://www.theosoft.net/archives/229#comments</comments>
		<pubDate>Wed, 16 May 2012 09:39:39 +0000</pubDate>
		<dc:creator>Johnson</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[破解]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[windows phone]]></category>
		<category><![CDATA[wp]]></category>
		<category><![CDATA[wp7]]></category>
		<category><![CDATA[反编译]]></category>
		<category><![CDATA[微博]]></category>

		<guid isPermaLink="false">http://www.theosoft.net/?p=229</guid>
		<description><![CDATA[对微软的Windows Phone 7稍微有些了解的人都知道，这个平台的移动客户端都是用C#语言写的。C#这门语言不仅简单易学，最大的好处是用它写出来的程序可以被轻易的反编译，非常适合同行间的技术交流:)  Sina微博是目前手机上一个非常热门的应用。Sina微博还提供oauth认证和各种API来让第三方认证使用。本文将以“从Sina微博客户端里提取appKey和appSecret”为例，介绍如何从wp7客户端里发现他们的“秘密”！（如果你不知道appKey和appSecret是神马，可以先去Sina微博开放平台看看） 第一步，当然是下载客户端啦。不是用你的手机下载啊！当然是要下载到电脑上。打开Phone7Market，搜索关键字“微博”，第一个就是。 第二步，把下载下来的xap的程序的扩展名改成zip，然后把里面的内容解压出来。你会发现里面有很多dll，SinaWeibo.dll就是我们的目标。 用Reflector打开，找到App_Startup函数。晕！啥都看不到，看来Sina微博的客户端做了代码混淆。没关系，那我们就来看看IL码。IL码和汇编代码很像。我们在这个函数里找了找，发现了两个神奇的函数call string SinaWeibo.Common.Constants::GetAppKey()和call string SinaWeibo.Common.Constants::GetAppSecret()。嗯，看来这就是我们要找的函数，赶紧点进去。很好！看看这个函数的属性，public!太帅了!赶紧自己建一个新的wp项目，把SinaWeibo.dll引进来，然后满心欢喜得调用这个静态方法。 本以为这样就结束了，但事实远远没有这么简单！程序出错了，而且是个非常诡异的错误，是Condtants这个类的静态初始化方法饱了一个NullReference错误！ 大致上可以确定是类的静态初始化函数调用了SinaWeibo.Common.Constants.get_WmValue()，正是这个函数抛了NullReference异常！那怎么办呢？其实只要把这个函数改掉，让他不要抛异常出来就可以了嘛，反正我们也用不到它。 开始反编译！打开命令行，输入  ildasm SinaWeibo.dll /out=SinaWeibo.il 把这个dll先反编译成il码。然后就是找到SinaWeibo.Common.Constants.get_WmValue()这个函数。这个函数没有输入参数，返回值是一个string。我们上下找找，发现另一个函数get_LoadMore()同样没有参数并返回string。于是，我们用get_LoadMore()的内容来替换get_WmValue()函数。对！就是替换！虽然我还不会直接写IL代码，但是复制粘贴还是会的^_^ 改完以后，就要把这个IL码再重新编译成dll。在命令行里输入ilasm /DLL /res:SinaWeibo.res SinaWeibo.il /out:SinaWeibo2.dll，等待编译完成后，我们就有了一个“修复”后的SinaWeibo2.dll。我们把这个dll替换原来引入项目的那个dll，再次运行程序。哈哈！奇迹发生了，终于获得了我要的appKey和appSecret！ 具体key和secret的内容我就不在这里公开了，有兴趣的同学可以自己去动手试一试！其实，不仅仅是Sina微博，很多客户端在从服务器获取数据的时候，都会将一些敏感数据加密后再传输，而加密的Key往往都存放在客户端里。知道了这些key，我们就能了解很多客户端不为人知的秘密！好了，在看这篇文章的你，已经知道得太多了，千万不要去坏事哦！]]></description>
			<content:encoded><![CDATA[<p>对微软的Windows Phone 7稍微有些了解的人都知道，这个平台的移动客户端都是用C#语言写的。C#这门语言不仅简单易学，最大的好处是用它写出来的程序可以被轻易的反编译，非常适合同行间的技术交流:)  Sina微博是目前手机上一个非常热门的应用。Sina微博还提供oauth认证和各种API来让第三方认证使用。本文将以“从Sina微博客户端里提取appKey和appSecret”为例，介绍如何从wp7客户端里发现他们的“秘密”！（如果你不知道appKey和appSecret是神马，可以先去<a href="http://open.weibo.com/" target="_blank">Sina微博开放平台</a>看看）</p>
<p>第一步，当然是下载客户端啦。不是用你的手机下载啊！当然是要下载到电脑上。打开Phone7Market，搜索关键字“微博”，第一个就是。</p>
<p><img class="aligncenter" src="http://www.theosoft.net/wp-content/uploads/2012/05/download.png" alt="下载" /></p>
<p><span id="more-229"></span></p>
<p>第二步，把下载下来的xap的程序的扩展名改成zip，然后把里面的内容解压出来。你会发现里面有很多dll，SinaWeibo.dll就是我们的目标。</p>
<p><img class="aligncenter" src="http://www.theosoft.net/wp-content/uploads/2012/05/dll.png" alt="dll" /></p>
<p>用Reflector打开，找到App_Startup函数。晕！啥都看不到，看来Sina微博的客户端做了代码混淆。没关系，那我们就来看看IL码。IL码和汇编代码很像。我们在这个函数里找了找，发现了两个神奇的函数<span style="color: #0000ff;"><span style="color: #3366ff;">call string SinaWeibo.Common.Constants::GetAppKey()</span><span style="color: #000000;">和<span style="color: #3366ff;">call string SinaWeibo.Common.Constants::GetAppSecret()<span style="color: #000000;">。嗯，看来这就是我们要找的函数，赶紧点进去。很好！看看这个函数的属性，<span style="color: #ff0000;">public<span style="color: #000000;">!太帅了!赶紧自己建一个新的wp项目，把SinaWeibo.dll引进来，然后满心欢喜得调用这个静态方法。</span></span></span></span></span></span></p>
<p><img class="aligncenter" src="http://www.theosoft.net/wp-content/uploads/2012/05/code.png" alt="代码" /></p>
<p>本以为这样就结束了，但事实远远没有这么简单！程序出错了，而且是个非常诡异的错误，是Condtants这个类的静态初始化方法饱了一个NullReference错误！</p>
<p><img class="aligncenter" src="http://www.theosoft.net/wp-content/uploads/2012/05/exception.png" alt="异常" /></p>
<p>大致上可以确定是类的静态初始化函数调用了<span style="color: #3366ff;">SinaWeibo.Common.Constants.get_WmValue()<span style="color: #000000;">，正是这个函数抛了NullReference异常！那怎么办呢？其实只要把这个函数改掉，让他不要抛异常出来就可以了嘛，反正我们也用不到它。</span></span></p>
<p>开始反编译！打开命令行，输入 <span style="color: #339966;"> ildasm SinaWeibo.dll /out=SinaWeibo.il <span style="color: #000000;">把这个dll先反编译成il码。然后就是找到<span style="color: #3366ff;">SinaWeibo.Common.Constants.get_WmValue()<span style="color: #000000;">这个函数。这个函数没有输入参数，返回值是一个string。我们上下找找，发现另一个函数<span style="color: #3366ff;">get_LoadMore()<span style="color: #000000;">同样没有参数并返回string。于是，我们用<span style="color: #3366ff;">get_LoadMore()</span>的内容来替换<span style="color: #3366ff;">get_WmValue()</span>函数。对！就是替换！虽然我还不会直接写IL代码，但是复制粘贴还是会的^_^</span></span></span></span></span></span></p>
<p>改完以后，就要把这个IL码再重新编译成dll。在命令行里输入<span style="color: #339966;">ilasm /DLL /res:SinaWeibo.res SinaWeibo.il /out:SinaWeibo2.dll</span>，等待编译完成后，我们就有了一个“修复”后的<span style="color: #ff9900;">SinaWeibo2.dll<span style="color: #000000;">。我们把这个dll替换原来引入项目的那个dll，再次运行程序。哈哈！奇迹发生了，终于获得了我要的appKey和appSecret！</span></span></p>
<p><img class="aligncenter" src="http://www.theosoft.net/wp-content/uploads/2012/05/key.png" alt="key" /></p>
<p>具体key和secret的内容我就不在这里公开了，有兴趣的同学可以自己去动手试一试！其实，不仅仅是Sina微博，很多客户端在从服务器获取数据的时候，都会将一些敏感数据加密后再传输，而加密的Key往往都存放在客户端里。知道了这些key，我们就能了解很多客户端不为人知的秘密！好了，在看这篇文章的你，已经知道得太多了，千万不要去坏事哦！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theosoft.net/archives/229/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<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><br />
<span id="more-200"></span></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>
		<category><![CDATA[cydia]]></category>
		<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>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[rsa]]></category>
		<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 = “Theoservice”; const int KEYLENGTH = 128; const int BLOCKSIZE = KEYLENGTH - 11; private static X509Certificate2 GetRSACertificate() { X509Certificate2 clientCert = null; if (clientCert == null) { [...]]]></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><span id="more-172"></span></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;">“Theoservice”</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:@”Theoservice” ofType:@”cer”];</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(@”encrypt:usingKey: Error: %d”, status);</p>
<p>return nil;</p>
<p>}</p>
<p>}</p>
<p>if (cipherBuffer)</p>
<p>{</p>
<p>free(cipherBuffer);</p>
<p>}</p>
<p>NSLog(@”Encrypted text (%d bytes): %@”,</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:@”Theoservice” ofType:@”cer”]就可以把里面的内容读出来，生成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可以刷一下试试。（立即下载）]]></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><span id="more-121"></span></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><span id="more-118"></span></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=”1.0&#8243; encoding=”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=”我自己”&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>
	</channel>
</rss>

