重温往日的欢乐

以前挺爱听歌的,后来有一段时间沉湎于私事,围棋和其他一些爱好,后来又到处流浪,文化生活仿佛冻结在早先的某个年代。等醒来时,歌坛也已经发生天翻地覆的变化。突然发现自己是老古董了,能记起/哼唱的,都是些老歌而已。

平安夜听了《我的中国心》的另一版本,触动情绪,翻出了张明敏的歌在听。《垄上行》仿佛让我回到了那个 让人心动的年代。。。

  我从垄上走过
  垄上一片秋色
  枝头树叶金黄
  风来声瑟瑟
  仿佛为季节讴歌
 
  我从垄上走过
  心中装满秋色
  田里稻穗飘香
  农夫忙收割
  微笑在脸上闪烁
 
  蓝天多辽阔 
  点缀著白云几朵
  青山不寂寞 
  有小河潺潺流过
  
  我从垄上走过
  总有不少收获
  若是有你同行
  你会陪伴我
  重温往日的欢乐

一年又一年

不知不觉,新年又到了。

2003年,的确是不平凡的一年,

在这一年,神五上天了,在太空中,终于有了中国人的足迹。嫦娥的故乡的家人终于也来到了太空。

在这一年,张国荣、英若诚、梅艳芳走了,虽然每个人都带着这样或者那样不为人知的遗憾离开了这个世界。

在这一年,开心又续任了MVP,并且与来自全国各地的MVPs聚会在北京。回想起来,仍然是那样的激动。

在这一年,开心终于向Microsoft迈进了第一步,向自己的理想不停的靠近,迎接更多的挑战。

在这一年,开心有了美丽活泼的女友,幸福的生活也在向自己一步步靠近,而这一切,都得益于那可怜的西红柿炒鸡蛋:P。

最重要的是,在这一年,“博客堂”轰轰烈烈的开张了,而且在短时期内,由默默无闻的一个个人的博客站点,逐步成长为MS技术爱好者活跃的园地,得到了大家越来越多的关注。

在这一年,博客堂开展了很多活动,“博客堂杯征文”大赛已经接近尾声,正在等待三位评委的最后评选结果(由于评委们的工作都非常忙,所以还需要大家再稍等一段时间)。而“博客堂装修工程招标”由于种种原因,没有得到热烈响应,我们准备在明年恰当时候,再次开展此类活动。

而我们的千元大奖项目,则已经由JGTM拔得了头筹。划上了圆满的句号。

一年又一年,大家都在不断长大。一年又一年,我们收获着成功的喜悦。

Tomorrow is another day…

 

.NET 与安全性(1)——— 数据加密算法

目前企业面临的计算环境和过去有很大的变化,许多数据资源能够依靠网络来远程存取,而且越来越多的通讯依赖于公共网络公共网络(如 Internet),而这些环境并不保证实体间的安全通信,数据在传输过程可能被其它人读取或篡改。

加密将防止数据被查看或修改,并在原本不安全的信道上提供安全的通信信道,它达到以下目的:

  • 保密性:防止用户的标识或数据被读取。
  • 数据完整性:防止数据被更改。
  • 身份验证:确保数据发自特定的一方。

一、数据加密/编码算法列表

常见用于保证安全的加密或编码算法如下:

1、常用密钥算法

密钥算法用来对敏感数据、摘要、签名等信息进行加密,常用的密钥算法包括:

  • DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
  • 3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
  • RC2和 RC4:用变长密钥对大量数据进行加密,比 DES 快;
  • IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
  • RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件快的长度也是可变的;
  • DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
  • AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;
  • BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
  • 其它算法,如ElGamal、Deffie-Hellman、新型椭圆曲线算法ECC等。

 2、单向散列算法

单向散列函数一般用于产生消息摘要,密钥加密等,常见的有:

  • MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;
  • SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;
  • MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。
  • CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。

 3、其它数据算法

其它数据算法包括一些常用编码算法及其与明文(ASCII、Unicode 等)转换等,如 Base 64Quoted PrintableEBCDIC 等。

二、算法的 .NET 实现

常见的加密和编码算法都已经在 .NET Framework中得到了实现,为编码人员提供了极大的便利性,实现这些算法的名称空间是:System.Security.Cryptography。

System.Security.Cryptography 命名空间提供加密服务,包括安全的数据编码和解码,以及许多其他操作,例如散列法、随机数字生成和消息身份验证。

System.Security.Cryptography 是按如下方式组织的:

1、私钥加密

私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密算法非常快(与公钥算法相比),特别适用于对较大的数据流执行加密转换。

.NET Framework 提供以下实现私钥加密算法的类:

  • DES:DESCryptoServiceProvider
  • RC2:RC2CryptoServiceProvider
  • Rijndael(AES):RijndaelManaged
  • 3DES:TripleDESCryptoServiceProvider

2、公钥加密和数字签名

 公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证。公钥可以被任何人使用;该密钥用于加密要发送到私钥持有者的数据。两个密钥对于通信会话都是唯一的。公钥加密算法也称为不对称算法,原因是需要用一个密钥加密数据而需要用另一个密钥来解密数据。

.NET Framework 提供以下实现公钥加密算法的类:

  • DSA:DSACryptoServiceProvider
  • RSA:RSACryptoServiceProvider 

3、哈希(Hash)值

哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。

.NET Framework 提供以下实现数字签名算法的类:

  • HMAC:HMACSHA1 (HMAC 为一种使用密钥的 Hash 算法)
  • MAC:MACTripleDES
  • MD5:MD5CryptoServiceProvider
  • SHA1:SHA1Managed、SHA256Managed、SHA384Managed、SHA512Managed

4、随机数生成

加密密钥需要尽可能地随机,以便使生成的密钥很难再现,所以随机数生成是许多加密操作不可分割的组成部分。

在 .NET Framework 中,RNGCryptoServiceProvider 是随机数生成器算法的实现,对于数据算法,.NET Framework 则在其它命名空间中实现,如 Convert 类实现 Base 64 编码,System.Text 来实现编码方式的转换等。

从以上来看,.NET Framework 对于数据加密/编码还是支持比较好,大大地方便了开发人员,但美中不足的是,.NET Framework 中的数据加密算法仍然不够完全,如 IDEA、BLOWFISH、其它算法,如ElGamal、Deffie-Hellman、ECC 等,对于一些其它的数据校验算法支持也不够,如 CRC、SFV 等,开发人员只能去从早期代码做移植或者寻找第三方厂商的实现。

BTW:看着这么多数据加密算法,是不是有点头晕?看看 这个图片 后,你一定感觉到一些压力的 🙂

自复制程序

记得当初学C的时候,书上的一道习题是要求写一个自复制的程序,就是其输出的东西和源码一模一样,当时想扁了头,还是没想/试出来,最后还是在Ken Thompson的Turing Award 演讲中找到了一个答案。所以在某种程度上讲,我的C不及格

在不看答案的情形下,哪位同好想不想用C#来试一下?笑脸

这里是个有各种语言源码的网站地址:

The Quine Page

Microsoft 2004 产品路线图

近年来,MS 为企业发布了太多的产品,并且使得他们都互相独立,以至于几乎不可能来完全跟踪他们。其它的许多产品是两层或三层产品,有的产品已经在过去很长的时间占了相当大的市场份额,而有些新产品则没有太多市场份额。

MS 利润核心的产品集中于六大基本领域:Windows Clients、Windows Server、Exchange Server、SQL Server、Office 和 Visual Studio,所以事情就变得简单了,Microsoft 的产品路线图就很容易跟踪了,在 2003 年,Redmond集中精力于发布 Windows Server 2003、Exchange Server 2003 和 Office 2003,在 2004 年,Microsoft 将把注意力转向 Windows Client、SQL Server 和 Visual Studio。

Windows Clients

或许是为了讨好得州法院或其它原因,2004 年所有的客户端的工作都和经营农场有关:“Shorthorn”、“Longhorn” 和“Lonestar”。

Shorthorn

这个术语有点夸张,起因是有人称在 Longhorn 出来之前,Microsoft 将发布的一个过渡期的产品,可能在 2005 年或 2006 年发布,也有可能就是 Windows XP 的一个 Service Pack(Steve Ballmer 声称 XP SP2 是 XP 的一个新的发布版本)

Microsoft 在 SP2 上将提供增强的安全特性,包括:网络保护,内存保护,更安全的EMAIL和更安全的网上冲浪Microsoft声称XP SP2 将在2004 上半年发布,并且不是一个普通的 SP。

Longhorn

Longhorn 并不在2004 年发布,但是这个下一代的 Windows 也许会成为整年的头条,而且,Microsoft 会至少再发布一个 Longhorn 的 Beta 版本,使得 IT 部门和开发人员有机会去测试。在十月的 PDC 上,Longhorn 中的一些关键技术已被公布,包括 Windows Future Storage (WinFS), 用于表现层的“Avalon” 和用于通讯的 “Indigo”。

Longhorn 也包含其它方面的一些增强特性,包括“Palladium“,下一代安全计算基础,它将 OS 和应有程序的安全性同硬件结合起来

Lonestar

许多人忽视了 Tablet PC 技术,形势正在改变,Microsoft Windows XP Tablet PC Edition 以及与其配套的硬件改变了 Tablet 技术的境况,Microsoft 在 2003 年秋季发布了 OneNote 2003,第一个面向 Tablet 的 Office 产品。

Microsoft 将于 2004 年发布 Windows XP Tablet PC Edition 2004 ,最被代号为“Lonestar”,增强的功能包括“ink to text”体验和更好将数字墨水与 Office 应用程序进行集成。

SQL Server

在 XP SP2 之后,最大的发布应属于 SQL Server (代号 : Yukon),它自 2000 年9月 SQL Server 2000 发布之后就开始研发,Yukon 将是Microsoft 数据库旗舰产品的一次全面更新。

Yukon 的主要特性包括与 CLR 的集成,在数据库中增加 XML 数据类型,新的集成管理特性和管理API,数据库镜像、用于 BI 的 DTS 增强,Reporting Services 和新的数据挖掘算法等。

Visual Studio

当 Yukon 发布时,Visual Studio 也期望发布一个新版本的 Visual Studio.NET,代号为:Whidbey,来帮助开发人员利用 Yukon 的新特性,Whidbey 将允许开人员用托管代码来编写存储过程,并且在 Visual Studio 中有相应的开发和调试工具。同时将提供对开发 Office 应用程序的增强支持,还有一些更有趣的特性,包括“点击一次”部署技术,对于架构师和企业开发人员的增强支持,包括项目分析设计工具、软件配置管理、部署和应用程序生命期管理等。

2004 的其它发布产品

Windows 2003 SP1

Windows 2003 SP1 将在 2004 年的某一时间发布,将可能利用 XP SP2 和 SQLServer 2000 安全包中的一些安全技术,主要特性将包括隔离、安全设置向导等。此外这个版本将形成对 64 位芯片(AMD Opteron 和 Itanium 2)提供支持的产品集。

Microsoft Virtual Server

Microsoft Virtual Server 是一个 Microsoft 支持 NT 策略的关键组件,它们希望依赖于 NT 应用程序的客户可以在 Windows 2003 中创建一个虚拟服务器,然后来运行这些应用程序。

SUS, BizTalk, MOM and ISA Server

Software Update Services 2.0,Microsoft补丁发布策略的一个关键组件;BizTalk Server 2004,是Microsoft 的 “Jupiter”产品(合并 BizTalk Server、Commerce Server、Content Management Server)的第一个部分。同时,Microsoft Operations Manager(MOM) 2004 版本和 Internet Security & Acceleration Server(ISA)2004 将在2004年早期进入 Beta 阶段。

来源:MCP Magazine

Keith Brown

blueinkstone提到了MSDN当前首页上的这篇文章,介绍了如何给Assembly加Strong Name的基本知识,确实很值得一读。

该文作者Keith BrownDevelopMentor的Principal Scientist,Windows安全方面的大家,著有《Programming Windows Security》一书,是Windows安全方面的经典之作。(前段时间,因为心虚,花了一段时间苦读了这本书,读得我脑子发昏。)

他经常在MSDN等杂志上发表安全方面的文章,最近在撰写.NET安全方面的书《A .Net Developer’s Guide to Windows Security》,你可以在这里找到几个章节。

经常看见网友在论坛上问SQL Server认证,访问局域网上文件等跟安全有关的问题,下面这篇Keith Brown写的文章应该可以帮助你了解ASP.NET里的安全机制:

A Tale of Three Security Contexts in ASP.NET

下面这篇微软KB文章也很值得一读:

INFO: Implementing Impersonation in an ASP.NET Application

年终的迷思和喜悦 — Heaven

昨天在收音机里又听过这首歌,有点惆怅,也有点心酸,仿佛又回到了从前 wild and free 的年代

一直都很喜欢这首歌,原作者是Bryan Adams,后来DJ Sammy重新灌制了这首歌曲,但最好听的还是Yanou 的版本

Delphi8 is out !

昨晚把Delphi8安装上并试用了一下,Delphi8是一个完全面向.NET平台的开发工具,而Win32平台仍然由Delphi7支撑,明年还将发布Delphi 7.1。就是说,Delphi7和Delphi8将成为两条平行的产品线。当然随着Win32市场的逐渐缩小,Delphi7不会再有后续的继承版本。

下面是我的第一印象:

1、Delphi8很耗内存,和VS.NET不相上下,但是编译速度快不少。安装目录是BDS\2.0,而C# Builder是BDS\1.0,而且Delphi8运行的进程里面也是那个相同的“bds.exe”。可以想象Delphi8和C#Builder共用的一个IDE,不知道以后会不会把他们两个集成起来。他们的界面也是非常非常相似的。

2、新建立了一个Web Application,同样的Code-Behind,只不过后台文件是.pas了,和VS的没什么两样,编译,浏览,然后去“Temporary ASP.NET Files”目录下面看生成的编译后的临时文件,果然仍然也是从.aspx生成.cs的C#代码文件,然后编译成dll。Delphi8只是将.pas代码文件编译成dll,然后通过继承让页面文件使用。从这个观点看Delphi8的ASP.NET设计,和其他语言Effiel、Python的VS插件所做的没太多区别。

3、打开.aspx的html视图,顶上仍然是那句“Page language=”c#””,试着在.aspx里面手工写上一个C#语法的函数,然后在下面Form的OnLoad中调用,没任何问题。更加证实了上面第2点所说的。

4、Delphi8新增的一些控件:BDP(Borland Data Provider,一组符合ADO.NET接口的数据提供组件,号称性能更好)、Web数据感知控件(Delphi的老传统,通过一个DBWebDataSource,将数据直接映射到DBWebLabel、DBWebListBox之类的控件上)、ECO(Enterprise Core Objects,Borland力推的一组MDA架构的组件,这个应该是重头戏,可Delphi产品网页上的ECO Tutorial居然还是“come soon…”,晕)。

Delphi8面对的挑战不小,基于.Net Framework 1.2的Whidbey明年春季就会发布beta了,而且VS的稳定性显然胜过Delphi8(Delphi8的IDE稳定性的确是个问题,我用了一阵子之后,代码提示就莫名其妙的不起作用了)。我觉得Borland不要再花费力气去搞什么C# Builder(显然C#程序员几乎都会选择VC#),认真的将Delphi8做得更加稳定、更具弹性,将Pascal语言的编译器做得速度更快更有效率。显然Delphi8的后续开发还在紧张进行(在C# Builder中出现过的可以引用J2EE Components的功能好像在Delphi8中还没有实现,不少论坛上都引用了李维的话,说Delphi Team过完圣诞就得加班)。希望Borland能带给我们一个优秀的.NET开发工具。

Disk-Based Caching in Whidbey, Longhorn…

在2004年春天发布的Whidbey beta中的ASP.NET 2.0,将增加一个特性,可以将Output Cache写到硬盘或者数据库中。这样我们可以将缓存在磁盘上保留很长一段时间,并且当后台数据变化后自动重新生成缓存。并且缓存也不再会因为工作进程的重启而消失。我们甚至可以设定使用多大的磁盘空间来放置缓存内容。

但是,Whidbey不会提供类似于支持Session的State Server一样的集中式的缓存服务器(这个特性对于服务器集群很有利),ASP.NET小组推荐在各个服务器上保留不同的缓存实例,而且他们认为这种模式的缓存的性能也会大打折扣。

这里是一篇很不错的介绍Longhorn三个主要编程模型Avalon、WinFS、Indigo的文章。其中对WinFS介绍了很多。其中提到在Longhorn PDC预览版本中,WinFS并未完成,在beta 1中将完成基础模型,在beta 2中将基本完成。而PDC预览中Indigo完成度就比较高了,而且微软也承诺在WinXP和Win2003中提供Indigo技术的实现,而且最终版的Longhorn里面,Indigo Message Server之间也没有信息交换的能力。(Otherwise, the release version of the Longhorn client wouldn’t have Indigo-compliant servers with which to trade messages. 难道我理解错了??)相对于现在创建WebService的简单性来说,Indigo也存在一个比较陡的学习曲线。(但Microsoft也在致力改善)

文章最后的两句话很有指导性。If you want a shorter-term payoff for the time you invest in exploring Longhorn, concentrate on Indigo’s MessageBus. Otherwise, make the effort to gain an equal working knowledge of all three pillars. If Microsoft’s bet on Longhorn pays off, you’ll be amply rewarded by the demand for competent Longhorn programmers. 如果你想马上从学习Longhorn编程模型中获益,那么就先学习Indigo,但是如果努力学习所有的这三个主要编程模型,一旦微软在Longhorn上的赌注兑现,那么你将从对Longhorn程序员的需求中大大获益。

成龙

自从在文史楼看过成龙的《醉拳》录像后,我一直是他的忠实影迷。

今天没事做,在看他的《燕尾服》(The Tuxedo)。都没有耐心看完,这电影真糟,跟他后来的《飞龙再生》(The Medallion)一样糟。

在这些电影里,成龙开始玩high tech,虽然电影里有几处还能显示出他的风采来,但high tech不是他的本色,而且电影情节都很糟糕。感觉如果成龙在这条路子上走下去的话,也许他的演艺生涯是到了尽头。

他也许还可以继续在Rush Hour的路子上走下去,这电影即使不受国人欢迎,但在美国还是很受欢迎的。

他想搞high tech的话,也许应该开始和Steven Spielberg合作,或者跟George Lucas合作,譬如拍星球大战的前前传,讲述Jedi的起源,饰演Yoda的师傅什么的,笑脸