<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
 <channel>
  <title>Vale's blog</title>
  <link>http://vale.blogbus.com</link>
  <description><![CDATA[]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Thu, 01 Jan 1970 07:00:00 +0700</lastBuildDate>
  <image>
									<url>http://public.blogbus.com/profile/5/6/9/37965/avatar_37965_96.jpg</url>
									<title>Vale's blog</title>
									<link>http://vale.blogbus.com</link>
								</image>  <item>
   <title>栀子花</title>
   <description><![CDATA[<div><span><font color="#ff0000"><font color="#000000">新买的栀子花叶片发黄，从找到的文章看像是缺肥引起的黄化病。</font></font></span></div><div></div><div style="padding-right: 0px; padding-left: 15px; font-size: 13px; margin-bottom: 2px; padding-bottom: 2px; line-height: 20px; padding-top: 2px; background-color: #ffe8d1"><span><font color="#ff0000">问：</font></span> 专家好：我有二棵盆栽的栀子花，有一棵现在出现了很奇怪的黄叶现象，有三分之一到一半的叶子失绿发黄，不是那种光照过强的整株泛黄，而是单个叶片失绿发黄，整片叶子变成金黄色，而好的叶子依然很绿，黄绿相间，非常抢眼。且新叶也几乎不长。不知是什么原因，如何解决。谢谢！ </div><div class="answerDiv" style="padding-right: 0px; padding-left: 15px; font-size: 13px; margin-bottom: 2px; padding-bottom: 2px; line-height: 20px; padding-top: 2px; background-color: #fefcf5"><span><font color="#00309d">答：</font></span> <font face="Verdana">栀子花同志：<br />&nbsp;&nbsp;&nbsp;&nbsp;您好！<br />&nbsp;&nbsp;&nbsp;&nbsp;您所咨询的问题，现答复如下：<br />&nbsp;&nbsp;&nbsp;&nbsp;栀子,又名黄枝、山扼、黄栀子、玉荷花等,为茜草科常绿灌木芳香植物。干枝高可1-2米,灰色:小枝绿色。叶形像兔耳,单叶,对生或二叶轮生,革质有光,全缘。花单生于技顶或叶腋,白色具浓香,形大质肥厚,花冠高脚碟形,很像古代的一种盛洒器皿&mdash;&mdash;&ldquo;卮&rdquo;,故得名卮子花(后将卮作&ldquo;栀&rdquo;)。果实卵形,有六纵裂,扁平,果熟期为10月,花期6-8月。<br />&nbsp;&nbsp;&nbsp;&nbsp;栀子花洁白,花香浓郁,除可供观赏,也可供佩带,其果还可作药用,有消炎解奇之功效。另外,栀子叶常绿,具有抗烟尘、抗二氧化硫能力,是一种理想的环保绿化花卉。栀子花原产我国西南部。目前主要栽培品种及其变种有大叶栀子(也称大花栀子),叶大、花大、重瓣、香浓；水栀子,植株矮小,花小叶子也小,重瓣；单瓣雀舌,叶小花小,单瓣,多野生。还有卵叶栀子和小叶栀子等。<br />&nbsp;&nbsp;&nbsp;&nbsp;栀子性喜温暖湿润气候,好阳光但又不能经受强烈阳光照射,适宜生长在疏松、肥沃、排水良好、轻粘性酸性土壤中,是典型的酸性花卉。盆栽用40%园土、15%粗砂、30%厩肥土、15%腐叶土配制为宜。<br />&nbsp;&nbsp;&nbsp;&nbsp;栀子苗期需注意浇水,保持盆土湿润,勤施腐熟薄肥。浇水以用雨水或经过发酵的淘米水为好。生长期如每隔10-15天浇1次0.2％&nbsp;硫酸亚铁水或矾肥水(两者可相间使用),可防止士壤转成碱性,同时又可为土壤补充铁元素,防止棍子叶片发黄。<br />&nbsp;&nbsp;&nbsp;&nbsp;夏季,栀子花要每天早晚向叶面喷一次水,以增切空气湿度,促进叶面光泽。盆栽栀子,8月份开花后只浇清水,控制浇水量。十月寒露前移入室内,置向阳处。<br />&nbsp;&nbsp;&nbsp;&nbsp;冬季严控浇水,但可用清水常喷叶面。每年5-7月在栀子生长旺盛期将停止时,对植株进行修剪去掉顶梢,促进分枝萌生,使日后株形美、开花多。<br />&nbsp;&nbsp;&nbsp;&nbsp;栀子花多采用杆插法不和压条法进行繁殖,也可用分株和播种法繁殖,但很少采用。扦插可分为春插和秋插。春插于2月中下旬进行；秋插于9月下旬至10月下旬进行。插穗选摄2-3年的枝条,截成10-12厘米的段子,留顶上两片叶子,各剪去一半,然后斜插入插床中,土面上只留一节,注意遮荫和保持一定湿度,一般1个月可生根,1年后移植。南方还有采用水插法繁殖的,即将插穗插在用苇秆编织的圆盘上,任其漂浮在水面上,使其下部在水中生根,再移植栽培。压条可在4月清明前后或梅雨季节进行。选三年生母株上一年生健壮枝条,将其拉到地面,刻伤枝条上的入土部分,如能在刻伤部位蘸上200ppm粉剂案乙酸,再盖上土压实,则更容易生根。一般个把月生根后既可与母株分离,到第二年春再带土移栽。<br />&nbsp;&nbsp;&nbsp;&nbsp;栀子花经常容易发生叶子发黄的黄化病,黄化病由多种原因引起,战须采取不同措施进行防治。<br /><font style="background-color: #ffff00">&nbsp;&nbsp;&nbsp;&nbsp;缺肥引起的黄化病:这种黄化病从植株下部老叶开始,逐渐向新叶蔓延。<br /></font>&nbsp;&nbsp;&nbsp;&nbsp;缺氮:单纯叶黄,&nbsp;新叶小而脆。<br />&nbsp;&nbsp;&nbsp;&nbsp;缺钾:老叶由绿色变成褐色。<br />&nbsp;&nbsp;&nbsp;&nbsp;缺磷:老叶呈紫红或暗红色。对以上诸种情况,可薄施腐熟的人粪尿或饼肥。<br />&nbsp;&nbsp;&nbsp;&nbsp;缺铁引起的黄化病:这种黄化病,表现在新叶上,开始时叶片呈淡黄色或白色,叶脉仍是绿色,严重时叶脉也呈黄色或白色,最终叶片会干枯而死。对这种情况,可喷洒0.2％-0.5％的硫酸亚铁水溶液进行防治。<br />&nbsp;&nbsp;&nbsp;&nbsp;缺镁引起的黄化病:这种黄化病由老叶开始逐渐向新叶发展,叶脉仍呈绿色,严重时叶片脱落而死。对这种情况,可喷洒0.7%一0&middot;8%硼镁肥防治。浇水过多,也会引起黄叶现象。<br /></font></div><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F22380039.html&title=%E6%A0%80%E5%AD%90%E8%8A%B1">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/22380039.html</link>
   <author>vale</author>
   <pubDate>Fri, 06 Jun 2008 10:27:32 +0800</pubDate>
  </item>
  <item>
   <title>蠢文立照：可笑的煮饺子文化zz</title>
   <description><![CDATA[<p><em><font color="#000080">出自新语丝，这个xys好久没去了，没想到越来越烂，一群拿着初中物理化学解释世界的dz。</font></em></p><p>&nbsp;可笑的煮饺子文化</p><p>从小到大，一直看着周围的中华儿女在饺子第一次煮沸后，往里续些凉水，再煮沸，再续凉水，再煮沸&hellip;&hellip;这宗教仪式，一直持续到&mdash;&mdash;用打左脸给右脸的基督徒的说法，是地狱成了冰窖；用具有高尚情操的无产阶级革命者的话说，是共产主义在全人类实现。</p><p>小时候，家里没有煤气灶、电灶、烤箱、电磁炉、微波炉等资产阶级人定胜天的玩意儿，有的是玉米秆、劈柴、烟煤无烟煤等纯天然无毒副作用的自然妈妈的恩赐。看着我的生物妈妈在烟熏火燎中用凉水一次次镇压想逃生的饺子，我那天假有邪的心灵充满了期待和欣喜。当然，我的嘴也配合地流着口水。</p><p>后来马齿渐长，不幸听了郭沫若《科学的春天》的呼唤和受了徐迟《哥德巴赫猜想》的蛊惑，上了物理的贼船。成为物理海盗的一个好处，是弄明白了妈妈为什么用凉水镇压饺子。懵懵懂懂中，小学文化的妈妈，在试图将水温控制在尽量接近沸点的水平。如果不加控制，水一旦自由沸腾起来，汤汁四溅，不但可能烫着人，饺子也可能蹦出来。蹦不出来的饺子，可能因为对流引起的剧烈振荡而皮开肉绽。</p><p>当然，控制水温的另一个办法，是控制热源。扬汤止沸不如釜底抽薪的道理，是几千年前老祖宗就懂得的。在三十多年前妈妈当时的生活条件下，填汤止沸要优于釜底抽薪。从燃烧的炉灶里抽玉米秆和劈柴，是很难操控、危险且不卫生的。烧煤的炉灶更是如此。无法或不方便控制热源，剩下的选择很简单&mdash;&mdash;填凉水。</p><p>妈妈当然不是填汤止沸手法的发明者。她，就像我们的千千万万平凡的母亲一样，从她们的长辈那里不加质疑地继承了这个生活经验。千千万万这样的生活经验集合到一起，就是所谓的文化。</p><p>绝大部分人，都象我的母亲一样，不加质疑地继承了填汤止沸的煮饺子经验，不但自己机械地重复着，也机械地传给下一代。传着传着，就传到了煤气灶、电灶、电磁炉的时代&mdash;&mdash;热源精细可控的时代。</p><p>于是，我看到了无数可笑的重复的场景：一个个拥有自然科学最高学位的中华儿女，在现代厨房电器的一堆旋钮按钮中，往沸腾的饺子锅里一次次地续着凉水，没想到只是将控制热量的旋钮稍稍向左扭扭，就可以达到同样的效果，也没有想到，完全可以把水温控制在沸点下一点，不用再去劳心。</p><p>煮饺子尚且如此，遍地中医信徒又有何惊奇？ </p><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F22271649.html&title=%E8%A0%A2%E6%96%87%E7%AB%8B%E7%85%A7%EF%BC%9A%E5%8F%AF%E7%AC%91%E7%9A%84%E7%85%AE%E9%A5%BA%E5%AD%90%E6%96%87%E5%8C%96zz">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/22271649.html</link>
   <author>vale</author>
   <pubDate>Wed, 04 Jun 2008 16:05:47 +0800</pubDate>
  </item>
  <item>
   <title>读完了《静静的顿河》</title>
   <description><![CDATA[<p>五一节读完了这部震撼人心的鸿篇巨著，看过的书中唯有《战争与和平》能与之相比。</p><p>该同情谁？该憎恨谁？战争，无论基于什么理由，都是灭绝人性的。</p><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F1226474.html&title=%E8%AF%BB%E5%AE%8C%E4%BA%86%E3%80%8A%E9%9D%99%E9%9D%99%E7%9A%84%E9%A1%BF%E6%B2%B3%E3%80%8B">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/1226474.html</link>
   <author>vale</author>
   <pubDate>Tue, 31 May 2005 19:15:15 +0800</pubDate>
  </item>
  <item>
   <title>回家</title>
   <description><![CDATA[<P>火车、旅行，好像是很久以前的感觉了……</P><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F417472.html&title=%E5%9B%9E%E5%AE%B6">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/417472.html</link>
   <author>vale</author>
   <pubDate>Thu, 30 Sep 2004 16:18:00 +0800</pubDate>
  </item>
  <item>
   <title>购书记录</title>
   <description><![CDATA[<P>《中国哲学简史》 冯友兰&nbsp;新世界出版社<BR>《文明史纲》 （法）布罗代尔 广西师范大学出版社<BR>《荷马史诗·伊利亚特》、《荷马史诗·奥德赛》 （古希腊）荷马 人民文学出版社</P><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F413353.html&title=%E8%B4%AD%E4%B9%A6%E8%AE%B0%E5%BD%95">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/413353.html</link>
   <author>vale</author>
   <pubDate>Tue, 28 Sep 2004 08:51:14 +0800</pubDate>
  </item>
  <item>
   <title>静静的顿河 摘录（4）</title>
   <description><![CDATA[&nbsp;&nbsp;&nbsp; 在通往鞑靼村去的山坡斜路上，他困惑不解地发现自己手里还握着鞭子，于是扔掉鞭子，阔步在村里的胡同里走着。家家户户的小窗户上，都挤满了由于他的归来大感惊异的面孔，迎面走来，认出他的妇女都深深地向他鞠躬行礼。<BR>&nbsp;&nbsp;&nbsp; 在自家的大门口，一个身材瘦削、黑眼睛的漂亮姑娘连叫带跑地抱住他的脖子，扎在他怀里。葛里高里捧着他的脸颊，扳起她的脑袋，认出是杜妮亚什卡。<BR>&nbsp;&nbsp;&nbsp; 潘苔莱·普罗珂菲耶维奇一瘸一踮地从台阶上走下来，母亲在屋子里嚎啕大哭起来。葛里高里用左手抱住父亲，因为杜妮亚什卡在亲着他的右手。<BR>&nbsp;&nbsp;&nbsp; 一阵熟悉的、令人心碎的梯阶咯吱声——葛里高里走上了台阶。显得老了很多的母亲，像小姑娘一样轻捷地跑过来，眼泪打湿了军大衣的纽扣孔，她紧抱着儿子，喃喃自语，说出的话都是不成句的，不能用文字表达的，只有母亲自己懂的话语；娜塔莉亚为了不倒下去，手扶着门，面色苍白，站在门洞里，痛苦地笑着，她经受不住葛里高里投来匆促的、心慌意乱的目光，瘫倒在地上……<!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F400420.html&title=%E9%9D%99%E9%9D%99%E7%9A%84%E9%A1%BF%E6%B2%B3+%E6%91%98%E5%BD%95%EF%BC%884%EF%BC%89">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/400420.html</link>
   <author>vale</author>
   <pubDate>Tue, 21 Sep 2004 07:47:56 +0800</pubDate>
  </item>
  <item>
   <title>静静的顿河 摘录（3）</title>
   <description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 晚上，在六月的乳白色的夜光中，田野里的火堆旁响起了歌声：<BR><FONT face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 哥萨克骑在自己铁青的骏马上，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 奔向遥远的地方<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 永远离开了自己的故乡……<BR></FONT>&nbsp;&nbsp; 银铃似的中音低弱下去，低音部唱出像天鹅绒似的哀伤和幽怨：<BR><FONT face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 他再也不能返回自己的家园。<BR></FONT>&nbsp;&nbsp; 中音节节拔高，令人心碎地唱到：<BR><FONT face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 他那年轻的妻子，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 早晚对着北方空望，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一心盼着，盼着亲爱的人<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 突然从远方飞降。<BR></FONT>&nbsp;&nbsp;&nbsp; 于是众人的声音都汇合到歌声里来了。歌声变得更加浓醇醉人，就像波列西耶的家酿啤酒一样。<BR><FONT face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 丛山外风雪飞舞的地方，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 冬天里严寒逞威的地方，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 松树和枞树被吹得猛烈摇摆的地方，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大雪把哥萨克尸骨埋葬。<BR></FONT>&nbsp;&nbsp;&nbsp; 歌声诉说着哥萨克生活里的朴素故事，帮腔的男高音，像在四月解冻了的大地上空飞翔的云雀一样，用颤音高唱：<BR>&nbsp;<FONT face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 哥萨克在垂死的时候，祈祷请求，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给他修造一座大坟头。<BR></FONT>&nbsp;&nbsp;&nbsp; 低音和中音同声哀诉：<BR><FONT face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但愿故乡的绣球花，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 盛开在哥萨克的坟头。<BR></FONT>&nbsp;&nbsp;&nbsp; 在另一堆篝火边——人数比较少，唱的是一支歌：<BR><FONT face=楷体_GB2312>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 啊哟，从波涛汹涌的亚速海，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向顿河开来了几只大船。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 年轻的阿塔曼，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回家园。</FONT></P>
<P>&nbsp;</P><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F390127.html&title=%E9%9D%99%E9%9D%99%E7%9A%84%E9%A1%BF%E6%B2%B3+%E6%91%98%E5%BD%95%EF%BC%883%EF%BC%89">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/390127.html</link>
   <author>vale</author>
   <pubDate>Wed, 15 Sep 2004 20:59:30 +0800</pubDate>
  </item>
  <item>
   <title>静静的顿河 摘录（2）</title>
   <description><![CDATA[<FONT size=2>&nbsp;&nbsp;&nbsp; 娜塔莉亚在坎坷不平的石板上跌跌撞撞地走去，走到教堂大门前的台阶。嘁嘁喳喳、肮脏无耻的话语像石头一样从她身后投来。娜塔莉亚在门口站着的姑娘们吃吃的笑声中，向另一个板墙门走去，像醉汉似地摇摇晃晃跑回家。在自家院子的大门口喘了喘气，脚乱踏者裙子襟，紧紧咬着已经咬得血红的肿嘴唇，走进了院子。院子笼罩在一片飘忽的紫色黑暗中，板棚的门黑魆魆地大敞着。娜塔莉亚拼命鼓起最后一点劲儿，跑到板棚门口，匆忙迈过了门限。板棚里是一片干冷，还有一股皮缰绳和陈腐的干草气味。娜塔莉亚这时候既没有思想，也没有感觉，全心沉没在忧郁的思念中，这种思念撕裂着她那充满了屈辱和绝望的心灵。她摸索着走到墙角，握住镰刀柄，卸下镰刀（她的动作缓慢、果断而又准确），愉快的决心鼓舞了她，于是她把头向后一仰，使劲用镰刀割进了喉咙管。她好像被打了一下，一阵猛烈的刺心的疼痛使她倒了下去，同时又感觉到——模糊地意识到——她并没有完成已经开始的工作，——她爬起来，然后跪着，急忙（流到胸前的鲜血使她感到害怕）用颤抖的手指撕开扣子，不知道为什么解开了上衣。一只手拨开富于弹性的、不听话的乳房，另一只手拿着镰刀，使刀刃对准胸膛，跪着爬到墙边，把镰刀安柄的那头顶在墙上，两只手放到向后仰着的头顶上，坚定地把胸膛向前压去，向前……她清晰地听见和感觉到刺破身体的扑哧声；越来越厉害的一阵阵刺心的疼痛，像火焰似的顺着胸部一直烧到喉咙，像铮铮响着的长针一样刺进了耳朵……</FONT><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F386692.html&title=%E9%9D%99%E9%9D%99%E7%9A%84%E9%A1%BF%E6%B2%B3+%E6%91%98%E5%BD%95%EF%BC%882%EF%BC%89">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/386692.html</link>
   <author>vale</author>
   <pubDate>Tue, 14 Sep 2004 08:48:46 +0800</pubDate>
  </item>
  <item>
   <title>AES (Rijndael) implementation in Ruby</title>
   <description><![CDATA[<P><FONT face="Courier New" size=1>class Array<BR>&nbsp;def rot(offset=1)&nbsp;&nbsp;# rotate byte<BR>&nbsp;&nbsp;self[offset..-1]+self[0,offset]<BR>&nbsp;end</FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;def ^(otherArray)<BR>&nbsp;&nbsp;zip(otherArray).map { |pair| pair[0]^pair[1] }<BR>&nbsp;end<BR>end</FONT></P>
<P><FONT face="Courier New" size=1>class Fixnum<BR>&nbsp;def xtime&nbsp;&nbsp;&nbsp;&nbsp;# GF(2^8) mulitiplication by x<BR>&nbsp;&nbsp;t=(self&lt;&lt;1) &amp; 0xFF<BR>&nbsp;&nbsp;t^=0x1B if self[7]==1<BR>&nbsp;&nbsp;t<BR>&nbsp;end</FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;def fm(v)&nbsp;&nbsp;&nbsp;&nbsp;# GF(2^8) mulitiplication<BR>&nbsp;&nbsp;r=0<BR>&nbsp;&nbsp;xm=self<BR>&nbsp;&nbsp;0.upto(7) {|b| r^=xm if v[b]==1; xm=xm.xtime; }<BR>&nbsp;&nbsp;r<BR>&nbsp;end<BR>end<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>class Rijndael<BR>&nbsp;S=[<BR>&nbsp;&nbsp;0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,<BR>&nbsp;&nbsp;0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,<BR>&nbsp;&nbsp;0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,<BR>&nbsp;&nbsp;0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,<BR>&nbsp;&nbsp;0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,<BR>&nbsp;&nbsp;0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,<BR>&nbsp;&nbsp;0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,<BR>&nbsp;&nbsp;0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,<BR>&nbsp;&nbsp;0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,<BR>&nbsp;&nbsp;0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,<BR>&nbsp;&nbsp;0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,<BR>&nbsp;&nbsp;0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,<BR>&nbsp;&nbsp;0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,<BR>&nbsp;&nbsp;0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,<BR>&nbsp;&nbsp;0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,<BR>&nbsp;&nbsp;0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16<BR>&nbsp;]</FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;I_S=[<BR>&nbsp;&nbsp;0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,<BR>&nbsp;&nbsp;0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,<BR>&nbsp;&nbsp;0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,<BR>&nbsp;&nbsp;0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,<BR>&nbsp;&nbsp;0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,<BR>&nbsp;&nbsp;0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,<BR>&nbsp;&nbsp;0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,<BR>&nbsp;&nbsp;0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,<BR>&nbsp;&nbsp;0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,<BR>&nbsp;&nbsp;0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,<BR>&nbsp;&nbsp;0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,<BR>&nbsp;&nbsp;0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,<BR>&nbsp;&nbsp;0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,<BR>&nbsp;&nbsp;0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,<BR>&nbsp;&nbsp;0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,<BR>&nbsp;&nbsp;0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d<BR>&nbsp;]<BR>&nbsp;<BR>&nbsp;I_MixColPloy=[0xE,0xB,0xD,0x9]<BR>&nbsp;T=S.map {|byte| [byte, byte, byte.fm(3), byte.fm(2)]} <BR>&nbsp;I_T=I_S.map {|byte| [byte.fm(0x9), byte.fm(0xD), byte.fm(0xB), byte.fm(0xE)]} </FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;Rcon=[[0x8d,0,0,0]]&nbsp;&nbsp;&nbsp;&nbsp;# 8d.xtime=01<BR>&nbsp;1.upto(13) {|j| Rcon[j]=[Rcon[j-1][0].xtime,0,0,0]}</FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;def initialize(nb=4)<BR>&nbsp;&nbsp;raise "Illegal value for Nb." unless [4,6,8].include?(nb) <BR>&nbsp;&nbsp;@nb=nb<BR>&nbsp;end</FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;def load_ek(key)&nbsp;&nbsp;&nbsp;&nbsp;# load encrypt key<BR>&nbsp;&nbsp;@ek=keyExpansion(key)<BR>&nbsp;end</FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;def load_dk(key)&nbsp;&nbsp;&nbsp;&nbsp;# load decrypt key<BR>&nbsp;&nbsp;@dk=keyExpansion(key)<BR>&nbsp;&nbsp;@dk[@nb..-5].each {|word| word[0..3]=invMixColumn(word)}<BR>&nbsp;end</FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;def invMixColumn(word)<BR>&nbsp;&nbsp;(0..3).map {|i|<BR>&nbsp;&nbsp;&nbsp;I_MixColPloy.zip(word.rot(i)).map{|pair| pair[0].fm(pair[1])}.inject{|a,b| a^b}<BR>&nbsp;&nbsp;}<BR>&nbsp;end</FONT></P>
<P><FONT size=1><FONT face="Courier New">&nbsp;def keyExpansion(key)<BR>&nbsp;&nbsp;# key is byte array<BR>&nbsp;&nbsp;nk=[4,6,8].find {|i| i*4==key.size} or raise "Illegal key length."<BR>&nbsp;&nbsp;nr=[@nb, nk].max+6<BR>&nbsp;&nbsp;w=[]<BR>&nbsp;&nbsp;(0..nk-1).each {|i| w[i]=key[4*i,4] }<BR>&nbsp;&nbsp;(</FONT><FONT face="Courier New">nk..@nb*(nr+1)-1).each</FONT></FONT><FONT face="Courier New" size=1> { |i|<BR>&nbsp;&nbsp;&nbsp;temp=w[i-1]<BR>&nbsp;&nbsp;&nbsp;if i%nk==0<BR>&nbsp;&nbsp;&nbsp;&nbsp;temp = temp.rot.map{|byte| S[byte]} ^ Rcon[i/nk]<BR>&nbsp;&nbsp;&nbsp;elsif nk&gt;6 &amp;&amp; i%nk==4<BR>&nbsp;&nbsp;&nbsp;&nbsp;temp = temp.map{|byte| S[byte]}<BR>&nbsp;&nbsp;&nbsp;end<BR>&nbsp;&nbsp;&nbsp;w[i]=w[i-nk]^temp<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;w<BR>&nbsp;end</FONT></P>
<P><FONT face="Courier New" size=1>&nbsp;def invKeyExpansion(key)<BR>&nbsp;&nbsp;w=keyExpansion(key)<BR>&nbsp;&nbsp;w[1,-1].each {|word| invMixColumn(word)}<BR>&nbsp;&nbsp;w<BR>&nbsp;end</FONT></P>
<P><FONT size=1><FONT face="Courier New">&nbsp;def cipher(plaintext)<BR>&nbsp;&nbsp;raise "Invalid length of input data." if </FONT><FONT face="Courier New">plaintext.size!=@nb*4</FONT><BR><FONT face="Courier New">&nbsp;&nbsp;a=(</FONT><FONT face="Courier New">0..@nb-1).map</FONT></FONT><FONT size=1><FONT face="Courier New"> {|j| plaintext[j*4,4]} &nbsp;# map plaintext onto state<BR>&nbsp;&nbsp;</FONT><FONT face="Courier New">nr=@ek.size/4-1</FONT><BR><FONT face="Courier New">&nbsp;&nbsp;</FONT><FONT face="Courier New">a^=@ek[0,4</FONT></FONT><FONT size=1><FONT face="Courier New">] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# add round key<BR>&nbsp;&nbsp;1.upto(nr) { |round|<BR>&nbsp;&nbsp;&nbsp;</FONT><FONT face="Courier New">k=@ek[round*4,4</FONT></FONT><FONT face="Courier New" size=1>]<BR>&nbsp;&nbsp;&nbsp;e=[]<BR>&nbsp;&nbsp;&nbsp;0.upto(3) { |j|<BR>&nbsp;&nbsp;&nbsp;&nbsp;if round!=nr<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e[j]= T[a[j][0]].rot(3) ^ T[a[(j+1)%4][1]].rot(2) ^ T[a[(j+2)%4][2]].rot(1) ^ T[a[(j+3)%4][3]]<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e[j]= [ S[a[j][0]], S[a[(j+1)%4][1]], S[a[(j+2)%4][2]], S[a[(j+3)%4][3]] ]<BR>&nbsp;&nbsp;&nbsp;&nbsp;end<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;a=e^k<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;a.flatten<BR>&nbsp;end</FONT></P>
<P><FONT size=1><FONT face="Courier New">&nbsp;def i_cipher(ciphertext)<BR>&nbsp;&nbsp;raise "Invalid length of input data." if </FONT><FONT face="Courier New">ciphertext.size!=@nb*4</FONT><BR><FONT face="Courier New">&nbsp;&nbsp;a=(</FONT><FONT face="Courier New">0..@nb-1).map</FONT></FONT><FONT size=1><FONT face="Courier New"> {|j| ciphertext[j*4,4]} &nbsp;# map ciphertext onto state<BR>&nbsp;&nbsp;</FONT><FONT face="Courier New">nr=@dk.size/4-1</FONT><BR><FONT face="Courier New">&nbsp;&nbsp;</FONT><FONT face="Courier New">k=@dk[nr*4,4</FONT></FONT><FONT size=1><FONT face="Courier New">]<BR>&nbsp;&nbsp;a^=k &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# add round key<BR>&nbsp;&nbsp;(nr-1).downto(0) { |round|<BR>&nbsp;&nbsp;&nbsp;</FONT><FONT face="Courier New">k=@dk[round*4,4</FONT></FONT><FONT size=1><FONT face="Courier New">]<BR>&nbsp;&nbsp;&nbsp;e=[]<BR>&nbsp;&nbsp;&nbsp;0.upto(3) { |j|<BR>&nbsp;&nbsp;&nbsp;&nbsp;if round!=0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e[j]= I_T[a[j][0]].rot(3) ^ I_T[a[(j-1)%4][1]].rot(2) ^ I_T[a[(j-2)%4][2]].rot(1) ^ I_T[a[(j-3)%4][3]]<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e[j]= [ I_S[a[j][0]], I_S[a[(j-1)%4][1]], I_S[a[(j-2)%4][2]], I_S[a[(j-3)%4][3]] ]<BR>&nbsp;&nbsp;&nbsp;&nbsp;end<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;a=e^k<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;a.flatten<BR>&nbsp;end</FONT><BR><FONT face="Courier New">end</FONT></FONT></P>
<P><FONT face="Courier New" size=1>AES=Rijndael.new(4)&nbsp;&nbsp; # Nb in AES is 4</FONT></P>
<P><FONT face="Courier New" size=1># Example Vectors (FIPS-197 Appendix C)</FONT></P>
<P><FONT face="Courier New" size=1>plaintext=[0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff]<BR>key=[0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]<BR>AES.load_ek key<BR>AES.load_dk key<BR>ciphertext = AES.cipher plaintext<BR>output = AES.i_cipher ciphertext<BR>output==plaintext<BR>key=[0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17] <BR>AES.load_ek key<BR>AES.load_dk key<BR>ciphertext = AES.cipher plaintext<BR>output = AES.i_cipher ciphertext<BR>output==plaintext<BR>key=[0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f]<BR>AES.load_ek key<BR>AES.load_dk key<BR>ciphertext = AES.cipher plaintext<BR>output = AES.i_cipher ciphertext<BR>output==plaintext</FONT></P><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F385606.html&title=AES+%28Rijndael%29+implementation+in+Ruby">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/385606.html</link>
   <author>vale</author>
   <pubDate>Mon, 13 Sep 2004 16:47:52 +0800</pubDate>
  </item>
  <item>
   <title>Rijndael (AES) 算法原文中的错误</title>
   <description><![CDATA[<P>paper: <A href="http://www.esat.kuleuven.ac.be/~rijmen/rijndael/rijndaeldocV2.zip">http://www.esat.kuleuven.ac.be/~rijmen/rijndael/rijndaeldocV2.zip</A></P>
<P>在“5.2.1 The Round Transformation”中：<BR><FONT face="Courier New" color=#f70909 size=2>c[j,0]&nbsp;=&nbsp;b[j,0]<BR>c[j,1]&nbsp;&nbsp;b[j-C1,1]<BR>c[j,2]&nbsp;&nbsp;b[j-C2,2]<BR>c[j,3]&nbsp;&nbsp;b[j-C3,3]</FONT></P>
<P><FONT face="Courier New" color=#f70909 size=2><FONT color=#000000 size=3>应为:</FONT><BR>c[j,0]&nbsp;=&nbsp;b[j,0]<BR>c[j,1]&nbsp;&nbsp;b[j+C1,1]<BR>c[j,2]&nbsp;&nbsp;b[j+C2,2]<BR>c[j,3]&nbsp;&nbsp;b[j+C3,3]</FONT></P>
<P><FONT face="Courier New" color=#f70909 size=2><FONT color=#000000 size=3>害得我查了半天错</FONT></P></FONT><!--sp--><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fvale.blogbus.com%2Flogs%2F385589.html&title=Rijndael+%28AES%29+%E7%AE%97%E6%B3%95%E5%8E%9F%E6%96%87%E4%B8%AD%E7%9A%84%E9%94%99%E8%AF%AF">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://vale.blogbus.com/logs/385589.html</link>
   <author>vale</author>
   <pubDate>Mon, 13 Sep 2004 16:30:58 +0800</pubDate>
  </item>
 </channel>
</rss>

