2012年2月24日星期五

关于价格听证会

原文链接http://genghis-yang.tk/?p=102

最近全国水价又要上涨了,于是全国各地水价听证会也召开在即。这话听起来有点逻辑错乱,好像排错了因果。可我今天要说的就是这颠倒的因果。

首先引用一段关于价格听证会的介绍:

根据《价格法》和《政府价格决策听证暂行办法》的规定,国家计委制定了国家计委价格听证目录,规定居民生活用电价格、铁路旅客运输基准票价率(软席除外)、民航旅客运输公布票价水平、电信基本业务资费中的固定电话通话费、月租费,移动电话费、月租费这四项商品和服务在制定和调整价格时,由国家计委主持听证。其中,在一定区域范围内执行的商品和服务价格,国家计委可委托当地省级价格主管部门组织听证。

从上面这段话可以看出,价格听证会这种制度在我们国家是有法律保障的,且是法律规定的价格变动所必经的途径。那么有多少人认可水、电、通信、铁路、民航的价格是体现了自己的意愿呢?任何一个有理智的国人都明白这个问题的答案。那么这个听证会为什么体现不出广大人民的意志呢?

听证会制度是从西方传播过来的,是一个舶来品,它在刚踏上中国大陆的时候就开始水土不服了。在西方经济发达国家,听证会制度切实可行,至少在表面上体现了社会各阶层的意志。而在我们这个东方国家,我认为它至少遇到了三个方面的问题。

第一,听证会的主动权问题。我国的听证会大都由经营单位提出,再由主管部门召开。甚至可以说只有在经营单位认为有必要涨价的时候才会召开。而其他个人或组织要求召开听证会都不太可能得到支持。例如前两年广州市政协委员韩志鹏因四点理由要求市物价局重开出租车调价听证会,却多次被市物价局拒绝,且一度连建言都递交不上去。让人唏嘘过后不得不考虑到,连政协委员都是如此,小老百姓又能怎样?

第二,参与渠道不畅通。试问有多少人知道听证会的召开通告发布在哪儿?又有多少人知道哪些价格应该通过听证会决定?我想大多数人都不清楚听证会是怎么开的、什么时候开的。也许很多主管部门对此有不同意见,他们把通告明确公布在自己网站上了。但是这些网站每天有多少点击量呢?即便有人不小心上了网站,又是否能在显著位置看到通告呢?随便一个小城市怕不止几十万人吧,能看到的能有几个?特别是那些处于社会底层的群众,他们可能根本没有时间和钱去上网。是否可以采用更广泛、更有效的方法呢?比如通过手机短信。

第三,参与者难以体现社会各阶层的意志。价格听证会来源于西方,在那里,国民文化水平较高,政治环境宽松,公民社会参与性较强,底层人民也不用天天加班,工资待遇也足够养家糊口。于是底层民众有参与社会活动的时间和热情。在我国,底层群众往往为了生计整日奔波,难得闲暇,严苛的政治制度也使得下层人民三缄其口。有空闲和精力参与听证会的大都是中上层,由于他们的阶级特性,对于涨价或者翘首以盼,或者事不关己,所以每一次的听证会都演变成了涨价通告会。另外,不同于西方国家有很多民间公益组织参与听证会,我国的听证会中的民意代表大都是个人参加。相对于民间组织来说,个人的力量实在太薄弱,在证据的可靠性、完整性方面很难做好。因此很容易就被做了充足准备的各个经营单位驳倒。

在我看来,以上三个弊端制约了听证会的效果,使其成为了一些人作秀的工具。不过,虽然说了价格听证会这么多弊端,但我还是要说,至少这个形式是一种进步。而且现在越来越多的听证会也针对各种问题有了一些新举措。毕竟我们国家与西方国家在社会经济政治制度等方面的差距是不止十年八年的,要赶上去怕没个二、三十年是做不到了。不过至少我们看到了社会的某些方面是在前进的,也就应该心安了。


阅读全文...

2012年1月7日星期六

用Python重写我的pac-maker项目

原文链接http://genghis-yang.tk/?p=98

昨天用了一整天时间把Google上托管的pac-maker做了个更新,说来惭愧这才是我第二次更新它。(不知道它是什么?可以翻看我的《代理自动配置脚本——PAC文件》)不过这次更新得比较彻底,从1.1直接到2.0版本。为什么没有1.2、1.3……因为我重写了代码,这次完全用Python构建,完全不一样的体验。

这也是我第一次用Python写代码,手生得很,写了一上午才搞定。不过考虑到自己才学Python不到一周,连个Hello World都没写过,也就飘飘然了。代码很短,加上废话不到50行,这让我不得不佩服Python的高效,难怪Thinking in系列的作者Bruce Eckel都夸赞说,没有一种语言比得上Python使他的工作效率如此之高。看看版本1用C++写的代码那叫一个长,光写代码,调通,就花了快一天。再说2.0版还加入了自动联网获取所需资源的功能,而这一功能要是用C++来写又不知道要写多少行,也不知道要花费多少时间。而Python的标准库中就包含了我这程序中要用到的方方面面:获取网页页面的urllib库、正则表达式的re库、还有各种方便的字符串操作。得益于这些内建的库,真个两三行Python就顶得上C++写一屏。

之前自己对各种解释性的语言很是不屑,认为C/C++才是编程王道,最让我诟病的就是那些语言孱弱的执行效率。不过随着开始写博客,开始使用一些JavaScript和PHP,再后来看到一些别人写的Python程序,最后自己尝试,我不得不说C/C++的编程效率确实很低。上上个月C++11新标准也正式公布,这是C++03之后8年来首次更新标准,看来C++也注意到新生代编程语言对自己的挑战了。毕竟曾经的执行效率优势在如今的4核、8核处理器上已经体现的比较少了,编程也已经平民化,像我这种非计算机专业的也能随便开个项目了。写了这第一个Python程序我也尝到了Python的甜头,计划着用GAE弄个在线小游戏玩玩,这就是后话了。

最后再给我的pac-maker做做广告,这个项目面向无法上外国网的教育网用户,提供自动代理切换脚本pac文件,配合Wallproxy或GoAgent上外国网那是相当方便。欢迎教育网的朋友和其他感兴趣的朋友下载使用,期待批评指正。

pac-maker homepage http://code.google.com/p/pac-maker/


阅读全文...

2011年12月30日星期五

一个密码生成程序

原文链接http://genghis-yang.tk/?p=97

本篇算是上一篇的续集,上次说了中国各大网站密码泄露事件,对于我这种各个网站密码都是一样的人,泄露一个网站可算是把所有网站密码全泄露了。所以写了这么个小程序,目的是:只要记住一个主密码,然后由程序帮你为每个网站生成不同密码,当你需要登录时只要在此程序中再次输入你的主密码,就可以得到密码了。看图:

其实这个程序思路很简单,就是把网站域名和你的主密码混合在一起。然后用windows xp系统中自带加密库Cryptdll.dll,使用其中MD5算法加密。加密之后得到一个128bit结果,利用一个字典和这个结果产生适当长度的密码。本想也放到Google Code上去,但想想这个太简单,又没什么实用性也就作罢。

说说我这个程序吧,希望可以抛砖引玉。

我是用VS2010建了个MFC-Dialog程序,只加了几个控件和处理函数。这里最值得一提的是我使用了Cryptdll.dll中的MD5算法(如果要最大程度保证安全性还是需要自己写一个单向散列函数),这个算法共3个函数:MD5Init,MD5Update,MD5Final,依次使用就可以得到结果。不过这几个函数是没有对应头文件的,要想使用必须用LoadLibrary或者GetProcAddress函数从动态链接库中加载。具体的用法可以看看MSDN上Message Digest页面的例子,我基本上就Copy这个。

得到的128bit结果是用unsigned char数组表示的,也就是16个元素。这写元素值是不确定的(很可能是非字符),不能直接用来当密码。我们需要把这16个元素转换成可以显示的字符串。我的方法是建立一个字典,此字典相当于一个“密码可用字符列表”,所有希望在密码中出现的字符都列在里面(我的字典仅包含数字和大小写字母)。然后用之前16个元素中每个元素对字典长度取余,取余的结果作为索引,将此元素转换成的对应于字典中的字符。这样循环16次我们就得到了一个16个字符的密码了,而且它随机使用字典中的字符,基本不会出现有意义的字符串,保密性良好。

可执行程序:点此下载

源代码:点此下载

我这个程序没花心思,写得很简单,其实很多方面可以做得更人性化。例如能够自动检测所访问网站的域名,自动填写域名一栏,那就方便多了。


阅读全文...

2011年12月26日星期一

密码已无家可归

原文链接http://genghis-yang.tk/?p=91

今年的冬至是整个互联网的冬至,随着CSDN上600万用户密码泄漏,紧接着就是人人、多玩、7k7k、天涯……悲情的我在这些网站上都注册过,真要改密码非得改到我手软。最后一想就CSDN上还有点积分,其他就不改了吧。看报道说CSDN和天涯等网站都已经报案了,真不知是哪个黑客这么牛,真心希望他不会被逮到。这不是反语,仅是真心的愿望。所有谴责黑客的人,都是些不懂密码学不懂互联网的,作为一个通信专业的研究生,我觉得我有理由这么说。CSDN、天涯等网站为了降低那么一点成本,就置用户利益于不顾,它们竟然还有脸报案,真是让人愤慨。

我说这些不是空穴来风,任何一个了解互联网通信,了解密码学的人都能够看出来。下面我从技术的角度来分析分析,为什么我们的密码会被盗取。

首先我们要知道,密码都出现在哪儿?密码可能出现在3个地方:1.你的电脑上(包括你在浏览器里输入密码和在笔记本里记录密码);2.网站服务器上;3.你的电脑和网站服务器之间,用来连接两端的网络中。如果非要有第4个地方,那就是黑客的电脑上。

其次我们看看黑客可能从哪些渠道获得我们的密码,碰巧了也是3个:1.入侵你的电脑,偷窥你的输入;2.入侵服务器网站;3.在你的电脑和网站服务器之间某个节点上截取你发送给服务器的密码。

如果将上面一对照,你会发现凡是密码出现的地方都会有泄密的可能。那么我们的密码岂不是毫无安全性可言?当然不是这样。黑客可不是城管不是国保,要入侵安装好更新补丁的个人电脑几乎不可能(乱下东西中毒的不在此列)。网络中你电脑和服务器之间的转发节点大都为硬件,如果不亲手碰到黑客也无法控制(电信联通的人可以),无法用来截取你的密码。唯一可能泄漏密码的就是服务器了,因为服务器运行大量的互联网程序,漏洞在所难免。而这一次各大网站密码泄漏就都是这个途径。

服务器被入侵就会泄漏用户密码吗?我想要告诉大家的是:即使服务器被入侵,密码也绝对不会泄漏!因为用户密码在服务器上根本看不到。比方说我的密码是“0123456789”,在服务器上存的却是“87ACEC17CD9DCD20A716CC2CF67417B71C8A7016”,如果密码是“ppnn13%dkstFeb.1st”,服务器存的就是“3FB8F80558CC39B09225122428947D07C82DF4C8”。黑客即使入侵服务器,看到一堆类似于“87ACEC17CD9DCD20A716CC2CF67417B71C8A7016”这样的密码也是无可奈何的。

为何我们的密码会被保存成那个怪样子?这就要涉及到数学和密码学中的一个概念:单向散列函数。对于这个概念足够写几本书,这里我只简要介绍。这个函数跟我们数学中的函数是一样的,它以我们的密码为输入,输出就是那一串怪模怪样的东西,只不过这个函数是不可逆的。也就是说我们知道输入可以得到输出,但如果只知道输出是无法通过数学方法得到输入的。所以即使黑客看到“87ACEC17CD9DCD20A716CC2CF67417B71C8A7016”也无法推算出我的密码是“0123456789”。

有了单项散列函数,我们的密码基本上就安全了,如果不懂密码学看到这儿应该还是云里雾里的。下面来看看单向散列函数是怎么起作用的。对于稍大型的网站,当我们注册时,我们在浏览器输入的密码(用A代替)都会通过一个叫SSL的东西加密成X,(SSL是用来防止密码在传输过程中被黑客截取,也就是防止前面说的途径3)加密之后再通过网络传给服务器,然后服务器再用得到的X进行SSL解密得到我们的密码A。接下来服务器不会保存我们的密码,而是对密码做单向散列函数,得到那么一个怪字符串AA,然后把这个字串AA存下来。下一次我们要登录时,我们输入的密码再一次通过SSL加密后发给服务器,服务器再通过SSL解密,再对密码做单向散列函数,又得到一个怪字符串B,服务器拿新生成的字符串B与保存的字符串AA进行比较,如果相同说明两次输入一致,如果不同就说明你密码输错了。这样一来我们的密码只是在服务器内存里短暂停留,根本没在服务器上保存。那么黑客如果入侵服务器获得AA呢?他只能无奈。因为服务器会对任何输入都做单向散列函数,如果他把AA当密码输入,就会对AA进行单向散列。可以想象同一个函数对不同的输入A和AA将得到的不同的值,输入A得到AA,输入AA就得到其他值Y,之后服务器一比较,Y和AA根本不想等嘛,黑客的登录也就失败了。

上面的方法对大多数网站来说已经能够很好的满足安全性需要了。但一些支付类网站,例如网银、淘宝等,因为其特殊性需要更好的保护密码。因此它们的密码流程与上面的描述又略有不同。例如支付宝会给你电脑装一个“支付宝安全控件”,一些网银也会装类似的控件,这些控件里就包含一个产生单向散列函数值的程序。这样一来,我们输入的密码A在我们自己的电脑上就变成了一串怪字符串AA,然后再通过SSL加密成XX发给服务器,服务器通过SSL解密得到AA,再进行单向散列函数得到AAA,然后把AAA保存起来。下一次登录时输入的密码经过同样的流程得到C,然后拿C和AAA比较。这样的方法,密码在整个网络中根本没出现过,除非你输密码时被人看见否则无法泄漏。

上面介绍的这些方法都很成熟了,黑客即使本领再大也不能违反数学定律。但为什么我们的密码还是被泄露了呢?因为这些网站偷了懒。上面这两种方法都需要在每次登录时在服务器上进行一次单向散列函数,单向散列函数的运算相对比较复杂,需要较多的运算时间,而大型网站每一秒都可能有人登录,大量的登录请求意味着需要进行大量单向散列函数运算,需要增加服务器成本。因此这些网站,如CSDN、人人网、天涯都把服务器上进行的这个步骤给省略了,仅仅将SSL解密后的密码A直接保存成A。黑客一入侵看到的就是A,自然毫无阻拦的完成了密码盗取。而淘宝虽然使用安全控件把你的密码变成AA,但如果服务器端不再次进行单向散列函数,直接保存AA的话,黑客可以伪造一个“伪支付宝安全控件”把他看到的AA发给服务器,服务器就会允许登录。前段时间我的支付宝密码就被盗了,我怀疑就是这个原因。

像我这样所有网站同一个注册名同一个密码,这次可是栽了,一个被盗,全就被盗了。心里怨恨也没用,毕竟不能指望中国这些无良网站,要安全还得靠自己。我的打算是:自己造个函数,根据每个网站的域名生成一个密码,以后把函数记住就行了,再被盗也只是某一个网站了。


阅读全文...

2011年12月25日星期日

代理自动配置脚本——PAC文件

原文链接http://genghis-yang.tk/?p=86

什么是PAC?

A proxy auto-config (PAC) file defines how web browsers and other user agents can automatically choose the appropriate proxy server (access method) for fetching a given URL.(摘自Wikipedia)

正如这句定义,PAC文件被用来决定某一次网络访问所使用的代理。说得通俗点,就是当你访问某个网站时,由PAC文件判断该不该使用代理,或使用哪一个代理。

为什么会用到PAC?

这有什么用?如果你发问,那你要么不懂网络要么肯定没在大陆待过。在大陆的人都知道GFW,它是互联网上的文字狱,是自由精神的枷锁,是中华名族的樊篱,如果要自由上网就必须“翻墙”。很多翻墙工具都是代理性质的(如Wallproxy、GoAgent等),但是这些代理在访问大陆网站的时候又会增加延迟、拖慢网速。若能在访问被墙网站(如Facebook、Twitter)时通过代理连接,在访问其他网站时直接连接,就能实现既“翻墙”,又不会因代理拖慢其他网站速度。实现这一想法的最便捷方案就是PAC文件。

还有另一部分人(包括我在内),使用中国教育网,只能访问极少一部分大陆网站,不能访任何外国站。这部分人对能够自动配置代理的PAC文件有更强烈的需求。因为教育网要访问外国站就必须加代理,但是通过代理又无法访问教育网网站。如果不能自动配置代理,那么上网过程将会伴随不断的切换代理。而切换代理那繁琐的过程相信没有任何一个人愿意忍受。

如何构造PAC文件?

PAC文件其实可看作是一个JavaScript脚本,只不过它仅支持其中一部分命令。PAC文件必须包含一个FindProxyForURL(url, host)函数,这个函数可以看作是PAC文件的主函数,任何网络访问请求都会由系统传给这个函数。参数url就是要访问的URL,host就是要访问的URL所包含的主机。例如访问http://en.wikipedia.org/wiki/Proxy_auto-config,URL就是它本身,host就是en.wikipedia.org。下面举两个Wikipedia中的例子来说明这个函数的用法:

function FindProxyForURL(url, host) {
return "PROXY proxy.example.com:8080";
}


上面这两句就可以作为一个PAC文件,它对所有URL都返回同一个代理。也就是说这个PAC会让所有访问都通过proxy.example.com:8080这个代理。


下面这个相对复杂一些:


function FindProxyForURL(url, host) {
//对于所有.edu.cn域名,直接连接
if (shExpMatch(url,"*.edu.cn/*")) {return "DIRECT";}
//对于10.0.0.0到10.0.0.255之间的IP地址使用代理
if (isInNet(host, "10.0.0.0", "255.255.255.0")) {
return "PROXY proxy.example.com:8080";
}
//其他网站尝试使用代理访问,代理无效时,直接访问
return "PROXY proxy.example.com:8080; DIRECT";
}


这个例子说明了JavaScript函数在PAC文件中的使用方法。例子中,所有以.edu.cn作为域名的网站都将采用直接连接,所有在10.0.0.0到10.0.0.255之间的网站都会通过代理服务器proxy.example.com的8080端口连接(即使这个代理不可用)。其他一切网络连接都将尝试通过proxy.example.com:8080连接,如果代理无响应则直接连接。关于PAC文件更详尽的格式说明请参考《Navigator Proxy Auto-Config File Format》,如果有兴趣你也可以阅读一些扩展内容《Automatic proxy HTTP server configuration in web browsers》。


有一点不得不提到的是:大多数系统和浏览器只支持ANSI编码的PAC文件,如果使用其他编码(如Unicode)将无法识别。


PAC文件怎么用?


对于Windows系统,直接在“Internet选项”中,“连接”标签,“局域网设置”按钮,选中“使用自动配置脚本”,下面的地址栏填写PAC文件的URL。例如有个auto.pac在你的D盘根目录,则填写“file://d:/auto.pac”;如果这个pac在网络主机上,你就需要填成类似“http://genghis-yang.tk/something/auto.pac”这样。


Windows代理配置图解


对于Firefox浏览器,“首选项”中“高级选项卡”,“网络”标签,“设置”按钮,在“自动代理配置URL”中填入你的PAC。


Firefox代理配置图解


对于Linux系统(以ubuntu10.04为例),在“系统设置”里面打开“网络代理首选项”,在“自动代理配置”中填入PAC的URL。






ubuntu代理配置图解


其他配置方式也很雷同,这里就不赘述了。



请支持我的GoogleCode项目


我在Google Code上开了一个项目——pac-maker,做教育网代理自动配置脚本,包括一个按月更新的PAC文件和一个PAC文件自动生成程序。它主要是为教育网这个特殊群体服务的,主要目的就是让教育网不可访问的IP自动使用代理,而可访问的则直接访问。这个工程刚刚起步,还存在一些问题,期待有人能加入进来,或者提交些Issues,把它做得更好。


阅读全文...

2011年12月24日星期六

酷狗云外链播放器——给自己的博客来点音乐

原文链接http://genghis-yang.tk/?p=83

今天无聊中想给自己的博客加点多媒体,让单调的界面活泛一点。于是找到了搁置已久的Kugou账号,进入酷狗的新产品——酷狗云音乐。看到博客侧边栏中的音乐播放器了吗?这就是从酷狗云链接过来的。

酷狗云音乐http://cloud.kugou.com/

这玩意儿相当于一个支持外链的音乐网盘,有5G空间。而且你不一定要自己上传,依托于酷狗强大的音乐库,你可以简单地通过搜索将你喜欢的音乐添加到这个网盘中。

至于制作外链也非常简单,选择好歌曲之后点击下图所示的“制作外贴播放器”。

如果你只选了一首歌,你得到的播放器是这个样子的:

如果选了多首歌曲,则是这个样子:

然后在下面会出现可以嵌入网页的代码。只要点复制,然后把他们放在自己页面上就能看到效果了。

跟其他音乐网站相比,酷狗的音乐还是比较全的,而且大部分都有比较不错的音质,毕竟它做得时间比较长了。可惜的是它的外链必须以固定播放器的形式展现,不能调用自己的播放器。不过它默认播放器的设计还算说得过去,我也就不挑剔了。


阅读全文...

2011年12月23日星期五

返还网,网购省钱好途径!

原文链接http://genghis-yang.tk/?p=73

返还网是今天上网时偶然发现的一个新奇网站。它是干什么的?说白了就是在你网购时帮你省钱的。这网站我是没听说过,不过看他们的介绍每个月都有:超5万笔订单、超6000万订单总额、超12万新会员加入……更有甚者他们的CEO还曾做客CCAV《奋斗》栏目。按他们说的这么夸张的扩张速度,我感觉他们很快就能赶上淘宝了,所以我把它拿出来说说吧。

返还网主页

第一个问题当然是:它怎么帮我们省钱?其实很简单,听说过“淘宝客”吗?淘宝客是帮助淘宝推销商品的人,如果别人通过他们的推介购买商品,他们就能得到商品总价一定百分比的酬劳。当然对于不同的商品,这酬金也或多或少,但总会有一点。其实不仅淘宝,很多网购网站都有类似淘宝客的推荐机制,这种机制在网站刚开始运作时效果比较明显,可以短时间带来较多用户。

我今天所介绍的返还网,就是一个把淘宝客做成网站的大胆创意。不过它所代理的网站不局限于淘宝,像什么京东、当当、凡客,非常多,基本上可以满足我们在各大网上商城的购物需要。

返还网合作商城

不过返还网也不是尽善尽美的。首先得注册(这好像是废话);其次必须通过返还网下面的链接进入各大商城才有效(比较麻烦,而且安全性……我感觉没什么问题);再次,当你的带返还金额大于50元之后才能给你返现,小于50元的部分只能在心理暗爽。

返还网这一创意也不是破天荒头一遭。把淘宝客当职业的也不在少数,就连我们学校也有人做类似的生意,代理了很多网站,可惜他们的规模没法跟人网站比。反过来看这些网购网站,它们能抽出这些钱给推广人,说明他们的利润还是比较可观的,如果我们不嫌麻烦,大可以自己注册成淘宝客,自己申请各大商城推广人,那样肯定省下更多。

最后我还是不得不替返还网的前途感到担忧,不论返还网最终能做多大,它还是处于各大网购网站的荫庇之下,拾人牙慧。如果某天各大网购网站取消了推广人制度,那也就是返还网的末日了。另外,返还网的CEO就是之前如果云的创始人,看如果云的烂摊子,我就……


阅读全文...