<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_codeyu</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/34378/rss</id><updated>2012-03-25T09:52:06Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/34378/rss"/><entry><id>http://www.cnblogs.com/codeyu/archive/2012/03/19/2406455.html</id><title type="text">2012 依赖注入框架</title><summary type="text">以下内容来自维基百科的控制反转词条控制反转（英语：Inversion of control，缩写为IoC），也叫做依赖注入（Dependency Injection，简称DI），是面向对象编程中的一种设计原则，可以用来减低计算机代码之间的耦合度。起源 早在2004年，Martin Fowler就提出了“哪些方面的控制被反转了？”这个问题。他总结出是依赖对象的获得被反转了。基于这个结论，他为控制反转创造了一个更好的名字：依赖注入。许多非凡的应用（比HelloWorld.java更加优美，更加复杂）都是由两个或是更多的类通过彼此的合作来实现业务逻辑，这使得每个对象都需要，与其合作的对象（也就是它所</summary><published>2012-03-19T09:54:00Z</published><updated>2012-03-19T09:54:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2012/03/19/2406455.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2012/03/19/2406455.html"/><content type="html">&lt;p&gt;&lt;strong&gt;以下内容来自维基百科的&lt;a href="http://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC"&gt;控制反转词条&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;控制反转&lt;/strong&gt;（&lt;a title="英语" href="http://zh.wikipedia.org/wiki/%E8%8B%B1%E8%AF%AD"&gt;英语&lt;/a&gt;：&lt;span lang="en" xml:lang="en"&gt;Inversion of control&lt;/span&gt;，缩写为&lt;strong&gt;IoC&lt;/strong&gt;），也叫做&lt;a class="new" title="依赖注入" href="http://zh.wikipedia.org/w/index.php?title=%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;依赖注入&lt;/font&gt;&lt;/a&gt;（&lt;span lang="en" xml:lang="en"&gt;&lt;strong&gt;Dependency Injection&lt;/strong&gt;&lt;/span&gt;，简称&lt;strong&gt;DI&lt;/strong&gt;），是&lt;a class="mw-redirect" title="面向对象编程" href="http://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B"&gt;面向对象编程&lt;/a&gt;中的一种设计原则，可以用来减低计算机代码之间的&lt;a class="new" title="耦合（计算机科学）" href="http://zh.wikipedia.org/w/index.php?title=%E8%80%A6%E5%90%88%EF%BC%88%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6%EF%BC%89&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;耦合度&lt;/font&gt;&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;span id=".E8.B5.B7.E6.BA.90" class="mw-headline"&gt;起源&lt;/span&gt; &lt;p&gt;早在2004年，&lt;a class="mw-redirect" title="Martin Fowler" href="http://zh.wikipedia.org/wiki/Martin_Fowler"&gt;Martin Fowler&lt;/a&gt;就提出了&amp;#8220;哪些方面的控制被反转了？&amp;#8221;这个问题。他总结出是依赖对象的获得被反转了。基于这个结论，他为&lt;strong&gt;控制反转&lt;/strong&gt;创造了一个更好的名字：&lt;a class="new" title="依赖注入" href="http://zh.wikipedia.org/w/index.php?title=%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;依赖注入&lt;/font&gt;&lt;/a&gt;。许多非凡的应用（比HelloWorld.java更加优美，更加复杂）都是由两个或是更多的类通过彼此的合作来实现&lt;a class="new" title="业务逻辑" href="http://zh.wikipedia.org/w/index.php?title=%E4%B8%9A%E5%8A%A1%E9%80%BB%E8%BE%91&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;业务逻辑&lt;/font&gt;&lt;/a&gt;，这使得每个对象都需要，与其合作的对象（也就是它所依赖的对象）的引用。如果这个获取过程要靠自身实现，那么如你所见，这将导致代码高度&lt;a title="耦合" href="http://zh.wikipedia.org/wiki/%E8%80%A6%E5%90%88"&gt;耦合&lt;/a&gt;并且难以测试。&lt;/p&gt;&lt;p&gt;IoC 亦称为 &amp;#8220;依赖倒置原理&amp;#8221;("Dependency Inversion Principle") &lt;span id="ref_Martin_2002_none" class="reference"&gt;&lt;a href="http://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC#endnote_Martin_2002_none"&gt;(Martin 2002:127)&lt;/a&gt;&lt;/span&gt;。差不多所有&lt;a class="mw-redirect" title="框架" href="http://zh.wikipedia.org/wiki/%E6%A1%86%E6%9E%B6"&gt;框架&lt;/a&gt;都使用了&amp;#8220;&lt;a class="new" title="倒置注入" href="http://zh.wikipedia.org/w/index.php?title=%E5%80%92%E7%BD%AE%E6%B3%A8%E5%85%A5&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;倒置注入&lt;/font&gt;&lt;/a&gt;&lt;span id="ref_Fowler_2004_none" class="reference"&gt;&lt;a href="http://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC#endnote_Fowler_2004_none"&gt;(Fowler 2004)&lt;/a&gt;&lt;/span&gt;技巧，这可说是IoC原理的一项应用。&lt;a class="new" title="SmallTalk" href="http://zh.wikipedia.org/w/index.php?title=SmallTalk&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;SmallTalk&lt;/font&gt;&lt;/a&gt;，&lt;a title="C++" href="http://zh.wikipedia.org/wiki/C%2B%2B"&gt;C++&lt;/a&gt;, &lt;a class="new" title="Java 程序语言" href="http://zh.wikipedia.org/w/index.php?title=Java_%E7%A8%8B%E5%BA%8F%E8%AA%9E%E8%A8%80&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;Java&lt;/font&gt;&lt;/a&gt; 或各种.NET 语言等&lt;a class="new" title="面向对象程序语言" href="http://zh.wikipedia.org/w/index.php?title=%E9%9D%A2%E5%90%91%E5%B0%8D%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AA%9E%E8%A8%80&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;面向对象程序语言&lt;/font&gt;&lt;/a&gt;的程序员已使用了这些原理。&lt;/p&gt;&lt;p&gt;控制反转是&lt;a title="Spring Framework" href="http://zh.wikipedia.org/wiki/Spring_Framework"&gt;Spring Framework&lt;/a&gt;的核心。&lt;/p&gt;&lt;p&gt;应用控制反转，对象在被创建的时候，由一个调控系统内所有对象的外界实体，将其所依赖的对象的引用，传递给它。也可以说，依赖被注入到对象中。所以，控制反转是，关于一个对象如何获取它所依赖的对象的引用，这个责任的反转&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id=".E6.8A.80.E8.A1.93.E6.80.A7.E8.AA.AA.E6.98.8E" class="mw-headline"&gt;技术性说明&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id=".E6.9C.AF.E8.AF.AD" class="mw-headline"&gt;术语&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a class="new" title="Class (computer science)" href="http://zh.wikipedia.org/w/index.php?title=Class_(computer_science)&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;Class&lt;/font&gt;&lt;/a&gt; &lt;tt&gt;X&lt;/tt&gt; &lt;em&gt;依赖于&lt;/em&gt; class &lt;tt&gt;Y&lt;/tt&gt; 只在如下状况中成立:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;X 拥有 Y 的控制并且在 X 中使用 Y&lt;/li&gt;&lt;li&gt;X 是 Y 的派生物&lt;/li&gt;&lt;li&gt;X 依赖于 Z，而 Z 又依赖于 Y (&lt;a class="new" title="Transitive relation" href="http://zh.wikipedia.org/w/index.php?title=Transitive_relation&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;transitivity&lt;/font&gt;&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;X 依赖于 Y 并不表示 Y 也依赖于 X。但如果 X 和 Y 同时依赖于对方，这种依赖性被称作 &lt;a class="new" title="循环依赖" href="http://zh.wikipedia.org/w/index.php?title=%E5%BE%AA%E7%92%B0%E4%BE%9D%E8%B3%B4&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;em&gt;&lt;font color="#ba0000"&gt;循环依赖&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;：这时，X 无法和 Y 分开单独使用，反之亦然。如果在一个面对对象程式中拥有太多的循环依赖，这可能表示这个程式是个欠佳的设计。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id=".E6.89.93.E7.A0.B4.E4.BE.9D.E8.B5.96" class="mw-headline"&gt;打破依赖&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果类X的一个实例对象x调用了类Y的一个实例对象y的方法，那么就称类X依赖于类Y。为了打破这种依赖&amp;#8212;&amp;#8212;&amp;#8220;反转&amp;#8221;，首先我们可以引入一个接口I（第三方类），接口I中声明了对象y将被对象x调用的所有方法；然后，我们对类Y稍加改造，使其实现接口I；最后，我们把在对象x中对y的调用改为对接口I中对应方法的调用。经过这番改造后，原先的X对Y的依赖关系不存在了，类X和Y现在都依赖于接口I。&lt;/p&gt;&lt;p&gt;这种通过引入接口I来消除类X对Y的依赖的方法，被称作&amp;#8220;控制反转&amp;#8221;，又叫做&amp;#8220;依赖注入&amp;#8221;。&lt;/p&gt;&lt;p&gt;需要注意的是，类Y可能还依赖于其他类。在应用反转之前，X依赖于Y，从而也间接依赖于Y所依赖的所有&amp;#8220;其他类&amp;#8221;。应用控制反转之后，不仅X对Y的直接依赖，且前面提到的那些所有的间接依赖也消除了。而新引入的接口I则不依赖于任何类。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="IoC_.E7.9A.84.E9.A1.9E.E5.9E.8B" class="mw-headline"&gt;IoC 的类型&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Martin Fowler 将 IoC 分成三类。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Type 1 : 基于interface (interface injection)。Depending object 需要实作(implement) 特定 interface 以供&lt;a class="mw-redirect" title="框架" href="http://zh.wikipedia.org/wiki/%E6%A1%86%E6%9E%B6"&gt;框架&lt;/a&gt;注入所需物件。&lt;/li&gt;&lt;li&gt;Type 2 : 基于setter (setter injection)。Depending object 需要实现特定 setter 方法 (但不需要依赖特定interface)，&lt;/li&gt;&lt;li&gt;Type 3 : 基于constructor (constructor injection)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;有的&lt;a class="mw-redirect" title="框架" href="http://zh.wikipedia.org/wiki/%E6%A1%86%E6%9E%B6"&gt;框架&lt;/a&gt;，如&lt;a class="new" title="Plexus" href="http://zh.wikipedia.org/w/index.php?title=Plexus&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;Plexus&lt;/font&gt;&lt;/a&gt; 提出Type 4 IoC，以field为基础，惟此法到目前为止尚未被广泛接纳。&lt;sup id="cite_ref-0" class="reference"&gt;&lt;a href="http://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC#cite_note-0"&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&lt;p&gt;各种&lt;a class="mw-redirect" title="框架" href="http://zh.wikipedia.org/wiki/%E6%A1%86%E6%9E%B6"&gt;框架&lt;/a&gt;不一定支援以上所有IoC类型。例如&lt;a class="new" title="SpringFramework" href="http://zh.wikipedia.org/w/index.php?title=SpringFramework&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;SpringFramework&lt;/font&gt;&lt;/a&gt; 支援Type 1、Type 2 及 Type 3 IoC，而 &lt;a class="new" title="Plexus" href="http://zh.wikipedia.org/w/index.php?title=Plexus&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;Plexus&lt;/font&gt;&lt;/a&gt;支援 Type 2、Type 3 和 Type 4。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id=".E6.8E.A7.E5.88.B6.E5.8F.8D.E8.BD.AC.E5.BA.94.E7.94.A8.E5.AE.9E.E4.BE.8B" class="mw-headline"&gt;控制反转应用实例&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="C.2B.2B" class="mw-headline"&gt;C++&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="external text" href="http://code.google.com/p/pococapsule" rel="nofollow"&gt;PocoCapsule IoC and DSM framework&lt;/a&gt; GPL开源的，支持完全非侵入C++的控制反转（IoC）及领域特定建模（DSM）容器&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;span id="Java" class="mw-headline"&gt;Java&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用&lt;a title="Java" href="http://zh.wikipedia.org/wiki/Java"&gt;Java语言&lt;/a&gt;写成的程式在控制反转容器（&lt;em&gt;Inversion of Control Container&lt;/em&gt;）里应用了控制反转&lt;span id="ref_Fowler_2004_none" class="reference"&gt;&lt;a href="http://zh.wikipedia.org/wiki/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC#endnote_Fowler_2004_none"&gt;(Martin 2004)&lt;/a&gt;&lt;/span&gt;。软件需要一个来自容器的物件，而容器自行建构物件和它的附属物。&lt;a class="extiw" title="en:Art Technology Group" href="http://en.wikipedia.org/wiki/Art_Technology_Group"&gt;ATG&lt;/a&gt; 的 [[en:Dynamo Application Server|Dynamo 应用程式服务器]是第一个利用这途径的环境之一，近来关于这些容器的例子包含了 &lt;a class="new" title="HiveMind" href="http://zh.wikipedia.org/w/index.php?title=HiveMind&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;HiveMind&lt;/font&gt;&lt;/a&gt;、&lt;a class="external text" href="http://www.picocontainer.org/" rel="nofollow"&gt;PicoContainer&lt;/a&gt;、&lt;a class="external text" href="http://www.springframework.org/" rel="nofollow"&gt;Spring Framework&lt;/a&gt;（注意 Spring 是一个完整的企业平台，而非 IOC容器）、&lt;a class="new" title="Apache Excalibur" href="http://zh.wikipedia.org/w/index.php?title=Apache_Excalibur&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;Apache Excalibur&lt;/font&gt;&lt;/a&gt;、&lt;a class="new" title="Seasar" href="http://zh.wikipedia.org/w/index.php?title=Seasar&amp;amp;action=edit&amp;amp;redlink=1"&gt;&lt;font color="#ba0000"&gt;Seasar&lt;/font&gt;&lt;/a&gt; 和 &lt;a class="external text" href="http://www.dpml.net/metro/" rel="nofollow"&gt;DPML Metro&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span id=".NET" class="mw-headline"&gt;.NET&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="external text" href="http://www.springframework.net/" rel="nofollow"&gt;Spring.NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://objectbuilder.codeplex.com/" rel="nofollow"&gt;ObjectBuilder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://structuremap.sourceforge.net/" rel="nofollow"&gt;Structuremap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://www.castleproject.org/index.php/Main_Page" rel="nofollow"&gt;CastleProject&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://s2container.net.seasar.org/en/index.html"&gt;Seasar&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://unity.codeplex.com/"&gt;Unity&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/autofac/"&gt;Autofac&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ninject.org/index.html"&gt;Ninject&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/linfu/"&gt;LinFu&lt;/a&gt;&amp;nbsp;&lt;a href="https://github.com/philiplaureano/Hiro"&gt;Hiro&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nlite.codeplex.com/"&gt;Nlite mini&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/codeyu/aggbug/2406455.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codeyu/archive/2012/03/19/2406455.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2012/03/09/2387388.html</id><title type="text">2012 .NET ORM 介绍</title><summary type="text">微软自家的LINQ to SQL， ADO.NET Entity Framework不多说。商业：1.﻿LightSpeed﻿（免费版比较垃圾。表限制8个。另此厂商有NHibernate Designer工具）http://www.mindscapehq.com/products/lightspeed﻿2.﻿ ﻿﻿Entityspaces(支持Access数据库，比较看好，求破解）。http://www.entityspaces.net/portal/Home.aspx3.﻿OpenAccess﻿(有比较给力的免费版。)http://www.telerik.com/products/orm.a</summary><published>2012-03-09T04:01:00Z</published><updated>2012-03-09T04:01:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2012/03/09/2387388.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2012/03/09/2387388.html"/><content type="html">&lt;p&gt;&amp;nbsp;微软自家的&lt;a href="http://msdn.microsoft.com/en-us/library/bb386976.aspx"&gt;LINQ to SQL&lt;/a&gt;， &lt;a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx"&gt;ADO.NET Entity Framework&lt;/a&gt;不多说。&amp;nbsp;&lt;/p&gt;&lt;p&gt;商业：&lt;/p&gt;&lt;p&gt;1.&lt;span id="lightspeed" class="searchwordc6bfd6"&gt;&lt;strong&gt;&lt;span id="selectionBoundary_1331261526269_0356655886862427"&gt;﻿&lt;/span&gt;LightSpeed&lt;span id="selectionBoundary_1331261526269_4183139323722571"&gt;﻿&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;（免费版比较垃圾。表限制8个。另此厂商有&lt;span style="font-size: 10pt"&gt;&lt;span id="nhibernate" class="searchworddf6bb1"&gt;NHibernate&lt;/span&gt; Designer工具&lt;/span&gt;&lt;span style="font-size: 8pt"&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.mindscapehq.com/products/lightspeed"&gt;http://www.mindscapehq.com/products/lightspeed&lt;/a&gt;&amp;nbsp;&lt;span id="selectionBoundary_1331261778347_09256761358119547"&gt;﻿&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;2.&lt;span style="text-align: left; line-height: 18px; background-color: #ff9466; font-family: 'Segoe UI', Arial, Helvetica, sans-serif; white-space: nowrap; font-weight: bold"&gt;&lt;span id="selectionBoundary_1331259278781_6835424825549126"&gt;﻿&lt;/span&gt;&lt;/span&gt; &lt;strong&gt;&lt;span style="text-align: left; line-height: normal; background-color: #f9fbff; font-family: Arial, Helvetica, sans-serif; color: #191b1c; font-size: 12px"&gt;&lt;span style="font-size: 12pt" id="entityspaces" class="searchwordf2032"&gt;&lt;span id="selectionBoundary_1331261545650_2074513218831271"&gt;﻿&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt" id="entityspaces" class="searchwordf2032"&gt;&lt;span id="selectionBoundary_1331261545650_8551961537450552"&gt;﻿&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Entityspaces&lt;/strong&gt;(支持&lt;span style="text-align: left; line-height: 18px; background-color: #ff9466; font-family: 'Segoe UI', Arial, Helvetica, sans-serif; white-space: nowrap"&gt;&lt;span style="background-color: #ffffff" id="selectionBoundary_1331259278781_41318759974092245"&gt;Access数据库，比较看好，求破解）。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://www.entityspaces.net/portal/Home.aspx"&gt;http://www.entityspaces.net/portal/Home.aspx&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;p&gt;&amp;nbsp;3.&lt;span id="openaccess" class="searchworde01474"&gt;&lt;strong&gt;&lt;span id="selectionBoundary_1331261525085_846084728371352"&gt;﻿&lt;/span&gt;&lt;span style="background-color: #ffffff" id="openaccess" class="searchwordecd522"&gt;OpenAccess&lt;/span&gt;&lt;span id="selectionBoundary_1331261525085_2967016128823161"&gt;﻿&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;(有比较给力的免费版。)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.telerik.com/products/orm.aspx"&gt;http://www.telerik.com/products/orm.aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.&lt;span style="font-size: 12pt"&gt;&lt;strong&gt;eXpressPersistent Objects（XPO）&lt;/strong&gt;（支持Access）&lt;/span&gt;&lt;/p&gt;&lt;a href="http://www.devexpress.com/products/NET/ORM/"&gt;http://www.devexpress.com/products/NET/ORM/&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;p&gt;&amp;nbsp;5.&lt;span style="background-color: #ffffff; font-family: Arial, Geneva, Helvetica, sans-serif; font-size: 16px"&gt;&lt;strong&gt;DataObjects.Net&lt;/strong&gt;（自称对LINQ支持比较给力。但支持数据库比较少。有老版本的&lt;a href="http://code.google.com/p/dataobjectsdotnet/downloads/list"&gt;开源版&lt;/a&gt;）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://dataobjects.net/"&gt;http://dataobjects.net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;6.&lt;strong style="line-height: normal; background-color: #ffffff; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px"&gt;LLBLGen Pro &lt;/strong&gt;&lt;span style="line-height: normal; background-color: #ffffff; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px"&gt;（虽然支持的数据库比较多。但LINQ to SQL 只能用于MS SQL SERVER）&lt;/span&gt;&lt;/p&gt;&lt;a href="http://www.llblgen.com/defaultgeneric.aspx"&gt;http://www.llblgen.com/defaultgeneric.aspx&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;p&gt;7.&lt;span style="line-height: 14px; background-color: #ffffff; font-family: verdana, arial, helvetica, sans-serif; color: #61778d; font-size: 12px"&gt;&lt;strong&gt;LinqConnect&lt;/strong&gt; ，&lt;/span&gt; &lt;span style="text-align: justify; line-height: 14px; background-color: #ffffff; font-family: verdana, arial, helvetica, sans-serif; color: #61778d; font-size: 12px"&gt;&lt;strong&gt;Entity Developer&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;和&amp;nbsp;&lt;span style="line-height: 14px; background-color: #ffffff; font-family: verdana, arial, helvetica, sans-serif; color: #61778d; font-size: 12px"&gt;&lt;strong&gt;dotConnect Universa&lt;/strong&gt;l （&lt;/span&gt;&lt;span style="line-height: 14px; background-color: #ffffff; font-family: verdana, arial, helvetica, sans-serif; font-size: 12px"&gt;产品比较乱。对LINQ支持比较给力。有自动生成代码和可视化的工具。）&lt;/span&gt;&lt;/p&gt;&lt;a href="http://www.devart.com/dotconnect/"&gt;http://www.devart.com/dotconnect/&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;p&gt;8.&lt;strong&gt;&lt;span style="line-height: 16px; background-color: #ffffff; font-family: arial, helvetica, sans-serif; color: #666666; font-size: 12px"&gt;DataDirect Connect&amp;nbsp;&lt;/span&gt;&lt;em style="padding-bottom: 0px; line-height: 16px; border-right-width: 0px; background-color: #ffffff; margin: 0px; outline-color: ; padding-left: 0px; outline-width: 0px; padding-right: 0px; font-family: arial, helvetica, sans-serif; border-top-width: 0px; border-bottom-width: 0px; color: #666666; font-size: 12px; vertical-align: baseline; border-left-width: 0px; padding-top: 0px; border-image: initial"&gt;for&amp;nbsp;&lt;/em&gt;&lt;span style="line-height: 16px; background-color: #ffffff; font-family: arial, helvetica, sans-serif; color: #666666; font-size: 12px"&gt;ADO.NET（&lt;/span&gt;&lt;span style="line-height: 16px; background-color: #ffffff; font-family: arial, helvetica, sans-serif; font-size: 12px"&gt;这个是ORM吗？应该和微软的产品合用）&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.datadirect.com/products/net/index.html"&gt;http://www.datadirect.com/products/net/index.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;9.ALINQ（国人开发。前期反编译了微软的SQL to SQL。后来自己写了各数据库provider发展而成。有免费版。中小型项目都可以用。但国人开发产品似乎充满困境。作者也开发了&lt;a href="http://www.cnblogs.com/ansiboy/archive/2011/02/25/1964944.html"&gt;&lt;/a&gt;&lt;a href="http://www.cnblogs.com/ansiboy/archive/2011/02/25/1964944.html"&gt;&lt;/a&gt;&lt;a href="http://www.cnblogs.com/ansiboy/archive/2011/02/25/1964944.html"&gt;NHIbernate的代码&lt;/a&gt;生成器）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://www.alinq.org/"&gt;http://www.alinq.org/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;开源&lt;/p&gt;&lt;p&gt;1.&lt;span id="nhibernate" class="searchworddf6bb1"&gt;NHibernate&lt;/span&gt;(大名鼎鼎，发展不错。有很多书可学。)&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://nhforge.org/Default.aspx"&gt;http://nhforge.org/Default.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2.&lt;strong style="line-height: normal; background-color: #ffffff; font-family: 'Trebuchet MS', Verdana, Geneva, Arial, Helvetica, sans-serif; color: #353535; font-size: 16px"&gt;Castle ActiveRecord&lt;/strong&gt;&amp;nbsp;（建立在NHibernate之上，用.net&amp;nbsp;attribute 映射。不过基本都用NHibernate了。Castle有好多项目可学习参考）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://www.castleproject.org/castle/projects.html"&gt;http://www.castleproject.org/castle/projects.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3.&lt;span style="text-align: left; line-height: 20px; background-color: #6eff66; font-family: 'courier new'; font-size: 22px; font-weight: bold"&gt;&lt;span id="selectionBoundary_1331262932605_30003495956771076"&gt;﻿&lt;/span&gt;&lt;/span&gt;&lt;span style="text-align: left; line-height: 20px; background-color: #ffffff; font-family: 'courier new'; font-size: 22px; font-weight: bold"&gt;SubSonic&lt;/span&gt;&lt;span style="text-align: left; line-height: 20px; background-color: #6eff66; font-family: 'courier new'; font-size: 22px; font-weight: bold"&gt;&lt;span id="selectionBoundary_1331262932605_11838496662676334"&gt;﻿&lt;/span&gt;&lt;/span&gt;&amp;nbsp;（性能是问题。更新缓慢）&lt;/p&gt;&lt;p&gt;&lt;a href="http://subsonicproject.com/"&gt;http://subsonicproject.com/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.&amp;nbsp;&lt;a style="color: #000000; text-decoration: none" id="ctl00_ctl00_MasterContent_ProjectTitleControl1_ProjectTitleLink1" href="http://opf3.codeplex.com/"&gt;&lt;span style="font-size: 12pt" id="ctl00_ctl00_MasterContent_ProjectTitleControl1_TitleLabel"&gt;Opf3（貌似不更新了，可以学习用）&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://opf3.codeplex.com/"&gt;http://opf3.codeplex.com/&lt;/a&gt;&amp;nbsp;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5.&lt;strong style="line-height: normal; background-color: #ffffff; font-family: arial, sans-serif; font-size: 13px"&gt;MyBatis.NET&lt;/strong&gt;&amp;nbsp;（也不更新了。）&lt;br /&gt;&amp;nbsp;&lt;a href="http://code.google.com/p/mybatisnet/"&gt;http://code.google.com/p/mybatisnet/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6.BLToolkit(网站貌似被和谐。这个看介绍挺不错。支持的数据库也不少。性能据说也行。但似乎国内没人用。)&lt;/p&gt;&lt;a href="http://bltoolkit.net/"&gt;http://bltoolkit.net/&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;p&gt;&lt;a href="https://github.com/igor-tkachev/bltoolkit"&gt;https://github.com/igor-tkachev/bltoolkit&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;7.&lt;strong style="text-align: left; line-height: 16px; background-color: #ffffff; font-family: tahoma; color: #444444; font-size: 12px"&gt;MyGeneration（代码自动生成工具和ORM。有各种模板。停止更新了）&lt;/strong&gt;&lt;/p&gt;&lt;div style="text-align: left"&gt;&lt;a href="http://www.mygenerationsoftware.com/portal/default.aspx"&gt;http://www.mygenerationsoftware.com/portal/default.aspx&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;开源微型ORM（？）&lt;/p&gt;&lt;p&gt;不多介绍：&amp;nbsp;&lt;span style="line-height: 16px; background-color: #ffffff; font-family: arial, sans-serif; font-size: 13px" id="dapper"&gt;&lt;a href="http://code.google.com/p/dapper-dot-net/"&gt;Dapper&lt;/a&gt;&lt;/span&gt;&amp;nbsp;，&lt;a style="border-bottom: #333333 1px dotted; padding-bottom: 0px; line-height: 25px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: verdana, Arial, Helvetica, sans-serif; color: #000000; text-decoration: none; padding-top: 0px" href="https://github.com/markrendle/Simple.Data" rel="nofollow"&gt;&lt;span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; color: #0000cc; padding-top: 0px"&gt;Simple.Data&lt;/span&gt;&lt;/a&gt;&amp;nbsp;，&lt;a style="border-bottom: #333333 1px dotted; padding-bottom: 0px; line-height: 25px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: verdana, Arial, Helvetica, sans-serif; color: #000000; text-decoration: none; padding-top: 0px" href="http://www.toptensoftware.com/petapoco/" rel="nofollow"&gt;&lt;span style="padding-bottom: 0px; background-color: #dcff66; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" id="petapoco"&gt;PetaPoco&lt;/span&gt;&lt;/a&gt;&amp;nbsp;，&lt;strong style="padding-bottom: 0px; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; font-weight: bold; padding-top: 0px; border-image: initial"&gt;&lt;a style="padding-bottom: 0px; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px; border-bottom-width: 0px; color: #4183c4; border-left-width: 0px; text-decoration: none; padding-top: 0px; border-image: initial" href="http://fluentdata.codeplex.com/"&gt;&lt;span style="line-height: normal; background-color: #ffffff; font-family: 'Segoe UI', 'Microsoft Sans Serif', Arial, Geneva, sans-serif; color: #30332d; font-size: 13px"&gt;FluentData，&lt;/span&gt;massive&lt;/a&gt;，&lt;/strong&gt;&lt;a href="https://github.com/paulyoder/LinqToExcel"&gt;LINQtoExcel&lt;/a&gt;(这个是读取Excel里的数据类库)&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以上就是市面上比较常见的.net ORM框架。其实比较完美的ORM框架应该是满足：&lt;/p&gt;&lt;p&gt;1.对象与数据库的映射&lt;/p&gt;&lt;p&gt;2.对象缓存&lt;/p&gt;&lt;p&gt;3.可视化设计和代码生成工具&lt;/p&gt;&lt;p&gt;4.支持多数据库&lt;/p&gt;&lt;p&gt;5.动态查询&lt;br /&gt;6.延迟加载&lt;br /&gt;7.非侵入式持久化&lt;br /&gt;8.性能优良&lt;/p&gt;&lt;p&gt;9.支持存储过程和事务&lt;/p&gt;&lt;p&gt;10.多面向对象框架支持&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&amp;nbsp;这样的ORM框架有木有？&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codeyu/aggbug/2387388.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codeyu/archive/2012/03/09/2387388.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2010/06/12/1756941.html</id><title type="text">（转）QQ2010手动去广告方法</title><summary type="text">一、去除腾讯迷你首页：首先进入QQ的安装文件夹，接着进入 Plugin＼Com.Tencent.Advertisement＼bin 文件夹，这里你会看到一个Advertisement.dll文件，它就是迷你首页的关键所在，只需将这个文件改成只读属性，以后启动QQ就不会再看到迷你首页了。二、去除聊天窗口右上角广告：方法 1、这个操作针对XP和Vista/Win7略有不同，主要是文件夹路径上的。XP：...</summary><published>2010-06-12T03:57:00Z</published><updated>2010-06-12T03:57:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2010/06/12/1756941.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2010/06/12/1756941.html"/><content type="html">&lt;p&gt;一、去除腾讯迷你首页：&lt;br /&gt;首先进入QQ的安装文件夹，接着进入 Plugin＼Com.Tencent.Advertisement＼bin 文件夹，这里你会看到一个Advertisement.dll文件，它就是迷你首页的关键所在，只需将这个文件改成只读属性，以后启动QQ就不会再看到迷你首页了。&lt;br /&gt;&lt;br /&gt;二、去除聊天窗口右上角广告：&lt;br /&gt;方法 1、这个操作针对XP和Vista/Win7略有不同，主要是文件夹路径上的。&lt;br /&gt;XP：&lt;br /&gt;进入 X（系统所在盘）:＼Documents and Settings＼用户名＼Application Data＼Tencent＼QQ＼Misc＼com.tencent.advertisement，首先删除这个文件夹里面的所有文件，注意文件夹本身不能删除，然后把当前用户的写入权限给拒绝掉（需要当前分区为NTFS格式）。方法：文件夹上右键，属性 - 安全标签，选中当前登录用户，接着在下方&amp;#8220;写入&amp;#8221;权限里，拒绝上打勾。&lt;br /&gt;Vista/Windows 7&lt;br /&gt;进入X:＼users＼用户名＼appdata＼Roaming＼Tencent＼QQ＼Misc＼com.tencent.advertisement，之后操作同XP。&lt;br /&gt;如果看不到用户名的话请点菜单栏上的 工具&amp;gt;文件夹选项&amp;gt;查看&amp;gt;显示隐藏的文件和文件夹 就看到了,&lt;br /&gt;Administrator是当前系统的用户名, 默任的都是Administrator) &lt;br /&gt;方法 2、这个有点麻烦。在QQ的安装目录下的Plugin\Com.Tencent.Advertisement文件夹内有个Bundle.rdb的文件，所有罪恶就在这里面。当然，我们是不能删除的，这样QQ因为缺乏文件而无法启动，我们要做的是解包这个文件（可以用 RDB文件打包解包工具&amp;nbsp;&amp;nbsp;来进行解包和再打包。下载这个&lt;br /&gt;RDB文件打包解包工具&amp;nbsp;&amp;nbsp;后要是不能运行你还要再下载安装Microsoft_DotNetFXCHS2.0&amp;nbsp;&amp;nbsp;这样就可以运行解包工具了。Microsoft_DotNetFXCHS2.0&amp;nbsp;&amp;nbsp;和 RDB文件打包解包工具&amp;nbsp;&amp;nbsp;可以到网上自己下载。），解包后在目录Bundle\I18N\2052下，有个StringBundle.xml文件，用记事本打开它，删除如下字段：&lt;br /&gt;&amp;lt;String id="IDS_DEFAULT_AD_BANNER_FN"&amp;gt;defaultbanner.jpg&amp;lt;/String&amp;gt; &lt;br /&gt;&amp;lt;String id="IDS_DEFAULT_AD_BANNER_CLICKURL"&amp;gt;&lt;a href="http://www.tencentmind.com/" target="_blank"&gt;http://www.tencentmind.com/&lt;/a&gt;&amp;lt;&lt;br /&gt;/String&amp;gt;&amp;nbsp; &amp;nbsp;&amp;lt;String id="IDS_DEFAULT_AD_RICH_FN"&amp;gt;defaultrich.swf&amp;lt;/String&amp;gt; &lt;br /&gt;&amp;lt;String id="IDS_DEFAULT_GROUP_BANNER_FN"&amp;gt;GroupBanner.jpg&amp;lt;/String&amp;gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;String id="IDS_DEFAULT_AD_VIDEO_FN"&amp;gt;defaultvideo.swf&amp;lt;/String&amp;gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;String id="IDS_DEFAULT_AD_VIDEO_CLICKURL"&amp;gt;&lt;a href="http://www.tencentmind.com/" target="_blank"&gt;http://www.tencentmind.com/&lt;/a&gt;&amp;lt;/String&amp;gt;&amp;nbsp; &amp;nbsp;&amp;lt;&lt;br /&gt;String id="IDS_ADVERTISEMENT_TITLE"&amp;gt;&lt;a href="http://im.qq.com/" target="_blank"&gt;http://im.qq.com/&lt;/a&gt;&amp;lt;/String&amp;gt;&lt;br /&gt;然后再打包放回原处。&lt;br /&gt;（修改Bundle.rdb文件时要退出QQ。还要记得备份啊。）&lt;br /&gt;要是怕麻烦这里有我已经修改好的。退出QQ覆盖到原目录就可以了。这个文件在QQ2009SP6和QQ2010Beta_Trial中都 可以用。&lt;br /&gt;&lt;br /&gt;三、去除聊天窗口左下角广告&lt;br /&gt;同样操作针对XP和Vista有所不同。&lt;br /&gt;XP：&lt;br /&gt;首先要关闭QQ，然后进入X（系统盘）:＼Documents and Settings＼用户名＼Application Data＼Tencent＼Users＼你的QQ号＼QQ＼，删除其中的Misc.db，接着新建一个文件夹并命名为Misc.db。&lt;br /&gt;Vista/Windows 7&lt;br /&gt;关闭QQ后，进入X:（系统盘）＼users＼用户名＼appdata＼Roaming＼Tencent＼Users＼你的QQ号码＼QQ＼，然后操作同上。&lt;br /&gt;&lt;br /&gt;QQ2010Beta_Trial&amp;nbsp;&amp;nbsp;正在体验阶段。还没有本地会员补丁。用这个方法可以不用看广告。不过右下角的泡泡还是会弹的。有高手再看看怎么能不让它弹泡泡。&lt;/p&gt;&lt;p&gt;&amp;nbsp;下载：&lt;a href="http://files.cnblogs.com/codeyu/Bundle.rar" target="_blank"&gt;Bundle.rdb&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codeyu/aggbug/1756941.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codeyu/archive/2010/06/12/1756941.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2010/06/04/1751316.html</id><title type="text">(转)使用Vernam(维尔南/弗纳姆)算法实现文件加密解密[C#]</title><summary type="text">原文：使用Vernam(维尔南/弗纳姆)算法实现文件加密解密[C#]本文介绍如何通过Gilbert Sandford Vernam的算法实现一个简洁而又稳定的文件加密解密类。通过此类加密的数据是绝对无法在没有密钥的情况下被破解的。它的基本原理是，需要有一个需要加密的明文和一个随机生成的解密钥匙文件。然后使用这两个文件组合起来生成密文：(明文) 组合 (密钥) = 加密后的密文。使用Vernam加密...</summary><published>2010-06-04T04:03:00Z</published><updated>2010-06-04T04:03:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2010/06/04/1751316.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2010/06/04/1751316.html"/><content type="html">&lt;p&gt;原文：&lt;a href="http://www.kaiyuan8.org/Article/itozyhjpUxuLlPaqRqAS.aspx" target="_blank"&gt;使用Vernam(维尔南/弗纳姆)算法实现文件加密解密[C#]&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="Content"&gt;&lt;p&gt;本文介绍如何通过Gilbert Sandford Vernam的算法实现一个简洁而又稳定的文件加密解密类。通过此类加密的数据是绝对无法在没有密钥的情况下被破解的。它的基本原理是，需要有一个需要加密的明文和一个随机生成的解密钥匙文件。然后使用这两个文件组合起来生成密文：(明文) 组合 (密钥) = 加密后的密文。&lt;br /&gt;使用Vernam加密算法，经其处理的密钥可以拥有与待加密文件大小相同的密钥长度，而且输出文件的大小相比待加密文件无任何改变（精确到字节）。换言之，密钥文件越大，加密强度越高！举个例子，如果想加密一个5M的文件，那么密钥长度将高达40,000,000位，输出文件大小则仍为5M。前面的数字意味着即使是梦幻配置的个人电脑，想要在&amp;#8220;有生之年&amp;#8221;靠穷取法破解出密码，也是不可能完成的任务！待加密文件类型不限，密钥文件也可以是任何数据：应用程序、交换文件，或者音乐文件，甚至是您宠物的靓照，等等...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Vernam密码算法:&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1、 现代密码体制的萌芽是Vernam加密方法。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2、Vernam密码是美国电话电报公司的Gilbert Vernam在1917年为电报通信设计的一种非常方便的密码，它在近代计算机和通信系统设计中得到了广泛应用。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3、Vernam密码的明文、密钥和密文均用二元数字序列表示。这是一种使用异或方法进行加密解密的方法。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4、要编制Vernam密码，只需先把明文和密钥表示成二元序列，再把它们按位模2相加，就可得到密文。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5、而解密只需把密文和密钥的二元序列按位模2相加便可得到明文。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6、开始时使用一个定长的密钥序列，这样产生的密文能形成有规律的反复，易被破译；后来采用的密钥与明文同长，且密钥序列只用一次，称为&amp;#8220;一次一密体制&amp;#8221;。&lt;/p&gt;&lt;p&gt;Vernam类：&lt;/p&gt;&lt;ol class="dp-c"&gt;&lt;li class="alt"&gt;&lt;span class="keyword"&gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;System;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="keyword"&gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;System.IO;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Vernam&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Encrypts&amp;nbsp;a&amp;nbsp;file&amp;nbsp;by&amp;nbsp;the&amp;nbsp;Vernam-algorithm&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="originalFile"&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;file&amp;nbsp;to&amp;nbsp;be&amp;nbsp;encrypted.&amp;nbsp;Data&amp;nbsp;is&amp;nbsp;read&amp;nbsp;from&amp;nbsp;this&amp;nbsp;file.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="encryptedFile"&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;encrypted&amp;nbsp;file.&amp;nbsp;The&amp;nbsp;encrypted&amp;nbsp;data&amp;nbsp;gets&amp;nbsp;written&amp;nbsp;to&amp;nbsp;that&amp;nbsp;file.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="keyFile"&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;key&amp;nbsp;file.&amp;nbsp;The&amp;nbsp;one&amp;nbsp;time&amp;nbsp;key&amp;nbsp;gets&amp;nbsp;written&amp;nbsp;to&amp;nbsp;that&amp;nbsp;file.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;EncryptFile(&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span&gt;&amp;nbsp;originalFile,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span&gt;&amp;nbsp;encryptedFile,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span&gt;&amp;nbsp;keyFile)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Read&amp;nbsp;in&amp;nbsp;the&amp;nbsp;bytes&amp;nbsp;from&amp;nbsp;the&amp;nbsp;original&amp;nbsp;file:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;originalBytes;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;(FileStream&amp;nbsp;fs&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;FileStream(originalFile,&amp;nbsp;FileMode.Open))&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;originalBytes&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[fs.Length];&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.Read(originalBytes,&amp;nbsp;0,&amp;nbsp;originalBytes.Length);&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Create&amp;nbsp;the&amp;nbsp;one&amp;nbsp;time&amp;nbsp;key&amp;nbsp;for&amp;nbsp;encryption.&amp;nbsp;This&amp;nbsp;is&amp;nbsp;done&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;by&amp;nbsp;generating&amp;nbsp;random&amp;nbsp;bytes&amp;nbsp;that&amp;nbsp;are&amp;nbsp;of&amp;nbsp;the&amp;nbsp;same&amp;nbsp;lenght&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;as&amp;nbsp;the&amp;nbsp;original&amp;nbsp;bytes:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;keyBytes&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[originalBytes.Length];&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Random&amp;nbsp;random&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Random();&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;random.NextBytes(keyBytes);&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Write&amp;nbsp;the&amp;nbsp;key&amp;nbsp;to&amp;nbsp;the&amp;nbsp;file:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;(FileStream&amp;nbsp;fs&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;FileStream(keyFile,&amp;nbsp;FileMode.Create))&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.Write(keyBytes,&amp;nbsp;0,&amp;nbsp;keyBytes.Length);&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Encrypt&amp;nbsp;the&amp;nbsp;data&amp;nbsp;with&amp;nbsp;the&amp;nbsp;Vernam-algorithm:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;encryptedBytes&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[originalBytes.Length];&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DoVernam(originalBytes,&amp;nbsp;keyBytes,&amp;nbsp;&lt;span class="keyword"&gt;ref&lt;/span&gt;&lt;span&gt;&amp;nbsp;encryptedBytes);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Write&amp;nbsp;the&amp;nbsp;encrypted&amp;nbsp;file:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;(FileStream&amp;nbsp;fs&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;FileStream(encryptedFile,&amp;nbsp;FileMode.Create))&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.Write(encryptedBytes,&amp;nbsp;0,&amp;nbsp;encryptedBytes.Length);&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//---------------------------------------------------------------------&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Decrypts&amp;nbsp;a&amp;nbsp;file&amp;nbsp;by&amp;nbsp;Vernam-algorithm&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="encryptedFile"&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;encrypted&amp;nbsp;file&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="keyFile"&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;key&amp;nbsp;file.&amp;nbsp;The&amp;nbsp;content&amp;nbsp;of&amp;nbsp;this&amp;nbsp;file&amp;nbsp;has&amp;nbsp;to&amp;nbsp;be&amp;nbsp;the&amp;nbsp;same&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;as&amp;nbsp;the&amp;nbsp;content&amp;nbsp;generated&amp;nbsp;while&amp;nbsp;encrypting&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="decryptedFile"&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Name&amp;nbsp;of&amp;nbsp;the&amp;nbsp;decrypted&amp;nbsp;file.&amp;nbsp;The&amp;nbsp;decrypted&amp;nbsp;data&amp;nbsp;gets&amp;nbsp;written&amp;nbsp;to&amp;nbsp;this&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;file&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;DecryptFile(&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span&gt;&amp;nbsp;encryptedFile,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span&gt;&amp;nbsp;keyFile,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span&gt;&amp;nbsp;decryptedFile)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Read&amp;nbsp;in&amp;nbsp;the&amp;nbsp;encrypted&amp;nbsp;bytes:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;encryptedBytes;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;(FileStream&amp;nbsp;fs&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;FileStream(encryptedFile,&amp;nbsp;FileMode.Open))&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;encryptedBytes&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[fs.Length];&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.Read(encryptedBytes,&amp;nbsp;0,&amp;nbsp;encryptedBytes.Length);&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Read&amp;nbsp;in&amp;nbsp;the&amp;nbsp;key:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;keyBytes;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;(FileStream&amp;nbsp;fs&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;FileStream(keyFile,&amp;nbsp;FileMode.Open))&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keyBytes&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[fs.Length];&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.Read(keyBytes,&amp;nbsp;0,&amp;nbsp;keyBytes.Length);&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Decrypt&amp;nbsp;the&amp;nbsp;data&amp;nbsp;with&amp;nbsp;the&amp;nbsp;Vernam-algorithm:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;decryptedBytes&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[encryptedBytes.Length];&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DoVernam(encryptedBytes,&amp;nbsp;keyBytes,&amp;nbsp;&lt;span class="keyword"&gt;ref&lt;/span&gt;&lt;span&gt;&amp;nbsp;decryptedBytes);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Write&amp;nbsp;the&amp;nbsp;decrypted&amp;nbsp;file:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;(FileStream&amp;nbsp;fs&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;FileStream(decryptedFile,&amp;nbsp;FileMode.Create))&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fs.Write(decryptedBytes,&amp;nbsp;0,&amp;nbsp;decryptedBytes.Length);&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//---------------------------------------------------------------------&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;Computes&amp;nbsp;the&amp;nbsp;Vernam-encryption/decryption&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="inBytes"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="keyBytes"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name="outBytes"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;DoVernam(&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;inBytes,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;keyBytes,&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;ref&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;outBytes)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Check&amp;nbsp;arguments:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;((inBytes.Length&amp;nbsp;!=&amp;nbsp;keyBytes.Length)&amp;nbsp;||&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(keyBytes.Length&amp;nbsp;!=&amp;nbsp;outBytes.Length))&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;throw&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;ArgumentException(&lt;/span&gt;&lt;span class="string"&gt;"Byte-array&amp;nbsp;are&amp;nbsp;not&amp;nbsp;of&amp;nbsp;same&amp;nbsp;length"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Encrypt/decrypt&amp;nbsp;by&amp;nbsp;XOR:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;inBytes.Length;&amp;nbsp;i++)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outBytes[i]&amp;nbsp;=&amp;nbsp;(&lt;span class="keyword"&gt;byte&lt;/span&gt;&lt;span&gt;)(inBytes[i]&amp;nbsp;^&amp;nbsp;keyBytes[i]);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;使用范例：&lt;/p&gt;&lt;ol class="dp-c"&gt;&lt;li class="alt"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Program&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;Main(&lt;/span&gt;&lt;span class="keyword"&gt;string&lt;/span&gt;&lt;span&gt;[]&amp;nbsp;args)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vernam&amp;nbsp;vernam&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Vernam();&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Test&amp;nbsp;with&amp;nbsp;an&amp;nbsp;image:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vernam.EncryptFile(&lt;span class="string"&gt;"Image.gif"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Image_encrypted.gif"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Key01.dat"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vernam.DecryptFile(&lt;span class="string"&gt;"Image_encrypted.gif"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Key01.dat"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Image_decrypted.gif"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Test&amp;nbsp;with&amp;nbsp;text&amp;nbsp;file:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vernam.EncryptFile(&lt;span class="string"&gt;"Text.txt"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Text_encrypted.txt"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Key02.dat"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vernam.DecryptFile(&lt;span class="string"&gt;"Text_encrypted.txt"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Key02.dat"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Text_decrypted.txt"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;//&amp;nbsp;Test&amp;nbsp;with&amp;nbsp;pdf&amp;nbsp;file:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vernam.EncryptFile(&lt;span class="string"&gt;"Text.pdf"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Text_encrypted.pdf"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Key03.dat"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vernam.DecryptFile(&lt;span class="string"&gt;"Text_encrypted.pdf"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Key03.dat"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Text_decrypted.pdf"&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li class="alt"&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/codeyu/aggbug/1751316.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/codeyu/archive/2010/06/04/1751316.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2010/05/25/1743474.html</id><title type="text">（转）关于SQL Server 中合并行的方法</title><summary type="text">-------------参考----------------------------假设我们有如下数据表------菜系表--------------店名 菜系--------澳门豆捞 川菜 --澳门豆捞 粤菜 --澳门豆捞 闽菜 --为民大酒店 鲁菜 --为民大酒店 粤菜 --为民大酒店 川菜------------------------------执行如下语句select 店名,菜系=ST...</summary><published>2010-05-25T03:56:00Z</published><updated>2010-05-25T03:56:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2010/05/25/1743474.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2010/05/25/1743474.html"/><content type="text">-------------参考----------------------------假设我们有如下数据表------菜系表--------------店名 菜系--------澳门豆捞 川菜 --澳门豆捞 粤菜 --澳门豆捞 闽菜 --为民大酒店 鲁菜 --为民大酒店 粤菜 --为民大酒店 川菜------------------------------执行如下语句select 店名,菜系=ST...</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2010/04/27/1721896.html</id><title type="text">Web 地理定位（Geo-Location）知识大全</title><summary type="text">在线地图已经是很平常的应用，Google Map 甚至可以用作驾驶导航仪，然而，这些应用的实现涉及到千丝万缕的艰辛工作，仅仅是定位你现在的位置，就有很多技术，有幸的是，如今在你的 Web 站点中，你可以通过短短的几行代码，获得一个用户的地理位置，本文介绍的是用在 Web 中的各种地理定位技术。通过 IP 地址获得用户的地理位置信息互联网不过是一个巨大的网络，上面的每一台电脑对应一个 IP 地址...</summary><published>2010-04-27T04:04:00Z</published><updated>2010-04-27T04:04:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2010/04/27/1721896.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2010/04/27/1721896.html"/><content type="text">在线地图已经是很平常的应用，Google Map 甚至可以用作驾驶导航仪，然而，这些应用的实现涉及到千丝万缕的艰辛工作，仅仅是定位你现在的位置，就有很多技术，有幸的是，如今在你的 Web 站点中，你可以通过短短的几行代码，获得一个用户的地理位置，本文介绍的是用在 Web 中的各种地理定位技术。通过 IP 地址获得用户的地理位置信息互联网不过是一个巨大的网络，上面的每一台电脑对应一个 IP 地址...</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2010/04/27/1721885.html</id><title type="text">Web 设计与开发终极资源大全（下）</title><summary type="text">Web 技术突飞猛进，Web 设计与开发者们可以选择的工具越来越多，Web 开发者的技巧不再只限于 HTML 和 服务器端编程，还需要精通各种第三方资源，这些第三方资源有时候比你的项目更复杂，更专业，你无法自己实现一切，借助一些 Web API，你可以很方便地将大量优秀的第三方资源集成到自己的站点。本文是第二部分。3. APIs以下 API 可以将很多现成的功能集成到你的站点：Alexa Top ...</summary><published>2010-04-27T03:52:00Z</published><updated>2010-04-27T03:52:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2010/04/27/1721885.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2010/04/27/1721885.html"/><content type="text">Web 技术突飞猛进，Web 设计与开发者们可以选择的工具越来越多，Web 开发者的技巧不再只限于 HTML 和 服务器端编程，还需要精通各种第三方资源，这些第三方资源有时候比你的项目更复杂，更专业，你无法自己实现一切，借助一些 Web API，你可以很方便地将大量优秀的第三方资源集成到自己的站点。本文是第二部分。3. APIs以下 API 可以将很多现成的功能集成到你的站点：Alexa Top ...</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2010/04/27/1721883.html</id><title type="text">Web 设计与开发终极资源大全（上）</title><summary type="text">Web 技术突飞猛进，Web 设计与开发者们可以选择的工具越来越多，Web 开发者的技巧不再只限于 HTML 和 服务器端编程，还需要精通各种第三方资源，这些第三方资源有时候比你的项目更复杂，更专业，你无法自己实现一切，借助一些 Web API，你可以很方便地将大量优秀的第三方资源集成到自己的站点。本文全面搜集 Web 开发中可能用到的各种第三方资源。1. 函数与类库A. CAPTCHACAPTC...</summary><published>2010-04-27T03:51:00Z</published><updated>2010-04-27T03:51:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2010/04/27/1721883.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2010/04/27/1721883.html"/><content type="text">Web 技术突飞猛进，Web 设计与开发者们可以选择的工具越来越多，Web 开发者的技巧不再只限于 HTML 和 服务器端编程，还需要精通各种第三方资源，这些第三方资源有时候比你的项目更复杂，更专业，你无法自己实现一切，借助一些 Web API，你可以很方便地将大量优秀的第三方资源集成到自己的站点。本文全面搜集 Web 开发中可能用到的各种第三方资源。1. 函数与类库A. CAPTCHACAPTC...</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2010/03/05/1678869.html</id><title type="text">（转）分析微软.NET各子技术领域之应用前景</title><summary type="text">从2002年发布.NET 1.0，历经8年发展，.NET发展到了4.0，已经成为一个庞大而复杂的软件开发与运行平台，其架构日益复杂，其应用领域也在不断地扩展，包容了“一堆”的子技术领域。在.NET 4.0即将发布之际，回顾一下已发布的各项.NET技术，.net的发展前景，看看.net哪些技术用得很火，哪些被打入冷宫，再猜猜.NET 4.0中可能会有哪些技术会得到&amp;#8220...</summary><published>2010-03-05T02:09:00Z</published><updated>2010-03-05T02:09:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2010/03/05/1678869.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2010/03/05/1678869.html"/><content type="text">从2002年发布.NET 1.0，历经8年发展，.NET发展到了4.0，已经成为一个庞大而复杂的软件开发与运行平台，其架构日益复杂，其应用领域也在不断地扩展，包容了“一堆”的子技术领域。在.NET 4.0即将发布之际，回顾一下已发布的各项.NET技术，.net的发展前景，看看.net哪些技术用得很火，哪些被打入冷宫，再猜猜.NET 4.0中可能会有哪些技术会得到&amp;#8220...</content></entry><entry><id>http://www.cnblogs.com/codeyu/archive/2010/03/03/1677353.html</id><title type="text">(转)Joomla和Drupal的比较</title><summary type="text">这两个CMS是国外CMS软件中最流行的.很多人都在中间作选择,我发文来比较一下.流行程度看来2005年以来joomla就飞速发展远远超过drupal的流行程度了.谷歌趋势查询结果光看这个肯定不够,看看技术比较吧:界面美观Joomla的界面比Drupal更好看，尤其对站长来说，后台的界面也比较舒服。Drupal的一般较难看一些. 也许因为更多的是程序员参与吧,可能美工底子差些?呵呵.后台系统Joom...</summary><published>2010-03-03T09:03:00Z</published><updated>2010-03-03T09:03:00Z</updated><author><name>八一精神</name><uri>http://www.cnblogs.com/codeyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/codeyu/archive/2010/03/03/1677353.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/codeyu/archive/2010/03/03/1677353.html"/><content type="text">这两个CMS是国外CMS软件中最流行的.很多人都在中间作选择,我发文来比较一下.流行程度看来2005年以来joomla就飞速发展远远超过drupal的流行程度了.谷歌趋势查询结果光看这个肯定不够,看看技术比较吧:界面美观Joomla的界面比Drupal更好看，尤其对站长来说，后台的界面也比较舒服。Drupal的一般较难看一些. 也许因为更多的是程序员参与吧,可能美工底子差些?呵呵.后台系统Joom...</content></entry></feed>
