C#毕业设计——基于C#+asp.net+C++的RSA文件加密系统设计与实现(毕业论文+程序源码)——RSA文件加密系统

基于C#+asp.net+C++的RSA文件加密系统设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于C#+asp.net+C++的RSA文件加密系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。

文章目录:

1、项目简介

  1. 本文设计的是一套完整实用的RSA文件加密解决方案,并具体编码实现。本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的文件以及密钥文件都是文本文件。本文首先给出关键类类图、整个应用程序的结构描述文档,然后对关键模块流程图、详细的接口文档进行阐述,并给出关键的实现代码,最后对应用程序进行测试,对测试结果进行分析研究,进而对应用程序进行改进,对关键算法进行尽可能的优化,最终得到一个在windows运行的可以用指定密钥对任意文件进行RSA加密并可解密的完整应用程序,和一些相关的可移植组件。

2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:13898个字37页
包含内容:整套源码+完整毕业论文
资源文件目录简图如下:
请添加图片描述


3、关键词:

RSA;文件加密;Montgomery;费马定理

4、毕设简介

提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。

引言
1.1课题背景
RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也十分流行。算法的名字以发明者的姓氏首字母命名:Ron Rivest, Adi Shamir 和Leonard Adleman。虽然自1978年提出以来,RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击,至今(2006年)未被完全攻破。随着越来越多的商业应用和标准化工作,RSA已经成为最具代表性的公钥加密技术。VISA、MasterCard、IBM、Microsoft等公司协力制定的安全电子交易标准(Secure Electronic Transactions,SET)就采用了标准RSA算法,这使得RSA在我们的生活中几乎无处不在。网上交易加密连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动电话和存储卡的验证功能芯片等,大多数使用RSA技术。

当今公钥加密更广泛应用于互联网身份认证,本课题将公钥加密算法RSA应用于小型文件加密。将任意文件加密成文本的解决方案,使其使用更加灵活。整个工程的分层设计,给引用移植和后续开发带来便利。

1.2 RSA算法介绍与应用现状
RSA算法可以简单叙述如下:
<密钥生成>
取素数p,q,令n=p×q.
取与(p-1)×(q-1)互素的整数e,
由方程d×e=1 (mod (p-1)×(q-1))解出d,
二元组(e,n)作为公开密钥,
二元组(d,n)作为私有密钥.

<加密解密>
b=ae mod n,c=bd mod n.
附录中给出了证明a=c (mod n).

RSA公开密钥加密算法自20世纪70年代提出以来,已经得到了广泛认可和应用。发展至今,电子安全领域的各方面已经形成了较为完备的国际规范。RSA作为最重要的公开密钥算法,在各领域的应用数不胜数。RSA在硬件方面,以技术成熟的IC应用于各种消费类电子产品。

RSA在软件方面的应用,主要集中在Internet上。加密连接、数字签名和数字证书的核心算法广泛使用RSA。日常应用中,有比较著名的工具包Open SSL(SSL,Security Socket Layer,是一个安全传输协议,在Internet上进行数据保护和身份确认。Open SSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。相关详细介绍见http://www.openssl.org/about/ )。Open SSL应用RSA实现签名和密钥交换,已经在各种操作系统得到非常广泛的应用。另外,家喻户晓的IE浏览器,自然也实现了SSL协议,集成了使用RSA技术的加密功能,结合MD5和SHA1,主要用于数字证书和数字签名,对于习惯于使用网上购物和网上银行的用户来说,几乎天天都在使用RSA技术。

1.3 RSA应用于文件加密的分析
1.3.1 文件加密使用RSA的可行性
通过1.2节的论述,不难看出RSA当今的应用多在于数字签名和证书等方面。之所以只应用于这些短小数据的加密解密,是因为RSA算法加密极慢,速度是DES对称密钥加密速度的千分之一左右。正是因为这样,把RSA应用于普通文件加密的想法一直被忽略。通常文件被想象成大数据块,但是实际上在日常应用中,有些极其重要的文本资料是并不太大的,比如因担心遗忘而用普通文本记录的银行帐号和密码、不应被陌生人知道的重要电话号码、几千字节大的重要小图片等。

虽然RSA加密运算的速度十分慢,但是在PC性能越来越好的今天,对于几千字节的数据进行一次几百位密钥的RSA加密,所消耗的时间应该是可以接受的。下面结合大数运算程序的调试,从理论上简单的分析消耗时间。在一台普通配置的PC机上对一个整数进行幂模运算,因为公开密钥的e通常取的较小,所以指数取一个小整数,比如C353,模一个70字节长的整数(140位十六进制,大数单元以线性组方式实现,对应到RSA算法中,这相当于约560bit的n),调试一个函数测试,按初等数论中的知识对程序进行算法优化,最终在一台配置为AMD Athron2800+,外频333MHZ,物理内存512MB的PC上测试需要约45毫秒时间。如果按这种速度,逐字节对1KB的数据进行同样的运算,所消耗的时间理论上为45毫秒的1024倍即约45秒。这个时间并不是非常长。

其实从一个简单的角度来说,既然RSA用于数字签名可行,那就完全可以用于同样大小的普通文件。对于较大的文件,如果分成与数字签名同样大小的段(这里假设数字签名较短,不分段一次计算加密完成),分开的各段逐一进行加密运算,那所需要的时间也只是按文件大小线性的增长。通常数字签名为几十字节,加密运算并不需要很长的等待,这就说明对于几百字节或一两K字节大小的文件来说,如果进行RSA加密,并不会是非常漫长的工作。当然,如果文件更大,加密就显得十分漫长了。比如按前面叙述的45毫秒大数运算程序推理,加密1M字节大小的文件需要约1天的时间。所以,要在普通PC用几百位以上的长密钥RSA加密文件,文件不能过大,一般可以接受的上限是几KB。如果要在较短时间内加密大文件,需要缩短密钥长度以减小运算量,这将带来安全性隐患。

本文的第3章将根据实际调试好的软件,测试给出具体的时间消耗数据。例如,在一台配置为AMD Athron2800+,外频333MHZ,物理内存512MB的PC上测试实现的软件,以560bit的n逐字节加密一个1KB大小的文件需要55秒。通常记录如银行帐号密码等重要数据的文本文件大小不足百字节,加密只需要数秒钟。所以对于小型文件,进行较长密钥的RSA加密是完全可行的。

1.3.2 文件加密使用RSA的意义
如1.3.1节所述,小型文件加密可以使用RSA。比如,因担心遗忘而用普通文本记录的银行帐号和密码、不应被陌生人知道的重要电话号码、几千字节大的重要小图片等。可行的方法未必是必要的,本小节讨论何种文件适合用非对称密钥加密,即RSA加密文件的意义所在。

对于前面叙述的带有重要信息的小型文本和二进制数据的维护,①如果不加密,将无法放心的保存在计算机上,尤其是连网的或机房里的公共计算机。②如果借助功能强大的大型多用户数据保护程序维护几个小型文件,显得十分烦琐,好比杀鸡用牛刀。③如果采用对称密钥加密,即加密解密的密钥相同,只适合部分情况。在某些情况下,使用对称密钥加密文件,交流使用不够方便。比如,张三由于某种原因,需要将自己的某个文件在公共计算机上留给李四,而不希望别人看到内容。如果采用对称密钥加密,张三和李四提前约好一个密码就可以。但是如果张三想要在同一台公共计算机上再留一个秘密文件给王五,而不希望别人看到,就要和王五另外约定一个密码。如果需要在这台公共计算机上留十个文件给不同的人,自己就要记和十个人约定好的密码,这样以来交流起来不够方便,因为对于张三,要自己维护太多的密钥。非对称密钥(公开密钥方式)恰好解决这样的问题。只要大家都在这台计算机或这台计算机可以访问到的地方,留下自己的公开密钥,一切就变的容易解决了。张三要留给李四的文件,就用李四的公开密钥加密,要留给王五的文件,就用王五的公开密钥加密。李四和王五只要把留给自己的文件用自己的私有密钥解密,就可以得到留给自己的文件了。显然,非对称密钥体制更适合多用户交流,而将这种加密方式直接应用于文件加密,使我们在公开场合的交流更加灵活方便。

综上所述,使用前面叙述的方式加密文件有两点重要意义:①应用非对称密钥加密任意文件,使非对称密钥的应用不仅仅局限于互联网络。②非对称加密后的数据变换成文本,使得我们可以通过几乎任何方式安全传递任意文件,比如在只有http的环境使用xml方式。

2 RSA文件加密软件的设计与实现
2.1 需求分析与总体设计
2.1.1 功能分析
经过1.3.2节的论述,我们可以将对软件的要求总结如下:
① 可以按要求的位数生成非对称密钥。
② 可以用指定密钥以RSA算法加密任意一个文件,加密生成的数据为纯文本。
③ 可以装载加密过的文件,并用指定的密钥解密还原出原文件。
④ 提示信息完整、操作舒适、图形界面雅观
按上述描述,给出Use Case和Statechart如图2-1。
在这里插入图片描述

图2-1 本项目的 Use Case和Statechart
根据以上分析,一般来说,需要进行编码的程序有
①RSA密钥生成 ②RSA加密解密 ③任意文件的读取 ④各环节必要的数据编码转换 ⑤图形操作界面。

2.1.2 工程方案选择
综合考虑复用性、可维护性和执行效率,较妥当的方法是分层设计。核心的RSA算法由C++类库实现,针对用户所在的操作系统封装成本地化组件。其他各功能如文件操作、数据编码转换和图形界面等,由托管代码借助虚拟机平台标准库的功能快速开发实现(本文针对选用.Net上的C#论述,选用java由JNI或其他方式调用本地组件,设计模式上是完全类似的)。这种开发方式,核心功能集中在最底层,在不断的封装中针对具体环境对组件功能不断扩充,任意一个层面的封装都可以被直接应用到其他项目,比如在Web使用以前为某窗体程序写的组件、给嵌入式设备交叉编译算法库等。但是每一层都需要依赖底层的所有组件。图2-2形象的说明了分层设计给复用带来的好处。
在这里插入图片描述

图2-2 综合考虑复用性、可维护性和执行效率的分层设计
选用这种设计方案,上层使用C#,底层算法使用C++,可以由一个Visual Studio解决方案管理,给调试带来极大的方便。整个工程分四层,实现RSA加密算法的C++核心类库、封装C++核心类库的DLL组件、引用DLL的.Net类、实现文件操作功能的.Net窗体应用程序。2.2节详细介绍各部分的设计与开发。

考虑到工作量,本软件加解密数据没有严格遵从RSA标准PKCS #1,而是在满足设计要求的前提下,以一种尽可能简单的方式实现加密和解密。

2.2 各部分的设计与开发
2.2.1 实现RSA加密算法的C++核心类库
1 大数存储和四则运算
根据RSA算法的要求,为了实现大数的各种复杂运算,需要首先实现大数存储和基本四则运算的功能。当今开源的大数运算C++类有很多,多用于数学分析、天文计算等,本文选用了一个流行的大数类型,并针对RSA算法和本项目的具体需要对其进行了扩充和改进。下面简单介绍大数存储和四则运算的实现原理。

最先完成的功能是大数的存储,存储功能由flex_unit类提供。和普通的类型一样,每一个大数对应一个flex_unit的实例。类flex_unit中,用一个无符号整数指针unsigned * a指向一块内存空间的首地址,这块内存空间用来存储一个大数,所以可以说,大数是被存储在一个以unsigned为单元的线性组中。在方法void reserve( unsigned x )中通过C++的new来给a开辟空间,当flex_unit的实例中被存入比当前存储的数更大的数时,就会调用reserve来增加存储空间,但是当flex_unit的实例中被存入比当前存储的数更小的数时,存储空间并不会自动紧缩,这是为了在运算的时候提高执行效率。结合指针a,有两个重要的无符号整数来控制存储,unsigned z和unsigned n,z是被分配空间的单元数,随数字变大不断增大,不会自己紧缩,而n是当前存储的大数所占的单元数,组成一个大数的各unsigned单元的存入和读出由set、get方法完成,变量n是只读的。类型unsigned在32位机是32位的,所以对于flex_unit这个大数类来说,每个大数最大可以达到 2**32个字节长,这已经超过了32位机通常的最大内存容量,所以是足够进行RSA所需要的各种运算的。图2-3形象的说明了大数存储类flex_unit对大数的管理。
在这里插入图片描述

图2-3 flex_unit对大数的管理

在flex_unit的存储功能基础上,将其派生,得到vlong_value,在vlong_value中实现四则运算函数,并实现强制转换运算符unsigned,以方便大数类型和普通整数的互相赋值。当大数被强制转换为unsigned时,将取其最低四字节的值。四则运算实现的原理十分简单,都是按最基本的算术原理实现的,四则运算过程的本质就是按一定数制对数字的计算,比如相加,就是低位单元对齐,逐单元相加并进位,减法同理。而乘除法和取余也都是按照竖式运算的原理实现,并进行了必要的优化。虽然实现了四则运算函数,但是若是程序里的运算都要调用函数,显得烦琐而且看起来不美观,所以我们另写一个类vlong,关联(Associate,即使用vlong_value类型的对象或其指针作为成员)vlong_value,在vlong重载运算符。这样,当我们操作vlong大数对象的时候,就可以像使用一个简单类型一样使用各种运算符号了。之所以将vlong_value的指针作为成员而不是直接构造的对象,也是为了提高执行效率,因为大型对象的拷贝要消耗不少机器时间。

2 大数幂模与乘模运算•Montgomery幂模算法
在实现了vlong类型后,大数的存储和四则运算的功能都完成了。考虑到RSA算法需要进行幂模运算,需要准备实现这些运算的方法。所以写一个vlong的友元,完成幂模运算功能。幂模运算是RSA 算法中比重最大的计算,最直接地决定了RSA 算法的性能,针对快速幂模运算这一课题,西方现代数学家提出了很多的解决方案。经查阅相关数学著作,发现通常都是依据乘模的性质 ,先将幂模运算化简为乘模运算。

通常的分解习惯是指数不断的对半分,如果指数是奇数,就先减去一变成偶数,然后再对半分,例如求D= ,E=15,可分解为如下6个乘模运算。

在这里插入图片描述

归纳分析以上方法,对于任意指数E,可采用如图2-4的算法流程计算 。
在这里插入图片描述

图2-4 幂模运算分解为乘模运算的一种流程
按照上述流程,列举两个简单的幂模运算实例来形象的说明这种方法。
① 求 的值
开始 D = 1 P = 2 mod 17 = 2 E = 15
E奇数 D = DP mod n = 2 P = PP mod n = 4 E= (E-1)/2 =7
E奇数 D = DP mod n = 8 P = PP mod n = 16 E= (E-1)/2 =3
E奇数 D = DP mod n = 9 P = PP mod n = 1 E= (E-1)/2 =1
E奇数 D = DP mod n = 9 P = PP mod n = 1 E= (E-1)/2 =0
最终D = 9 即为所求。
② 求 的值
开始 D = 1 P = 2 mod 13 = 2 E = 8
E偶数 D = 1 P = PP mod n = 4 E = E/2 =4
E偶数 D = 1 P = PP mod n = 3 E = E/2 =2
E偶数 D = 1 P = PP mod n = 9 E = E/2 =1
E奇数 D = DP mod n = 9 P = 不需要计算 E = (E-1)/2 =0
最终D = 9 即为所求。

观察上述算法,发现E根据奇偶除以二或减一除以二实际就是二进制的移位操作,所以要知道需要如何乘模变量,并不需要反复对E 进行除以二或减一除以二的操作,只需要验证E 的二进制各位是0 还是1 就可以了。同样是计算 ,下面给出从右到左扫描二进制位进行的幂模算法描述,设中间变量D,P,E的二进制各位下标从左到右为u,u-1,u-2,…,0。
Powmod(C,E,n)
{
D=1;
P=C mod n;
for i=0 to u do
{
if(Ei=1)D=DP(mod n);
   P=P
P(mod n);
   }
   return D;
}

有些文献将上述算法称为平方乘积二进制快速算法,例如参考文献中的《基于RSA算法的一种新的加密核设计》,其实这种算法本质上和图2-4的流程完全一致,只是把根据指数奇偶分开的减一和除以二合并成对指数二进制各位的判断而已。在本软件的代码中采用直接扫描vlong二进制各位的办法。

剩下的问题就是乘模运算了。提高乘模运算的速度是提高模幂运算速度的关键。一般情况下,n是数百位乃至千位以上的二进制整数,用普通的除法求模而进行乘模运算是不能满足速度的要求的。为此,Montgomery在1983年提出了一种模加右移的乘模算法(主要著作发表于1985年),从而避免了通常求模算法中费时的除法步骤。本软件仅仅是应用Montgomery(蒙哥马利)算法,算法的具体推导证明需要颇多数论知识,不在本文的讨论范围内,如需了解可参见蒙哥马利的相关著作。下面简单描述RSA中常用的Montgomery(蒙哥马利)算法供参考理解源程序。
在这里插入图片描述

本软件程序中,RSA核心运算使用的乘模算法就是 M(AB)。虽然M(AB)并不是乘模所需要的真正结果,但只要在幂模算法中进行相应的修改,就可以调用这个乘模算法进行计算了。

将上述乘模算法结合前面叙述的幂模算法,构成标准Montgomery幂模算法,即本软件所使用的流程,叙述如下。
M(m) //蒙哥马利乘模

{
k = ( m * n’ ) mod R;
x = (m + k*n ) / R;
if (x>=n) x -= n;
return x;
}
exp(C,E,n) //蒙哥马利幂模

{
D=R-n;
P=CR mod n;
i=0;
while(true)
{
if(E的当前二进制位Ei==1)D=M(D
P); //从低位到高位检测二进制位
i+=1;
if(i==E的二进制位数)break;
   P=M(PP);
   }
   return D
R-1 (mod n);
}
在具体的实现中,对应monty类的mul和exp方法。全局函数modexp初始化monty对象并调用其exp方法,使用的时候直接调用modexp即可。

3 寻找素数•Eratosthenes筛选与Fermat素数测试
首先要说明的是,事实上,当今的计算机还不足以聪明到立刻计算生成一个很大的随机素数。一般来说,要得到100%准确的大素数,都是通过查已经计算好的素数表的方式。但是素数表的方式给RSA的安全性带来隐患,因为攻击者如果得到了密钥生成时所使用的素数表,攻破RSA加密的难度将会大大降低。本程序起初使用素数表的方式,后来考虑到安全性问题,生成密钥的方式改为随机计算生成。这样,短时间内如果要得到一个100%准确的大素数是很困难的,只能以尽可能高的概率得到一个大素数。

经过2.2.1.1和2.2.1.2小节,所有的大数运算功能都准备完毕,在此基础上,本工程将寻找素数的功能置于类Prime_factory_san之中。外部只要调用本类实例的成员vlong find_prime( vlong & start )就可以以大数start为起点,得到一个数,这个数是素数的概率很大。下面介绍寻找素数的原理。

首先在需要寻找素数的整数范围内对整数进行筛选,把所有确知为合数的整数排除出去。程序中构造了一个数组b[],大小为一轮素数搜索的范围,记搜索范围大小为SS。b[0]到b[SS]分别对应大数start到start+SS。b[]中所有元素先初始化为1,如果对应的大数确定为合数,就将b[]中对应的元素置为0。最后,只需对那些b[]中为1的元素对应的大数进行比较确切的素数测试即可,只要被测试的数是素数概率达到一定门限,就判这个数为素数。这样做既保证了这段程序可以在短时间内执行完,又保证了可以以比较高的准确度得到素数。

函数find_prime先把b[]的所有元素赋值为1,然后按参数start给标记数组b[]的各元素赋0值。下面描述标记数组b[]的赋0值算法。首先,在类Prime_factory_san被构造的时候,构造函数中从2开始搜寻一些小素数,记录在数组pl[]中,共记录NP个。这些小素数用来当作因子,他们的倍数将被从大素数搜索范围内剔除(即把数组b[]的对应元素标记为0),剔除的程序代码如下。
for (i=0;i<np;i++)
{
unsigned p = pl[i];
unsigned r = start % vlong§;
if ® r = p - r;
while ( r < SS )
{
b[r] = 0;
r += p;
}
}

这里利用start对各小素数因子p求模的办法,得到当前p在素数搜索范围内的最小倍数在b[]中的对应位置,将其剔除后,不断后移p个位置,将这个小素数因子p在搜索范围内的所有倍数全部剔除,如图2-5所示。在完成对所有小素数因子的类似操作后,他们的倍数在搜索范围内的位置标记b[r]被全部标记为0。实际上这就是Eratosthenes筛选法。

在这里插入图片描述

图2-5 在素数搜索范围内剔除小素数因子p的倍数

接下来,对可能为素数的数(即标记数组b[]中值为1的元素对应的数)进行素数测试。数论学家利用费马小定理研究出了多种素数测试方法,本程序使用一种最简单的方式,直接应用费马小定理。取一个与p互素的整数A,对于大素数p来说应该满足Ap-1mod p=1,但是我们把p代入一个大整数,满足这个关系的数不一定是素数。这时我们改变A,进行多次测试,如果多次测试都通过,这个数是素数的概率就比较大。按这种原理,我们编写素数测试函数如下。

int is_probable_prime_san( const vlong &p )
{
  const rep = 4; //测试次数
  const unsigned any[rep] = { 2,3,5,7 }; //测试用的底数
  for ( unsigned i=0; i<rep; i+=1 )
if ( modexp( any[i], p-vlong(1), p ) != vlong(1) ) return 0;
 //modexp是幂模函数,按上一小节叙述的算法编码。
//这里modexp计算any[i]p-1mod p。
  return 1;
}

测试通过,程序就判定这个数为找到的素数,将找到的素数返回给上层程序使用。在这里其实有一个不可忽视的问题,就是得到一个测试通过的合数。对于这种情况,RSA算法加密解密是否还可以实现,是一个需要从数学角度论证的问题。因为得到素数的概率很高,经过一整天的生成密钥和加密操作,没有发现失败的密钥, 所以本文暂没有对这个问题进行讨论。

实际得到素数的流程:
(1) 先得到一个随机的大整数N当作寻找的起点.
(2) 确定一个寻找范围的大小SS,把(N,N+SS)范围内的小素数倍数去掉,即前面叙述的古希腊某人发明的筛选法.小素数因子从2开始取,取几百个(论文中将小素数因子个数记为NP).
(3) 对范围内没有去掉的数逐一进行素数测试,一个数如果通过测试次数达到一定标准,就判为素数.
(4) 如果范围内没找到素数,就令N=N+SS,回到(2)继续寻找.
用以上算法,直到以某成功概率得到素数为止

综上所述,总结素数寻找的流程,如图2-6所示。
在这里插入图片描述

图2-6 函数find_prime寻找素数的流程框图
得到了大素数,即RSA算法中的p、q,我们就可以计算出密钥,进行加密等操作了。

4 二元一次不定方程
在RSA 算法中,往往要在已知A、M的情况下,求B的最小值,使得 (AB) mod M = 1。即相当于求解B、N都是未知数的二元一次不定方程 AB-MN=1的最小整数解。
而针对不定方程ax-by=1 的最小整数解,古今中外都进行过详尽的研究,西方有著名的欧几里德算法,即一种辗转相除法,中国有秦九韶的“大衍求一术”。欧几里德算法是一种递归算法,较容易理解。下面举例说明用欧几里德算法求解二元一次不定方程的最小整数解。
给定不定方程11x-49y=1,求最小的x
(1) 11 x - 49 y = 1 49 mod 11 = 5
(2) 11 x - 5 y = 1 11 mod 5 = 1
(3) x - 5 y = 1 5 mod 1 = 0
逆向代入:
令y=0 代入(3)得x=1
令x=1 代入(2)得y=2
令y=2 代入(1)得x=9
x=9;y=2即为所求。
程序中,全局函数vlong modinv( const vlong &a, const vlong &m )用来完成这种算法。对应前面的叙述,参数a对应A,参数m对应M,函数返回值即为B的最小值。

5 RSA算法实现加密与解密
最后,类RSA_san基于前面的准备工作,实现RSA密钥生成和加解密的功能(算法在此不再赘述,RSA算法协议见(http://www.di-mgt.com.au/rsa_alg.html)。为了方便阅读,整个类的源程序中,所使用的变量字母均和RSA算法协议中一致。在类RSA_san的构造函数里,执行准备一对随机密钥的操作。之后可以直接使用类的其他成员进行RSA加解密操作。类中各成员频繁的用到字符串和vlong类型的转换,因为大数是用字符串置入的,而把大数读出,也是保存在字符指针指向的一段内存空间里,所以也是字符串。所以,需要实现一系列的编码转换函数,比如将unsigned指针指向的一段空间里保存的一个大数,表示成十六进制形式的字符串文本。编码转换通常是用C风格的指针操作和sprintf函数来完成。

需要加密和解密的数据也是通过字符串参数置入的。由于字符串的结尾字符“\0”实际上也可能是需要加密的数据,所以置入的串长度并不能以“\0”来决定,程序里引入一个unsigned类型的参数来决定置入的串长度,这样就解决了加密连0数据时候被截断的问题。
因为是对文件加密的软件,需要加密的数据通常并不止几字节,本软件默认的分块大小是1字节,即逐个字节作为参数,调用C++核心模块中的方法。

加密解密流程均为标准RSA算法,具体过程见下图:
①生成密钥:
在这里插入图片描述

图2-7 随机生成密钥
相关代码:

public static int GetRandomString()//实现随机字串的获得
		{
			Random rnd = new Random();
			Byte[]b=new Byte[System.Math.Max(RSAprimeplen1,RSAprimeplen2)];
			s1="";
			s2="";
			for(int i=0;i<RSAprimeplen1;i++)
			{
				Byte tmp=System.Convert.ToByte(254.0*rnd.NextDouble());
				if(tmp!=0)b[i]=tmp;else b[i]=1;			}
			s1=wujunjie_rsa.FromASCIIByteArray(b);
			
			for(int i=0;i<RSAprimeplen2;i++)
			{
				Byte tmp=System.Convert.ToByte(254.0*rnd.NextDouble());
				if(tmp!=0)b[i]=tmp;else b[i]=1;
			}
			s2=wujunjie_rsa.FromASCIIByteArray(b);
			
			return 1;}

②加密过程:
在这里插入图片描述

图2-8 载入待加密的文本

在这里插入图片描述

图2-9 准备加密文本
在这里插入图片描述

图2-10加密后生成的文本

在这里插入图片描述

图2-11加密过程完成
相关代码:

private void menuItem10_Click(object sender, System.EventArgs e)//公钥加密
		{
			if(wujunjie_rsa.charlist.Count==0)
			{
				emptymsg em=new emptymsg(this); 
				em.Show();
				return;
			}

			Stream myStream ;
			SaveFileDialog saveFileDialog1 = new SaveFileDialog();
 
			saveFileDialog1.Filter = "Hex text files (*.hextxt)|*.hextxt|All files (*.*)|*.*"  ;
			saveFileDialog1.FilterIndex = 1 ;
			saveFileDialog1.RestoreDirectory = true ;
 
			if(saveFileDialog1.ShowDialog() == DialogResult.OK)
			{
				if((myStream=saveFileDialog1.OpenFile()) != null)
				{
					textBox1.Text+="\r\n正在对读入的文件进行处理,请稍候:)\r\n";
					System.Threading.Thread.Sleep(500);
					HighResolutionTimer timer = new HighResolutionTimer(); 
					timer.Start();
					using (StreamWriter sw = new StreamWriter(myStream)) 
					{
						sw.WriteLine("# RSA.HexText");
						sw.WriteLine("#___________________________________________");

						Byte []b=new Byte[wujunjie_rsa.RSAstep];
						wujunjie_rsa.result_hexstrings.Clear();
						progressBar1.Minimum=0;
						progressBar1.Maximum=wujunjie_rsa.charlist.Count;
						for(int i=0;i<wujunjie_rsa.charlist.Count;i+=System.Convert.ToInt32(wujunjie_rsa.RSAstep))
						{
							for(int j=0;j<wujunjie_rsa.RSAstep;j++)
							{
								b[j]=System.Convert.ToByte(wujunjie_rsa.charlist[i+j]);
							}
							string s;
							wujunjie_rsa.RSA_san_en(b,wujunjie_rsa.RSAstep);
							s=wujunjie_rsa.get_result_hexstring();
							wujunjie_rsa.result_hexstrings.Add(s);
							progressBar1.Value=i+1;
						}

						for(int i=0;i<wujunjie_rsa.result_hexstrings.Count;i++)
						{
							string hs=System.Convert.ToString(wujunjie_rsa.result_hexstrings[i]);
							if(hs==null||hs=="")sw.WriteLine("0");
							else sw.WriteLine(hs);
						}

						sw.WriteLine("#___________________________________________");
						sw.Write("# ");
						sw.WriteLine(DateTime.Now);

						wujunjie_rsa.result_hexstrings.Clear();

					}
					myStream.Close();
					timer.Stop(); 
					textBox1.Text+="\r\n消耗时间:"+timer.ElapsedTime+"\r\n";

					textBox1.Text+="\r\n处理完成,新生成文件\r\n"+saveFileDialog1.FileName+"\r\n";
					progressBar1.Value=0;
				}
			}
		} 

③解密过程:
在这里插入图片描述

图2-12 载入加密后生成的文本
在这里插入图片描述

图2-13解密已加密的文本
在这里插入图片描述

图2-14 解密生成解密文件

在这里插入图片描述

图2-15 解密过程完成
相关代码:

private void menuItem8_Click(object sender, System.EventArgs e)//私钥解密
		{
			if(wujunjie_rsa.hextxtlist.Count==0)
			{
				emptymsg em=new emptymsg(this); 
				em.Show();
				return;
			}

			Stream myStream ;
			SaveFileDialog saveFileDialog1 = new SaveFileDialog();
 
			saveFileDialog1.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"  ;
			saveFileDialog1.FilterIndex = 2 ;
			saveFileDialog1.RestoreDirectory = true ;
 
			if(saveFileDialog1.ShowDialog() == DialogResult.OK)
			{
				if((myStream=saveFileDialog1.OpenFile()) != null)
				{
					textBox1.Text+="\r\n正在对十六进制文本进行处理,请稍候:)\r\n";
					System.Threading.Thread.Sleep(500);
					HighResolutionTimer timer = new HighResolutionTimer(); 
					timer.Start(); 
					using (BinaryWriter bn = new BinaryWriter(myStream))
					{
						progressBar1.Minimum=0;
						progressBar1.Maximum=wujunjie_rsa.hextxtlist.Count;
						for(int i=0;i<wujunjie_rsa.hextxtlist.Count;i++)
						{
							wujunjie_rsa.RSA_san_dn_hexstring(System.Convert.ToString(wujunjie_rsa.hextxtlist[i]));

							for(uint j=0;j<wujunjie_rsa.RSAstep;j++)
							{
								bn.Write(wujunjie_rsa.get_result_byte(j));
							}
							progressBar1.Value=i+1;
						
						}
					}

					myStream.Close();
					timer.Stop(); 
					textBox1.Text+="\r\n消耗时间:"+timer.ElapsedTime+"\r\n";

					textBox1.Text+="\r\n处理完成,新生成文件\r\n"+saveFileDialog1.FileName+"\r\n";
					progressBar1.Value=0;}
			}	
		}

6 核心类库综述
综上几小节所述,实现RSA加密算法的C++核心类库由六个类组成,类名和对应的功能描述总结如表2-1所示。各个类之间的关系如图2-16所示。

表2-1 RSA加密算法的C++类库中的类
在这里插入图片描述

在这里插入图片描述

图2-16 C++核心功能类图

另外需要说明的是,程序中有几个不属于任何类的全局函数,比如应用辗转相除法求最大公约数的函数gcd、解同余方程的函数modinv等。按常规设计模式来说,不应当出现类之外的函数,但是因为这些函数使用频繁,考虑到机器效率,直接置于全局,不再另行包装。

2.2.2 封装C++核心类库的DLL组件
在Visual Studio当前的解决方案中以VC++创建一个win32dll工程,将测试好的实现RSA加密算法的C++核心类库中的所有文件加入到此工程下,新建一对cpp和h文件,把可能用到的功能全部规划为新文件中的全局函数,并以C接口导出,即__declspec(dllexport)。由于核心类库的对外功能都使由RSA_san类提供的,所以在新cpp文件中全局的声明一个RSA_san类的对象指针(RSA_san WRSA),全局函数int start_RSA_san()初始化WRSA对象,在初始化成功后,其他全局函数通过调用*WRSA对象的公开方法实现各种功能,如加密、读取密钥等。在关闭上层引用程序以前,应执行int finish_RSA_san()来释放WRSA,该函数执行delete WRSA的操作。其他接口函数的使用见DLL接口文档。

另外,DLL组件可以自己在全局函数中实现一些其他功能,作为对核心类库功能的补充。C接口的DLL组件可以被诸如VB、Delphi等开发环境方便的引用。

2.2.3 引用DLL的.Net类与实现文件操作功能的窗体应用程序
在C#编写的.Net类里,使用特性[DllImport(“rsa.dll”)]引用C接口的DLL组件。类中接口DLL的函数都以静态成员的方式对外公开,其他.Net程序可以直接使用。在类库中还提供了任意长度随机串的生成函数,此函数用于生成寻找素数的大数起点。

文件操作使用.Net基础类库中的System.IO中的类实现。一般因为文件操作十分简单,用流输入输出的方式包装完成,程序中将文件操作直接放在菜单项关联的事件处理函数中。

窗体等图形操作界面直接由Visual Studio的所见即所得的方式完成,不需要编码实现。
最终实现的应用程序,结构如图2-17所示。
在这里插入图片描述

图2-17 本软件的Visual Studio解决方案

3 软件整体测试与分析改进
3.1 编写测试各项性能需要的精确计时类
由于.Net基础类库提供的计时功能十分不精确,无法胜任软件性能测试的工作,这里使用Windows API 函数QueryPerformanceCounter和QueryPerformanceFrequency进行精确计时。功能被封装在C#类HighResolutionTimer中,使用时只需构造一个此类的对象,在计时开始的时候调用其Start方法,计时结束时调用其Stop方法,然后访问其ElapsedTime属性,就可以得到一个以秒为单位的float型精确的计时值了。API 函数QueryPerformanceCounter和QueryPerformanceFrequency是靠查询CPU的高精度计时器来计时的,所以可以轻松的精确到毫秒级计时。
附录中给出了这个类的源代码。

3.2 测试数据与分析改进
3.2.1 密钥生成测试
生成密钥运算最费时的工作是寻找素数。如2.2.1.3小节所叙述,寻找素数是一项颇为复杂的工作,其速度可能受以下变量的影响:RSA加密需要的n的位数(寻找素数的整数起点大小start)、大素数测试时底数A的个数(针对一个整数的素数测试次数)、小素数因子p的个数NP、一轮寻找遍历的整数个数SS等。其中最具影响力的因素显然是RSA加密需要的n的位数。以下对各变量分别进行测试,暂且忽略操作系统调度对测试的影响。

1 测试加密使用的n的位数对耗时的影响
即 在固定A、NP、SS等变量的情况下,改变加密位数n,测试密钥生成的时间消耗情况。测试时,A取4个值,分别为2、3、5、7,NP取200,SS取1000。测试PC配置为CPU CR1.7GHZ/外频100MHZ/物理内存512MDDR/MSI6398主板845 Ultra-AD芯片组,下文测试中,未说明PC配置的也都在同一PC完成,不再重复。统计数据如表3-1所示。

在这里插入图片描述

表3-1 RSA加密模数n与密钥生成耗时的关系

观察表3-1上的统计数据,很容易发现随着加密位数的增加,密钥生成需要的时间显著增加。在测试范围内,随着加密位数增大,每一行中的最大最小值差距也呈粗略的增大趋势。也就是说对于长密钥来说,RSA随机生成密钥消耗时间的可能范围较大。这是因为对于大整数来说,可能出现在较长一段区间中没有素数的情况。

在较常用的1024位RSA加密时,用本软件的算法,测试时最长出现了17秒多的计算,虽然这对于用户来说时漫长的等待,但是考虑到安全性,还是舍弃了素数表和密钥库的方案,而使用大素数随机生成,以获得更高的安全性。

表3-1仅能从实验的角度直观理解,具体到一次密钥生成的运算,所需要的时间是很不确定的,比如,一次1280位的密钥生成,需要的时间完全可能比一次896位的密钥生成时间短,由于素数分布规律非常奥妙,加上测试运算需要的时间颇长,这里很难给出对于一个具体位数的密钥生成所需时间的统计模型。

另外需要说明的是,表3-1的加密位数在实际软件设置时并不严格。这是因为,实际作为参数设置的是两个大素数的搜索起点。如果随机生成的起点整数大小比较接近更长一位的整数的话(例如FFFF很接近10000),向后寻找所得到的素数很可能长出一位。而且,两个k位长的整数相乘的结果也未必是2k位,比如100*100=10000,相乘结果是2k-1位。所以,在表3-1实际测试填写时,加密位数可能会有几位的差距,但是这不碍大局。

3.2.2 数据输入输出测试
主要测试文件的输入输出性能。实际上就是测试.Net基础类库中实现文件操作的System.IO中的StreamReader、StreamWriter等类的读写性能。直接在Visual Studio调试一个简单的C#文件读写程序,得到本软件中使用的文件操作方法的执行性能。在配置为CPU CR1.7GHZ/外频100MHZ/物理内存512M DDR/MSI6398主板845 Ultra-AD芯片组/UTA133 2M缓存硬盘的PC上,读入一个100KB的文件仅需要35毫秒,写出一个100KB的文件需要29毫秒。这样的时间消耗,相对于繁复的RSA计算所消耗的时间来说,是完全可以忽略不计的。

3.2.3 加密解密测试
进行对任意文件加密与解密的测试,这里给出几组从不同角度进行测试的数据。
1 用同样的密钥对不同大小的文件公钥加密、私钥解密,各自消耗的时间与待加密文件大小的关系
随机生成两组密钥,一组n长512bit,一组n长1024bit。密钥具体数据见附录(n的实际位数有微小差距)。
分别对一组不同大小的文件进行公钥加密。统计消耗时间情况如表3-2所示。

表3-2待加密文件大小与加密时间的关系(时间单位:秒)
在这里插入图片描述

从表3-2可以看出,使用同一公开密钥加密不同大小的文件,消耗时间随着文件大小的增加而增加,和1.3.1小节分析的完全一致。对于较大的文件,加密位数对时间的影响十分明显。对于250字节的文件来说,1024bit的公钥加密比512bit的耗时多1.5倍左右;1024bit的私钥解密比512bit的耗时多3倍以上。对于一定的加密位数来说,私钥解密所需要的时间比公钥加密需要的时间长。对于一定大小的文件,使用512bit的密钥,私有密钥解密需要的时间是公开密钥加密需要时间的2倍左右;而如果使用1024bit的密钥,私有密钥解密需要的时间是公开密钥加密需要时间的3倍以上。再测试几个1280bit的密钥加解密,发现私有密钥解密所需要的时间相对于公钥加密时间更长。可见,本软件密钥长度越长,私有密钥解密与公开密钥加密的耗时比越大,这和其他软件是一致的。因为根据PCKS #1的RSA的应用建议,e是比较短的,而d和n的长度差不多,这就使得求与d、n有关的幂模运算量比与e、n有关的幂模运算量大很多,而且随着n的增加,两组幂模运算的运算量差距也迅速加大。

3 在更快的PC,对进行文件加密测试
在一些性能更好的PC上,本软件可以获得更好的性能,测试数据同样可以分析得到以上段落叙述的结论。下面对照表3-4,给出一组其他PC上同样的测试得到的数据,测试PC配置为CPU AMD Athron2800+,外频333MHZ,物理内存512MB。数据见表3-3。

表3-3 待加密文件大小与加密时间的关系再次测试(时间单位:秒)
在这里插入图片描述

对于这组数据,经过一系列各种机型、各种Windows操作系统(包括Windows XP/2000SP4/ME/98,均需.Net框架)上的测试,本软件均能正常运行。在2006年初主流配置的PC上运行此软件,逐字节加密1KB大小的文件,消耗时间均在1分钟以内。

结论
经过一系列的RSA密钥生成、文件输入输出和加密解密测试,做简要的性能分析如下。

① 软件消耗时间的运算,大部分集中在C++核心类库,即RSA相关的各种运算。其中,幂模运算和寻找素数对时间的消耗最大,在核心优化时应优先考虑。
② 文件输入输出消耗时间其次,因为磁盘读写速度要远远低于内存读写速度。所以,应该将频繁的读写操作尽量集中到内存,然后一次性写入磁盘。

针对以上两点,软件应进行一系列改进和优化。主要有以下几方面。
① 在要对文件进行加密解密的时候,先将文件按一定的数据结构读入内存,然后进行加密或解密操作。运算数据都读取自内存。
② 在对加密或解密完成的数据进行写出的时候,都是将其直接写到指定好的文件,即直接写入磁盘。这是因为,考虑到中途可能因为意外断电等原因引起操作中断,为了保护已经花费时间运算完成的数据,将其直接写入磁盘。
③ 在关键算法上做进一步优化,例如在寻找素数时,素数测试使用更快速的算法。
④ 对C++核心类库进行重点优化,使其运算效率尽可能提高。其中包括对各类之间的组织细节、各程序模块的具体编写等,进行全面细致的检查和修改,例如将大数据类型以对象指针传递而不拷贝,将简单的for循环展开等。
由于开发时间仓促等因素,在书写本文时,软件并未完成全面细致的优化。

该系统应用于文件加密适合交流管理小型文件,将任意文件以非对称密钥加密成文本可以对其更方便的交流和管理,有广阔的开发前景。本项目应用的设计模式兼顾执行效率和可复用性。应用本程序可以方便的在公众论坛等环境交流要求高度安全的各种数据,包括任意二进制和文本文件。

参考文献
[1] 华罗庚.数论导引[M].北京:科学出版社.1979.6。
[2] 蔡乐才,张仕斌.应用密码学[M].北京:中国电力出版社.2005.2。
[3] 沈世镒,陈鲁生.现代密码学[M].北京:科学出版社.2004.1。
[4] 施向东,董平.基于RSA算法的一种新的加密核设计[J].北京:微计算机信息,2005,12: 39-41。
[5] 吴春明,秦建. RSA在软件实现中的算法研究[J].北京:农业网络信息,2006, 08:41-46。
[6]范益波,曾晓洋.基于16位的Montgomery模乘法器设计[J].北京:通讯学报 2006,27(4):107-113。
[7] 陈发来,李尚志.数学实验——素数[M].北京:高等教育出版社.2004.8。

附 录
省略

致 谢
省略


5、资源下载

本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号毕业设计全套资源(点击下载)
本项目源码基于C#+asp.net+C++的RSA文件加密系统设计与实现(源码+文档)C#_asp.net_C++_RSA文件加密.zip
  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论
技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换一个小Bug Regular Expressions 完整.net后台执行javascript脚本集合 ASP.NET正则表达式 常用匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎 正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类原理及其实现 #实现18位身份证格式验证算法 身份证15To18 算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 理解C#委托[翻译] 利用委托机制处理.NET异常 正则表达式相关几个小工具 你真了解.NETString吗? .NET方法及其调用 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中文编码问题小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象属性和方法——性能和灵活性兼备方法 消除由try/catch语句带来warning 微软应试题完整版附答案 一个时间转换问题,顺便谈谈搜索技巧 .net正则表达式使用高级技巧 C#静态成员和方法学习小结 C#中结构区别 C#中 const 和 readonly 区别 利用自定义属性,定义枚举值详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写Override而不是事件处理Event Handler 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你组件也可以绑定 .NET20 一种简单窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间转换 C#2.0 - Object Pool 简单实现 Attributes in C# 手痒痒,也来个c# 2.0 object pool 泛型技巧系列:用泛型打造可复用抽象工厂 体验.net2.0优雅:Provider、策略、控制反转和依赖注入 泛型最佳实践 asp.net 2.0下嵌套masterpage页可视化编辑 C# 2.0泛型 动态调用对象属性和方法——性能和灵活性兼备方法 泛型技巧系列:用泛型打造可复用抽象工厂 泛型技巧系列:如何提供类型参数之间转换 .NET 2.0 泛型Quiz Visual Studio 2005体验泛型编程 C++ 泛型编程系列讲座之实施 泛型技巧系列:简单类型选择器 C# 泛型简介 我眼中C#2.0新功能特性 泛型技巧系列:避免基类及接口约束 New Article 不该用Generics实现Abstract Factory理由 C#2.0-泛型 C#2.0-extern C#2.0-可空类型 C#2.0-分部类 C#2.0-迭代器 C#2.0 新增功能学习 泛型序列化问题 .NET 2.0 泛型在实际开发中一次小应用 C#2.0 Singleton 实现 .Net Framwork 强类型设计实践 通过反射调用類方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整动态加载/卸载程序解决方案 从NUnit中理解.NET自定义属性应用转载 如何在.NET实现脚本引擎 (CodeDom篇) .NET插件机制简单实现 我对J2EE和.NET一点理解 难分难舍DSO InternalsVisibleToAttribute,友元程序集访问属性 Essential .NET 读书笔记 [第一部分] NET FrameWorkCollections支持 .NET反射在软件设计应用 关于跨程序反射 实现C#和VB.net之间相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中私有变量 关于反射中创建类型实例两种方法 ASP.Net应用程序多进程模型 NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web页面提示保存功能 在ASP.Net中两种利用CSS实现多界面方法 如何在客户端调用服务端代码 页面一postback,它就显示页面最顶端,怎样让它定位在某一位置? 如何保证页面刷新后滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp.net地址转义分析加强版 Web桌面提醒Popup Using the Popup Object Click button only once in asp.net 2.0 Coalesys PanelBar + R.a.d Treeview +Xml 构建Asp.net 菜单和权限管理模块 突破屏蔽限制,自己网站使劲弹新IE窗口 对页面SCROLLINGCSS不能生效原因 .Net 中IE使用WinForm控件使用心得。 动态加载用户控件组件!终结MasterPages技术ASP.NET 1.1下实现模板化站点新思路 在ASP.Net中两种利用CSS实现多界面方法 用于弹出ModalDialog进行数据选择控件 使用.ashx文件处理IHttpHandler实现发送文本及二进制数据方法 制作一个简单多页Tab功能 一完美关于请求目录不存在而需要url重写解决方案! 在C#实现MSN消息框功能 XmlHttp实现无刷新三联动ListBox 鼠标放在一个连接上,会显示图片(类似tooltip) 使用microsoft.web.ui.webcontrolsTabStripIFame组件,达到页切换效果 HttpModule 实现 ASP.Net (*.aspx) 中文简繁体自动转换,不用修改原有任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓MasterPage技术) Tool Tip 示例FILTER版 Tool Tip示例 htc版 一个.net发送HTTP数据实体类 按键跳转以及按Enter以不同参数提交,及其他感应事件 动态控制Page页Head信息 SubmitOncePage:解决刷新页面造成数据重复提交问题 SharpRewriter:javascript + xml技术利用#实现url重定向 采用XHTML和CSS设计可重用可换肤WEB站点 asp.net网址重定向方法比较:面向搜索引擎友好 也谈 ASP.NET 1.1 中 QueryString 安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页自动语言切换 应用系统多语言支持 应用系统多语言支持 自动返回上次请求页面小技巧) ASP.NET 2.0 控件 ASP.NET 2.0 验证控件新功能 DataGridView中如何在textbox列中限制输入。 ASP.NET 2.0构建动态导航Web应用程序TreeView和Menu 体验.net2.0优雅3 -- 为您 SiteMap 添加 控制转发功能 GridView控件使用经验 ASP.NET 2.0:弃用 DataGrid 吧,有新网格控件了! ASP.NET2.0控件一览---标准控件(1) ASP.NET2.0控件一览---标准控件(2) ASP.NET 2.0中使用webpart系列控件 ASP.NET 2.0 中实现跨页提交 新控件、管理外观、布局及其它用户体验 ASP.NET 2.0 缓存技术 原创 asp.net 2.0中theme主题覆盖问题 asp.net 2.0中利用app_offline.htm功能 .NET 2.0中字符串比较 小试ASP.NET 2.0兼容性 为 asp.net 2.0 菜单控件增加 target 属性 ASP.NET 2.0 内部变化 常见 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 优雅1 -- 异步WebService调用 ASP.NET 2.0页面框架几点新功能 ASP.NET 2.0 中收集小功能点 asp.net2.0中webpart使用小记 2.0问题、错误解决办法 ASP.NET 2.0使用Web Part创建应用程序之二共二 体验 .net2.0 优雅2 -- ASP.net 主题和皮肤 NET2.0系列介绍.NET 2.0 中Web 应用程序主题切换 ASP.NET 2.0 中Web 应用程序主题切换 2.0正式版中callback一些变化+使用示例ASP.NET 2.0 Server Side ViewState 在服务器端存贮ViewState (ASP.NET 2.0) VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005aspnetdb.mdf部署 ASP.NET 2.0 Security FAQs Asp.net 2.0功能体验,细节之Web控件 隐藏控件 Asp.net 2.0功能体验,总体设计思想 Asp.net 2.0 WebPart使用经验点滴 革新:.NET 2.0自定义配置文件体系初探 关于如何在ASP.NET 2.0中定制Expression Builders 怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问1 ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建多层应用 在MastPage中引用脚本资源 2.0正式版中callback一些变化+使用示例ASP.NET 2.0 asp.net 2.0 新特性 Visual Web Development 2005开发ASP.NET使用小技巧 ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新网格控件了! 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 内部变化 使用SQL Cache Dependency 代替 Ibatisnet 提供CacheModel ASP.NET 2.0中小心Profile命名冲突 使用ASP.NET 2.0 Profile存储用户信息[翻译] Level 200 [ASP.NET 2.0]PageParser.GetCompiledPageInstance中存在一个Bug 如何在DotNet 2登录组件中检索用户锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET 2.0 只读 TextBox 回发后信息丢失 bug asp.net2.0:扩展ImageButton控件定制自己需要功能 ASP.NET 2.0 正式版中无刷新页面开发(示例代码补充) ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题转换 ASP.NET2.0 ObjectDataSource使用详解1 ASP.NET2.0 ObjectDataSource使用详解2 TextDataSource1 — DataSourceControl内幕 TextDataSource2 — 翠花,上“数据” ASP.NET2.0 ObjectDataSource使用详解3 ASP.NET2.0 快速入门 ----默认中主题外观 数据库开发 ADO.NET 通过DataTable获得表主键 ADO.NET 2.0 操作实例 ADO.NET 2.0 大批量数据操作和多个动态结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用DataSet更新数据库+总结 [ADO.NET]由数据库触发器引发问题 为ASP.NET封装SQL数据库访问类 DataTable.Select方法性能问题 .NET 2.0里使用强类型数据创建多层应用 ADO.NET实用经验无保留曝光 有了System.Data.IDataReader,一切皆成数据 理解DataSet数据缓存机制 存储过程 可按任意字段排序分页存储过程(不用临时表方法,不看全文会后悔) 常用sql存储过程集锦 存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向表结构 将数据库表中数据生成Insert脚本存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前not in版本极大提高) 分页存储过程:排序反转分页法 优化后通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增排序函数及应用 根据基本表结构及其数据生成 INSERT ... SQL 简便MS SQL 数据库 表内容 脚本 生成器 将表数据生成SQL脚本存储过程 直接从SQL语句问题贴子数据建表并生成建表语句存储过程 从SQL中一个表中导出HTML文件表格 获取數据库表前N条记录 几段SQL Server语句和存储过程 生成表中数据脚本 最详细SQL注入相关命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程编码规范及命名规则 Oracle数据库字典介绍 0RACLE字段类型 事务 CMT DEMO容器管理事务演示 事务隔离性一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时几点经验! 自动代码生成器 关于能自定义格式、支持多语言、支持多数据库代码生成器想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory3.0完全攻略--简单示例 XCodeFactory3.0完全攻略--IDBAccesser XCodeFactory2.0完全手册 XCodeFactory2.0完全手册 XCodeFactory3.0Beta1推出 ! SQL Server 2005 SQL Server 2005几个新功能 在SQL Server 2005中解决死锁 在 SQL Server 2005 中查询表结构及索引 sql server 2005中DDL触发器 在 SQL Server 2005 中使用表值函数来实现空间数据库 SQL Server 200530个最重要特点 同时安装sql2000和sql2005经验 类如何界面绑定 在Asp.net中如何用SQLDMO来获取SQL Server中对象信息 使用Relations建立表之间关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和数据实体之间双向绑定,并且在客户端自动验证输入内容是否合法 asp.net报表解决方法 SQLDMO类使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL-DMO实现定制SQL Scripts Create Tables and Build inserts from Tables by using Mygeneration TemplatesSql Server C# 获取数据库中某个某个表创建脚本 DbHelperV2 - Teddy通用数据库访问组件设计和思考 也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中数据字典信息 C#中利用GetOleDbSchemaTable获取数据库内表信息[原创] 如何解决ACCESS中SELECT TOP语句竟然返回多条记录问题? Asp.net 利用OleDbGetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net IBM DB2 开发外接程序 第2章 并发操作一致性问题 (2) Using sqlite with .NET Visual Studio 2005 中新 DataSet 特性 MySQL 和 .Net2.0配合使用 DotNet数据对象结合自定义数据对象设计 (二) 数据集合DataTable DotNet数据对象结合自定义数据对象设计 (一) 数据对象DataRow ASP.NET中大结果集分页[翻译] .net 2.0 访问Oracle --Sql Server差异,注意事项,常见异常 Ado.net NHibernate关系? 动态创建数据库 SQL Server数据库安全规划全攻略 .net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下同时连接SqlServer和Oracle一些体会 XML XPath XPath最通俗教程ZZ XPath中相对路径和绝对路径 XPath 简单语法 Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下XSLT转换技术简介 一个XSLT简单例子 XSLXSLT板主题整理 xsl入门好文章 新手学习XSL好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLTXML转换详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于WebRSS阅读器 ASP.NET RSS Toolkit(RSS工具) Serialize Your Deck with Positron [XML Serialization, XSD, C#] 如何用RSS技术升级您网站 RSS技术在行业中应用三案例 RSS力量 为自己网站添加RSS功能 建立自己RSS asp.netc#+sql生成rss2.0代码 如何获取远程RSS内容? C#如何实现读取RSS VC# 2005 Screen Saver Starter kit里Rss处理类分析 使用XmlHttpJavascript实现对RSS读取 WEB BUILDER中动态页面生成 WebBulider 中RSSWebpar — 建立自己 RSS 阅读器 RSS 2.0规范 C#版简易RSS阅读器新增读取OPML功能 C#版简易RSS阅读器 asp.net 页面中生成 RSS 2.0 提要 用 Ajax 和 RSS 攒个首页新闻 用RSS来整合内容以满足不同需要 简单在线RSS阅读器原创 用户自定义配置接点读取 通用方案 利用XmlDocument更新Xml文件数据 XML特征以及一些用途 如何创建一个XML文件,然后创建一个之关联样式表文件? Rss为什么会兴起?什么时候会被替代? 遍历指定文件夹下所有xml文件并动态生成HTML页面 通过XML来远程抓娶图片代码 .Net1.0和2.0下 soap序列化和binary序列化比较 NET中书写XML一种简单方法 适用于IE浏览器及非IE浏览器xmlhttp脚本 用实例说明如何用JavaScript生成XML XML驱动开发 XamlReader.Load(): Build Up Your Own XamlPad 如何理解xslt中模板调用 Web Service 从WEB SERVICE 上返回大数据量DATASET MSMQ,Enterprise Service, DotNet Remoting,Web Service 优缺点 动态调用web服务 Web服务最佳实践翻译 HTTP协议下用Web Service上传大文件解决方案 大家分享一些Web Service经验 Web Service Security --- Introduction XML Web Service 安全性 SOA 设计原则和 Web 服务中数据传输 解决内网通过代理服务器访问外网部署WebService报错问题“请求因 HTTP 状态 407 失败” 对象状态 Application Session 如何得到Sessionid值 Session研习笔记 Cookie cookie 学习总结 ViewState ASP.NET 小技巧:重写 ViewState 存储目地,以提高页面性能 由重写ViewState存储目而想到 [总结]关于在线用户列表统计! Persistent Strategy (1) - 问题定义实现 Persistent Strategy (2) - Xml序列化应用 利用HttpModuler实现WEB程序同一时间只让一个用户实例登陆 控件 DataGrid 简单实用DATAGRID组件 为DataGrid创建自定义列控件 为DataGrid创建自定义列控件 为DataGrid创建自定义列控件ASP.NET环境下完整datagrid填充数据后界面动态显示填充方案 在dataGrid中拖动改变列宽度,在asp.net中 用javascript实现dataGrid表头排序 存储过程DataGrid分页及注意点 在后代码里创建DataGrid控件 为DataGrid自定义分页添加自定义导航和分页信息 如何利用DataGrid纵向显示数据? 如何用DataGrid实现类似DataList多列效果 竖表转横表(支持多列) 竖表变横表(支持固定列) 通用分页控件(DataGrid,DataList,Repeater都可以用它来分页) 如何同时选择DataGrid多行 DataGrid单元格移动变色,点击变色,双击取消颜色,排序. 分页管理器实现 oButton加入DataGrid模板列引起问题。 将RadioButton加入到DataGrid模板列后单选简单实现c#实现将DataGrid中数据导为microsoft office excel 2003 TreeView ASP.NET环境下完整treeview使用类 C#加javaScripts实现选中树节点后显示节点内容(微软TreeView) treeview 使用心得 FlyTreeView for ASP.NET 3.2 破解攻略 用Ajax技术让IE Web Control Tree View实现大数据量读取 我在使用C#中Treeview解析XML遇到问题! TreeView父子联动效果保持节点状态一致 Asp.Net 2.0 TreeViewCheckbox级联操作 DataList Html控件 table动态改变颜色包括一个边框 功能超强表格(上下左右移动,添加删除行列,导出) 用户控件开发 ASP.NET 服务器控件授权 为控件添加自定义属性和事件 让你控件属性注释支持多语言 自定义UserControl属性为什么不能在设计时显示在属性窗口中 asp .net 服务器控件开发心得 今天你写控件了吗 --Asp.net服务器控件开发系列文章 汇总 将ASP.NET用户控件转化为自定义控件 TextBox 创建具有自验证功能textbox控件 textbox上实现右键菜单 给FreeTextBox 3.0.5 添加上QQ和MSN表情 FreeTextBox中存在一个严重安全漏洞 DOTNET2.0 编辑器:WebHtmlEditor 1.5 Release提供在线演示和下载 FreeTextBox使用详解 (版本3.1.1) 弹出式选择文本控件 ASP.NET: Custom AutoCompleteTextBox WebControl [With Source Code] Button 水晶报表 水晶报表数据填充一种推模式,两种拉模式类库 RDLC报表 RDLC报表 其他控件 让asp.net默认上传组件支持进度条反映 HtmlTextWriter学习笔记 用户控件例码 ASP.net前台日历控件源代码(不刷新页面) ASP.net下DataGrid单项选择控件 个ASP.NetDataGrid分页控件,在Oracle数据库下,每次只取当前页数据,不使用存储过程 自动获取当前日期下一周年月日代码 asp.net日历控件源代码 写了一个live.comGadget——农历日历 令你心动Asp.net 开发中MessageBox控件 WebFormMessageBox类 复合控件开发系列之一 年月日三联动下拉框 下拉日期控件 客户端计时器控件clientTimerc#源码 在线考试系统中卷面计时一点思考 GridView GridView 控件使用不完全指南! GridView 控件使用不完全指南!续一 ASP.NET2.0中Gridview中数据操作技巧 一套可嵌入或独立使用翻页控件: WebPager(附源码) Web进度条简单方案 ComponentArt WebUI3.0控件使用方法 在ASP.NET页面中使用SolpartMenu控件 共享两个做项目最常用功能操作封装类 国内报表设计分析 基于Ajax日期控件 缓存服务性能优化 通过系统配置来提高ASP.NET应用程序稳定性 通过系统配置来提高ASP.NET应用程序稳定性(续) 异步加载图片,提高HTML性能 负载均衡环境下缓存处理 网站速度优化模块HttpCompressionModule [连载]Tuning .NET Performance [连载]Tuning .NET Performance [连载]Tuning .NET Performance 连载]Tuning .NET Performance 安全验证 加密解密 使用证书来做RSA非对称式加密 自已做一个加密软件,超好用而且加密强度极高,公布源码 身份权限审核 使用URL参数+Controls层实现网站用户权限管理 系统分析中大家是怎样设计系统多级权限控制?? 多级权限设置请教。 基于角色权限控制 AspNetForums中基于角色权限控制 asp.net页面如何控制页面依据不同用户权限有不可见、可见、编辑 三种操作权限? 请问在SmartClient应用中,如何做到科学身份验证和权限分配?~~UP有分 做过权限管理和想做权限管理人进来附我思路 关于权限设计探讨 Asp.net基于Forms验证角色验证授权 用户权限系统设计方案 权限控制系统设计 统一用户及权限管理系统 权限系统:分散实现、关注变化 关于权限管理系统构思 EsbAOP应用--权限管理 asp.net实现身份认证EMAIL发送方法(c#版本) 单点登录(SSO)核心--kerberos身份认证协议技术参考 单点登录(SSO)核心--kerberos身份认证协议技术参考 单点登录(SSO)核心--kerberos身份认证协议技术参考 权限系统概要收集,整理 membership,想说爱你不容易 蛙蛙推荐:web下授权简单解决方案 将权限引入系统探索 数据库有效验证 浅谈在ASP.NET中数据有效性校验方法 XML Schema Validator Class JSClientValidator-客户端javascript验证新模式 如果做到安全系统之验证用户输入. 部署安全 查看贴子内容 CLI里面秘密……强命名、元数据以及文件结构上半部分 Assembly学习心得 asp.net 保护网站不受用户上传文件侵害 在设置窗体身份验证时设置个别页面不需要进行验证 基于Web应用程序安全问题之一Cross-Site Scripting Vulnerabilities 代码安全 基于强名称签名代码访问保护及其改进 防止对 Visual Basic .NETC# 代码进行反相工程 如何防止 DLL 被反编译 揭开.NET程序保护秘密 如何建立有效.Net软件注册保护机制 由浅至深,谈谈.NET混淆原理 由浅至深,谈谈.NET混淆原理 最简单混淆 由浅至深 谈谈.NET混淆原理-- 流程混淆 由浅至深 谈谈.NET混淆原理 (四) -- 反混淆原理 + 工具篇 由浅至深,谈谈.NET混淆原理 -- 五MaxtoCode原理,六其它保护方法 看了下面那篇“Crack别人应用程序文章有感,简述.Net应用程序授权。 vs2003中设计强名称程序集并制作安装入GACMSI 无法破解软件注册码算法 保护你代码——谁动了我组件? ASP.NET单点登录 Cookie 支持二级域名和FormsAuthentication 加强版 论电子签章(Electronic Signature)在C#实现方法 使用IHttpHandler防止非法链接 使用 Ildasm, ILasm, Peverify 来 Crack 别人写应用程序ASP.NET2.0应用中定制安全凭证之实践篇 创建安全ASP.NET虚拟主机 实现关于跨二级域名和1.1和2.0版.net Forms身份验证体制问题和解决办法. Kerberos简介 在ASP.NET中防止注入攻击[翻译] 封装了一个极其易用加密解密类,支持DES、三重DES、Rijndael、RC2、MD5、以及非对称加密算法RSA 学习一下 .net framework 中有关安全内容 学习一下 .net framework 中有关安全内容 环境配置部属 使用ASP.NET跟踪服务 无ASPX文件部署aspx文件部署 aspx->cs->dll 如何把用http访问网页转换用https访问 一个配置IIS问题 在Apache环境下成功运行ASP.NET 关于通用配置管理模块思考-续用XmlDocument 还是DataSet.net中使用强类型来读取配置信息 Asp.net网站ClickOnce自动部署1-自动部署内容 Asp.net网站ClickOnce自动部署2-虚拟目录配置 Asp.net网站ClickOnce自动部署3-虚拟目录配置 web.config文件自定义配置节使用方法 模仿AppSettings进行web.config自定义节读取[简单实用型] 关于无aspx文件部署,我一些探索心得 .NET配置文件解析过程详解(二) Asynchronous Pluggable Protocols Microsoft CRM3.0 多服务器安装部署过程 解决w3wp.exe内存占用问题 实战1.1下Web.Config配置标记configSections 系统设计项目管理 系统设计 分层开发思想小笼包 N层企业级架构模板 系统设计一些原则 在UI层使用Domain逻辑一些探讨 在C#程序实现插件架构 组件设计实战--组件之间关系 Event、依赖倒置、Bridge 逻辑设计例子 一个.net系统AOP设计思路一——NHibernate和界面/对象映射层 设计和编写可复用代码 基于工作流程系统日志生成业务流程模型 SVG + Javascript + ASP.NET + WebService开发楼宇管理系统(一) 系统分析员,让我头痛 .NET域对象持久模式 业务流程管理综述 动态工作流设计 提升软件用户体验 应用软件合理性 架构Architecture和框架Framework杂谈 小议模型 再议模型 软件设计评价 软件设计评价 理解架构师 架构师不是建筑师 MDA(模型驱动架构) 家庭财务总管--软件设计 应用系统架构设计-补全篇 对Web平台和软件架构一些看法 关于多层设计想到问题-涉及Nhibernate和Log4Net 谁拥有接口? Codd提出RDBMS12项准则 一个糟糕设计 业务系统里面常见方法接口设计 将UI和UI控制分离 DotNet软件开发框架 细节决定成败:业务拦截器 广告管理系统UML分析设计 软件架构设计 框架不是框框—应用框架基本思想 创建成功工程 软件可行性分析 GIS系统一个好软件架构,Why not and how? 直观而简单解决方案--软件设计永恒追求 企业开发基础设施--序 企业开发基础设施--类厂服务 企业开发基础设施--事件通知服务 面向对象 基于Visual C#接口基础教程 基于C#接口基础教程之一 基于C#接口基础教程之二 基于C#接口基础教程之三 基于C#接口基础教程之四 基于C#接口基础教程之五 基于C#接口基础教程之六 基于C#接口基础教程之七 小结 一个代理例子 关于委托事件一两个很好例子! 依赖倒置 细说继承关系映射 面向对象面向组件小议 C#中接口多重继承注意事项 [ASP.NET入门随想四]吸星大法——页面OO思想篇 如何在类中编写事件 OOD经验原则总结 [ASP.NET入门随想六]大航海家——OO思想类间关系 接口跟基类一点点感受 [ASP.NET入门随想七]主角配角——OO思想多态、接口委托 Win32中安全子类化 (1) Emit生成Property C#中类和接口设计思想 数据库设计 数据库设计指南 使用Rose2003进行数据库建模并导入SQLServer2000图解详细过程 UML 聚合 概念 UML视图 静态视图 构件图 包图 初学uml-(1) 类图和关系 UML学习-通过用例分析来确认需求 国际化组件设计 Web应用UML建模.NET框架开发 基于UML短信计费系统分析设计 基于UML系统分析方法研究 UML三大“硬伤” 系统约定:用UML描述工作流管理 使用Rose2003进行数据库建模并导入SQLServer2000图解详细过程 文档 项目开发总结报告 方案设计系统规格/需求规格说明/概要设计书范例 “一卡通”信息系统数据库设计初步探讨(原创) 某M1射频卡餐饮收费系统简单数据模型 广告发布统计实现可行性分析阶段报告 应用软件部2005年年度工作总结 CPMS企业绩效考核管理系统 V1.1 介绍 设计模式 吕震宇设计模式随笔系列 C#设计模式1 C#设计模式2 C#设计模式3 C#设计模式4-Simple Factory C#设计模式5-Factory Method Pattern C#设计模式6-Abstract Factory Pattern C#设计模式7-Singleton Pattern C#设计模式8-Builder Pattern C#设计模式9-Prototype Pattern C#设计模式10-Adapter Pattern C#设计模式11-Composite Pattern C#设计模式12-Decorator Pattern C#设计模式13-Proxy Pattern 设计模式14-Flyweight Pattern 设计模式15-Facade Pattern 设计模式16-Bridge Pattern 设计模式17-Chain of Responsibility Pattern 设计模式18-Command Pattern 设计模式19-Observer Pattern 设计模式20-Visitor Pattern 设计模式21-Template Method Pattern 设计模式22-Strategy Pattern 设计模式随笔-蜡笔毛笔故事 设计模式随笔-从“有病”说起工厂模式前传 设计模式随笔-发大米喽 设计模式随笔-锦囊妙计 设计模式随笔-让众口不再难调 设计模式随笔-用奶箱订报纸 设计模式随笔-再论锦囊妙计 也说说“从Adapter模式到Decorator模式” 梦幻.Net设计模式 Dot Net设计模式—桥接模式 如何在实际工作中发现模式 设计模式能够解决问题 设计模式不能做什么 Dot NET设计模式—抽象工厂 Dot NET设计模式—反射工厂 Dot Net 设计模式—简单工厂 Dot Net设计模式—工厂方法模式 Dot Net设计模式—生成器模式 Dot Net设计模式—原型模式 如何掌握并在实践中自如运用设计模式 Dot Net设计模式—单件模式 Dot Net设计模式—适配器模式 Dot Net设计模式—外观模式 Dot Net设计模式—适配器、桥接外观三模式之间关系 .NET反射、委托技术设计模式 创建型模式之间比较 用实例解说Dot Net设计模式——装饰模式 New Folder 设计模式原型模式Prototype)- 面馆里菜单 程序时间管理---做一个高效程序设计模式-工厂模式手工作坊到工业化转变 c#实现 设计模式-简单工厂模式SimpleFactory-C#) 设计模式学习笔记 Terrylee 探索设计模式:工厂方法模式Factory Method 探索设计模式1:开篇 探索设计模式2:深入浅出单件模式Sigleton Pattern 探索设计模式3:抽象工厂模式新解Abstract Factory 探索设计模式4:建造者模式过程图解Builder Pattern 探索设计模式:原型模式Prototype Pattern 探索设计模式:创建型模式专题总结Creational Pattern 探索设计模式:桥接模式Bridge Pattern 探索设计模式:适配器模式Adapter Pattern 探索设计模式11:组合模式Composite Pattern .NET设计模式13:享元模式Flyweight Pattern Head First Design Patterns(深入浅出设计模式 Head First Design Patterns(深入浅出设计模式)-目录 Head First Design Patterns(深入浅出设计模式)-设计模式介绍 你真了解IocAOP吗? Spring.Net 示例代码分析 乱改:Visitor经典模式改进1 乱评:《c#设计模式》中“访问者模式” 软件架构设计模式之模式种类 Ioc模式(又称DI:Dependency Injection) 隐藏在.NETIoC? 一步一步开发Spring Framework MVC应用程序 CSharp面向对象设计模式纵横谈--Singleton Pattern 听课笔记 CSharp面向对象设计模式纵横谈--面向对象设计模式原则 听课笔记 最少职责OOD设计手段 OOD设计手段总结 面向对象设计六大原则简介 由浅入深学“工厂模式”(1) 由浅入深学“工厂模式”(2) A Taste of AOP from Solving Problems with OOP and Design Patterns (Part I) A Taste of AOP from Solving Problems with OOP and Design Patterns (Part II) A Taste of AOP from Solving Problems with OOP and Design Patterns (Part III) 大虾对话: 领悟设计模式 Design&Pattern团队《设计模式在软件开发应用》精华版 由浅入深学“工厂模式”(3) 简话设计模式 观察者模式 (using .net) C#中事件观察者模式 Role分析模式 角色对象基本概念 Role分析模式角色对象创建和管理 在开发中体验设计模式 重新诠释AOP 侃中介者模式Mediator 采用AOP 观点来 Log 所有方法调用 MS IOC容器ObjectBuilder? .Net event vs. observer Pattern DProxy介绍 – 一种高性能轻量级AOP开发组件(.NET 1.1) JavaScript中Decorator模式 魔法牌里模式(Bridge) 决策者得选择(Strategy) 通讯兵(Chain of Responsibility) 面向智能体编程(Agent Oriented Programmig, AOP)一些体会 Bridge? 一个GIS二次开发中常用设计模式 Switch语句,僵化毒药 策略模式应用实践 重读GoF Factory Method来实现数据库操作类 用Factory Method模式扩展MyMSDNTVLibrary 工厂模式和容器模式探索 反编译 Component重要类,全文解释 - 容器篇 单系统多类型数据源随意切换c#实现C#实现MVCModel View Control模式介绍 小议.NET对象拷贝 设计模式原则详解 封装变化 AOP.Net实现 使用纯.net实现AOP(加入了比较详细代码说明) 隐身大法,使民无知 设计模式浅析之Singleton 设计模式Top10排行榜 简话设计模式 在我们使用NET FRAMEWORK类库中发现设计模式3 在我们使用NET FRAMEWORK类库中发现设计模式2 New Article 模版模式 Template Pattern — 穷人和富人不同婚恋历程 发掘模式---今天您发掘拉mei? 老师讲抽象工厂,错了一点点 Singleton + Proxy 模式+AOP Observer模式为何要区分推拉模式 也来谈谈工厂模式 项目管理 需求分析控制 项目经理 七个关于有效沟通哲理故事 新主管如何生存? 怎样从一名程序员过度到项目经理 论《金瓶梅》项目管理中人际关系协调 做项目经理一些思考 怎样从一名程序员过度到项目经理 什么是项目经理 团队建设 软件项目中人员管理和团队建设 建立“杀手”开发团队 软件开发组团队精神 如何指导软件开发新手 改变一个状况不佳项目组 论软件开发中三种重要角色 如何调动员工积极性 成功项目团队中应树立五种意识 管理观点系列:团队管理 现在有多同事工作较懒散,没有一点工作效率,开发出来东西,Bug又多。如果让你来管理你会怎么做? 人才用 用人之道 高效团队速成之道 管理人员如何有效应用表扬批评进行反馈 [项目管理]管理中人 [团队管理]+[软件人生]从项目计划到保密管理到个人学习提高方法 建立团队精神 你实现团队管理了吗? 需求管理 怎么做需求分析 撰写优秀需求 需求分析20条法则 从用户接触到完成需求说明书 需求调研步骤和方法 一种界面需求分析方法 细谈软件需求分析过程:提取、抽象、升华 网站项目管理-如何做好需求分析 如何写系统分析书 客户需求何时休? 软件需求管理-用例方法,读书摘要 [理解需求变更之一]说说需求变更必然 RUP简介 软件开发过程中最重要是人?还是领导者? 开贴讨论:我观察国内几乎所有公司都有这样或者那样管理问题,开贴讨论:小团队web项目负责人工作办法 技术不是全部,归纳和演绎能力也很重要 谈恋爱IT项目管理 广为流传一个关于项目管理通俗讲解 诸子百家项目管理 之 序 诸子百家项目管理 之 总述 问答 诸子百家项目管理 之 周易篇项目管理两个基本点 诸子百家项目管理 之 孙子兵法篇项目管理整体思维 实战解析----项目目和范围 项目管理过程中棘轮效应 任务管理 项目整体管理 项目风险管理 项目采购管理 项目沟通管理 项目人力资源管理 项目成本管理 项目质量管理 项目时间管理 项目范围管理 编码人员和美工配合问题 心得体会:关于开发效率和项目周期问题 紧急项目处理方法 做项目一些体会(之一)_软件开发过程中我们应当具有能力 团队技能之一——分析问题 价值高于一切-企业软件开发谈 项目管理之我见原创 项目开发管理经验交流 软件实例开发手记自序-为保证文章完整性,谢绝对某篇而非全部手记转载 紧急项目处理方法 浅谈项目管理中职责权 - [原创] 由一个虚构例子谈谈中小型研发型项目技术管理及成本控制(全文) 优化IT企业基础架构 一个研发经理项目日记 .net敏捷开发及常用工具 关于项目管理和项目计划制定对话 微软资深经理人项目管理经验 WEB项目开发 MyMsn动态Resize页框架布局详解 性能,安全,集成才是web之道 重构之美-走在Web标准化设计路上[深入结构:理解h系列不合理。] 重构之美-走在Web标准化设计路上[振臂一呼:Css, Stop! ] 重构之美-走在Web标准化设计路上[复杂表单]3 2 Update 重构之美-走在Web标准化设计路上[唠叨先] 重构之美-迎接Web标准化设计来临[总结一:网页设计回归?] 重构之美-走在Web标准化设计路上[对HTML/XHTML/XML/XSL一些认识] 雅虎网站项目工作流程 微软资深经理人网站项目管理经验 其它 软件工程 一个测试重构 RUP 核心概念 配置管理概念 RUP && MSF 特点 构建面向对象应用软件系统框架 构建面向对象应用软件系统框架 目录 构建面向对象应用软件系统框架 第1章 构建面向对象应用软件系统框架 第2章 第3章 数据和对象 第4章 O/R Mapping一般做法 第5章 设计一个O/R Mapping框架 第6章 面向方面编程 第7章 接口 第8章 事务处理 第9章 性能优化 第10章 界面层功能划分 第11章 界面设计模式 第12章 动态代码生成和编译技术 第13章 远程过程访问客户端整合 第14章 智能客户端 第15章 简述 Effective Coding - Readability 单元测试时一些最佳实践 Best free tools/frameworks/libraries I use 统一界面设计 十二种实践方法XP心得 使用CVS做.NET项目 在asp.net页面上得到Castle容器实例 当前软件开发反思 面向对象设计,ORM,NHIBERNATE杂谈(有感) 投标方案应该怎么写? CMM/CMMI将带我们走向何方——一个CMM从业人员反思 对一个排序程序不断重构 FxCop 设计规则 敏捷实践12 条原则 《敏捷软件开发》读书笔记 1 《敏捷软件开发》读书笔记 2 -- 设计原则 《重构》 读书笔记 1 企业应用之领域模型 我.net项目经验。 也谈 SOA 重新诠释SOA 登山程序员(极限敏捷之一) 敏捷设计师(极限敏捷之二) 实战解析--项目主要技术储备 产品升级策略 读《DTS分析模型、设计模型》有感 软件开发核心工作流程 新产品研发 分析设计过程.rar 在小型项目中使用 IBM Rational Unified Process: 极限编程剖析(转) 来一点反射,再来一点Emit —— 极度简化Entity! 软件整合--硬件整合--平台整合 用自定义KeyValueCollection类代替Dictionary/Hastable,改善简化后Entity性能 Java剑 VS .NET刀 -- 东山再起(论模式)(二)【推荐】 基于构件技术需求管理过程-框架需求调研 PSP课程(一): PSP简介 我对系统重构理解 重构---Who are you?! 单元测试应该测什么,不应该测什么? AccEAP架构介绍1---实体设计单元测试认识之路 中小型MIS开发之我见(一)---开发阶段 中小型MIS开发之我见(二)---具体实施(上) 中小型MIS开发之我见(二)---具体实施(下) 团队开发框架Developement Structure for Team,内容列表及整理计划 风继续吹----对一些ORM框架使用心得(2) 冷眼程序人生----对一些ORM框架使用心得 读书笔记]-道法自然之需求分析 个人对软件开发思考 网络应用 一个Udp信息收发静态类! [修改]脚本判断网站是否能打开 IIS防止文件下载完全手册(非更改文件名法.NET中利用XMLHTTP下载文件 开发 .NET FTP 客户端组件 如何不让没有登录用户下载问题 文件下载时如何隐藏实际地址? ASP.NET文件上传 .net 中发mail到hotmail中乱码问题解决 郁闷OpenPOPMIME Parser Asp.net(c#)实现多线程断点续传 关于 OpenSmtp 邮件标题过长后出现乱码问题解决 支付宝Payto接口c#.net实现 文件操作 发布一个Asp.Net文件夹复制类 关于File一些例子 文件操作工具类 FileUtility 大文件上传之异常处理原创 文件 在线压缩 技术 ASP.NET在线压缩在线解压缩 c#文件操作ASP.NET中跟踪和恢复大文件下载 Response.BinaryWrite()下载时文件问题. Windows Workflow Foundation之旅——指南1创建顺序工作流 DotNet 序列化学习笔记 一个上传系统控制 WMI类--所有可用WMI类封装 用ActiveX控件和JavaScript脚本实现基于Web票据套打(源码下载) 运用API函数获取系统信息 通过ASP.NET页面重启服务器 开源:VS.NET打印思想2003/5DataGrid、DataGridView及二维数据如ListView等终极打印实现全部源码 关于如何打印ListView解决方法 修改IIS目录Asp.Net版本 如何获取客户IE统计信息[代码] 图像多媒体 js图形报表 一个可设置背景图片验证码图片生成方法 图片翻页幻灯效果 图片渐变轮换效果 讨论一下flash.ocx(8.0版本).net结合编程 动态生成缩略图 SharpMap介绍及源码分析 利用Javascript 结合 VML 生成三维报表饼图 技巧总结 代码阅读总结(个人总结开发小技巧) DotNet精美书籍大检阅 asp.net页面代码组织模式 金鼎俱乐部项目总结 总结一下散乱开发点滴(3) (高手勿入) 说都是概念——有关编程范式 组织一些开源项目 VS.NET操作技巧 Visual SourceSafe VSS信息读取操作 安装程序 安装程序自动安装数据库 程序安装时检查是否已经安装.NETFramework 打包时候,怎么象petshop一样,把数据库也打到里边 制作安装程序总结 用Visual Studio .Net 2003制作安装程序时轻松实现将自己程序添加到系统鼠标右键菜单 .net打包自动安装数据库 用自删除dll实现应用程序安装/卸载代码 .NET打包自动安装数据库 调试常见问题 IE安装了flash插件还不能显示swf动画问题 让人哭笑不得“Unable to load one or more of the types in the assembly”问题解决! 关于异常处理一点感受 项目调试时候,出现其中用到一个组件“访问被拒绝”解决方法。 对于引用控件被拒绝访问解决办法补充(续) 对于引用控件被拒绝访问解决办法补充(续++)++ 对于引用控件被拒绝访问解决办法补充(续++) 使用Visual Studio.net调试javascript最方便方法 在Apache上调试Asp.net 1.1/2.0代码 VS.NET 2005 vs.net 2005 中自定义模版项 自己动手打造Visual Studio 2005 Team Suite 正式汉化版 用Visual Studio 2005创建宏代码生成器 Visual Studio 2005 Team Foundation Server Beta3 安装手记 Visual Studio 2005 Team SystemBUG? 对vs2005生成dll文件一点疑惑 开发VS2005下ComboBoxTreeView(下拉列表框弹出树) ToolStripComboBoxTreeView(下拉列表框工具条弹出树) Visual Studio 2005中编译调试新功能 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 源代码 在VS.NET2005中使用java代码段以及SOL文件格式解析 ClubWEBSite starter kit二次开发及Vs2005中ObjectDataSource控件应用小记 Visual Studio 2005 RTM奇怪问题 Team Foundation Server Beta3 安装指南 VS2005中通过code snippet定制类模板 C#2.0 Singleton 实现 Dataset+TableAdapter _.net最终数据访问类出现? 我心血显然被藐视了 目前发现 asp.net数据绑定几个BUG不定期连载 使用GDI+在VS2005下开发基于DataGridView财务显示单元格控件 目前发现VS2005 asp.net 数据绑定bug (二) -关于ObjectDatasource 和TableAdapter Use Whidbey Beta2 to target .NET Runtime 1.1 Targetting 1.1 .NET Framework with MSBuild 安装TFS vs.net 2005中web.config智能感知丢失时 VS2005中用Code Snippets提高开发效率 VS2005运行速度优化心得 vs2005 WebSite 开发方式替代Visual Studio Web Application Projects VS2005如何进行单元测试. 善用免费Code Snippet Libraries加快你开发速度 Code Snippet Libraries压缩下载包 Visual Studio 2005 Web Application项目RC发布 Visual Studio 2005 Web Application Projects 项目Cool地方 VS2005将支持两种WEB编程模型比较 VS.NET 工具 CodeSmith 我用CodeSmith生成业务对象 CodeSmith基础 CodeSmith基础 CodeSmith基础 CodeSmith基础 CodeSmith基础 CodeSmith基础 CodeSmith基础 CodeSmith基础 CodeSmith应用 CodeSmith应用 CodeSmith应用 CodeSmith应用实现选择路径对话框 CodeSmith-Terrylee CodeSmith实用技巧:使用StringCollection 数据库字段属性配置工具界面[用于代码生成] Sharpdevelop2.0预览版放出来了 对nunit很失望 Resharper快捷键 ReSharper 利用Together For VS.NET检查所编写代码是否够规范 如何用CodeSmith减少代码重复编写 NET Refletion初步了解 VS2005 Add-in:CSS Properties Window 每个开发人员现在应该下载十种必备工具 体验ReSharper V1.0 for VS.Net 2003 - Part I 用DNS、IIS实现Web项目团队协作开发! 创建自定义Visual Studio项模板 Microsoft Windows Workflow Foundation 入门:开发人员演练 将asp.net1.1应用程序升级到asp.net2.0一点心得 自动填写版权信息 .Net1.x转换为.Net 2.0要注意几个问题 服务器同时存在1.1和2.0程序注意事项 使用@Page指令Src 属性 简化对老版本 asp.net程序维护 常见 Web 项目转换问题及解决方案 将 Web 项目从 Visual Studio .Net 2002/2003 转换到 Visual Studio 2005 分步指南 常见 ASP.NET 2.0 转换问题和解决方案 你.net 2.0 真1.1 安全正确地运行在同一台电脑上吗? 小心Server Application Unavailable 错误 安装vsts:如何卸载SQL Server 2005 其他新技术 反射 初识.net反射技术 .NET反射、委托技术设计模式 .net反射技术应用—如何调用JavaCOM接口 灵活正确实现.NET插件机制 C#中使用反射性能分析 论.NET反射、委托技术设计模式关系 Ajax 用Ajax技术让IE Web Control Tree View实现大数据量读取 AJAX设计模式 之 怎样构建一个可刷新无刷新应用 AJAX设计模式实践 之 可刷新Ajax应用范例+Framework 在ASP.NET实现AJAX Ajax.NetonLoading及aspx页面默认名字空间及ajaxprogoogle组怎么没有一个chinese? CuteEditor5.0安装及它Ajax.net配合无刷新操作数据库! 使用简单Ajax Framework -MagicAjax.NET 剖析MagicAjax 利用AJAX技术开发应用程序实战 基于Ajax五子棋演示 AJAX页面XMLHTTP对象生成及下一步技术研究 到了该讨论XMLHTTP在Ajax中作用时候... Ajax,纠正错误,又向前一小步 Ajax, 想得更实际一些 Ajax, 使用PostBack响应模型和Web控件资源, 让服务器返回更少数据 几句话介绍MagicAjax 使用MagicAjax 实现无刷新Webparts AJAX编写用户注册实例及技术小结 Web 2.0中AJAX技术应用详解 一个要钱ajax框架zumipage 网站推广之痛-使用AJAX和.NET网站朋友注意了 让MagicAjax支持中文! 阿特拉斯神 AJAX急速狂飙:开发www.99scj.com体验(1) ASP.NET 调味品:AJAX 一套使用简单Ajax服务器控件-Anthem.NET Introduction to Anthem.NET 三种Ajax框架使用比较 Ajax基本原理讲解 【AjaxPro实现机制浅析二】*.ashx文件是怎么来? 利用Ajax数据岛实现无刷新绑定 应用Ajax.netAsp.net实现aspx文件应用 Atlas 用Atlas来实现一个基于AJAX无刷新Chatroom Atlas Table Layout Template 学习Atlas是发现几个小问题 Atlas笔记1:介绍和调用WebService方法 Atlas是什么? Atlas 实现机制浅析 [1] Atlas 实现机制浅析 [3] 使用ASP.NET Atlas编写显示真实进度ProgressBar进度条控件 Atlas应用程序调试技巧 在Atlas服务器端实现中推荐使用Web Service而不是Page Method Atlas揭秘 —— 绑定BindingASP.NET Atlas中创建自定义Transformer 在ASP.NET Atlas中创建自定义Validator 使用ASP.NET Atlas ItemView控件显示集合中单个数据 使用ASP.NET Atlas ListView控件显示列表数据 调试Atlas客户端JavaScript脚本 在ASP.NET Atlas中创建自定义Behavior 使用ASP.NET Atlas SortBehavior实现客户端排序 在Atlas中实现检测postback progress状态方法 使用ASP.NET Atlas XSLTView控件用XSLT修饰并显示XML数据 Remoting 一步一步学Remoting之一:从简单开始 初识用.NET Remoting来开发分布式应用 使用.NET Remoting开发分布式应用——配置文件基于消息.Net Remoting分布式处理架构 使用.NET Remoting开发分布式应用——基于租约生存期 Remoting多个信道(Chennel)注册问题 Remoting中线程网络通信内幕初探 Remoting Event 远程事件 Remoting Discussion(二) Remoting Discussion(三) 移动开发 在PPC上用时间做唯一编号遇到问题及其解决方法 正确处理 SqlCeException 方法 通过ActiveSync使你Windows Mobile Emulator连接到Internet Pocket PC 2003编程环境 Windows Mobile开发环境搭建指南 短信任务源程序分享[.NET CF C#] 循序渐进:使用 Visual Studio 2005 为基于 Windows Mobile 设备生成 .NET Compact Framework 应用程序 是不是.net compact frameworkBug呢? 窗体切换中小技巧 Web 2.0 WEB2.0商业模式才刚开始 用Blog和Wiki搭建IT团队知识库 论web2.0定义及web2.0盈利实现方式 MagicAjax-NoStore,Session,Cache模式区别 Wiki介绍 wiki、Blog项目知识管理 wiki来龙去脉企业应用 2006年 Web 2.0 将面临10个问题 web 2.0 精彩语录 创新媒介:Web 2.0三大营销变革 2005年Web 2.0领域涌现11大高质量软件 学习冲电 <> Go back什么是Web 2.0? Web 2.0时代,你属于哪一份子? 全面精通Web 2.0,做互联网潮头人 项目Wiki选择和配置 2005年 Web2.0 带动11大软件 最近asp.net技术demo 通用异常处理框架 在C#中调用WINCE连接PC程序 GPS定位信息接收 PDA/GPS检测报告 CnForums和已有系统整合方案 Community Server技术分析——CS是如何将三个项目整合到一起 Microsoft.mshtml到底是什么? BICRM深入行业应用 纯粹B/S方式实现InfoPath设计和运行时--Web Builder WebBuilder 界面一览 大话 .NET/MONO 跨平台应用 移植 ASP.net 项目到 Mono 问题报告 激动一天 MONO - .NET跨平台之亲身经历 使用Updater Application Block实现自动更新例子 Component/Service Oriented Software System Development Thinking Smart Client Case Study Source Code Download from MSDN China 初探YAML 在将WEBPART打包成*.CAB包和*.MSI安装包后,竟然无法将其安装到指定WSS网站 Microsoft Windows Workflow Foundation 入门:开发人员演练 如何让ClickOnce进行手动更新(含代码) WEB BUILDER中动态页面生成 flashasp.net通信(LoadVars类) EsbAOP应用--异常关闭器 EnterpriseServerBaseAOP--EsbAOP实现 [WPF]WPF中如何实现数据表示分离。 —— XAML 翻译:微软是如何输掉API之战 微软是如何输掉API之战 Log4Net五步走 Agile Framework功能介绍1:自动事件连接 基于构件技术软件工程 - Small Team Practice小型团队项目实践标准 RIA全程追踪-引子 Boo简介及无关一些牢骚 企业应用之领域模型 企业应用之数据持久化方案 通过Spring.net来使用XCodeFactory生成数据层! 关于SNS规则引擎一点想法 Biztalk2004 Decoder二次开发----春田花花幼稚园信息化项目 虚拟社会,做尽天下业务集思广义,以求大同 ORM新实现——Dali 使用Microsoft Systems Management Server 2.0 进行补丁管理 CNN评出25个典型下一代互联网公司 SQL Server Report Services RS数据库移植到另外一台服务器,报“rsReportServerNotActivated”错误 .NET和JAVA跨平台,我们很期望.但是容易吗 LoadRunner 架构概览 关于Flex、Jrun、ColdFusion、IIS、ASP.Net结合使用误区!只说Flex1.5版本 Windows Communication Foundation入门(Part One) office 操作 ADO.NET(OleDb)读取Excel表格时一个BUG Office with .Net 系列之 ――― 在自己程序中宿主Office Office with .Net ――― 使用.Net访问Office编程接口 Office with .Net之外传―――“彻底干净”关闭Office程序 我写Asp.net操作Excel一个类库ExcelHelper源码下载 C#操作Excel,套用模板并对数据进行分页 关于ASP.NET中调用Excel组件不能结束进程解决方法 用完Excel组件后 如何彻底关闭Excel进程 一个Excel exporter组件 web 下实现文档可浏览但不可保存 Excel开发:简化工作表中选定区域操作 开源代码系列之Office文档读写(Excel/Word) 将Exce嵌入你.Net程序 实例经典源码 .NET Pet Shop 4 .NET Pet Shop 4: Migrating an ASP.NET 1.1 Application to 2.0 NET Pet Shop 4 .NET Pet Shop 4 关于练习项目一些背景 基于.NET 2.0Petshop4正式推出了 PetShop系统架构设计 Petshop 4 学习 Agile Framework 介绍Agile Framework Agile Framework架构图 利用db4o做中间层数据缓存 关于数据层设计取舍思考 基于SOA思想架构设计 框架设计之Castle&CompositeUI容器融合 架构设计之Smart Client 架构设计之离线处理 DotNetNuke DNN 数据访问策略 【译】 快速正确制作DNN模块数据库安装脚本 DotNetNuke开始支持ASP.NET2.0 DotNetNuke从入门到进阶(1)怎样写自己模块 DotNetNuke 代码文档 翻译DNN-Documentation-readme.txt DotNetNuke:如何创建自己模块(FlashPlayer Module) [DNN模块开发]让模块支持“导入”“导出”功能 [DNN模块开发]DNN模块层次划分 [DNN模块开发]模块文件结构及命名方法 [DNN模块开发]如何写模块数据库安装脚本 建立单独解决方案来开发DNN模块 [DNN模块开发]快速制作DNN模块安装包 [DNN模块开发]快速正确制作DNN模块数据库安装脚本 [DNN扩展]将Lion.Web.WebHtmlEditor作为DNN富文本编辑器初步实现 [DNN扩展]LionHtmlEditorProvider(v1.0.1) [DNN扩展]LionHtmlEditorProvider(v1.0.2) 最后更新:2005-7-25 [DNN模块开发]如何写dnn文件 [DNN模块开发]分类链接模块终于大功告成了 [DNN扩展]LionHtmlEditorProvider(v1.0.3) [DNN模块开发]分类链接模块V1.1 [DNN模块开发]增强型DNN在线调查模块 [DNN学习所得]如何防止页面中敏感信息被提取 如何修改DotNetNuke(DNN)中服务条款和隐私说明 利用反射工厂模式支持多数据库访问 DNN中搜索引擎原理——如何获取SearchItem DNN中搜索引擎原理——数据库分析篇 [DNN通用控件]TextEditor [DNN学习所得]SolpartMenu一个相当不错下拉菜单控件 [DNN功能]列表管理添加中国省份选择下拉框 [DNN学习所得]CBO——简化从数据库读取数据并实例化对象有效方法 刚开始学习DNN一点小经验 全新安装dnn3.1.0 DNN安装模板DotNetNuke.install [DNN学习所得]让IE也能实现解压缩功能提供演示源码下载 DNN核心用户控件——实现页面灵活布局第一步 DNN数据访问方式——合理运用模式,提高数据访问灵活性有修正 刚开始学习DNN一点小经验 [DNN学习所得]HttpModule到底是个什么东西 DotNetNuke3研究报告一安装 初识DotNetNukeDNN 关于DotNetNuke(DNN)语言问题 DotNetNuke3研究报告二数据访问 [DNN学习所得]HttpModule到底是个什么东西 DNN文件夹说明 [DNN通用控件]DualListControl介绍 DNN3.2.2安装说明 [DNN 3.2.2] DNN开发中一些细节2 DNN开发中一些细节1 Flash+xml 在 Dnn系统开发中应用 DNN开发中一些细节3 开源项目 开源CMS Alfresco 1.0 发布 ArgoUML -- 开源UML 建模工具 应用IBatisNet+Castle进行项目开发 再论IBatisNet + Castle进行项目开发 NHibernate VS IbatisNet IBatisNet 之 自动生成主关键字 细节决定成败:一个公共类库 BugTracker.NET 汉化手札 ORM开题篇-Gentle.NET之牛刀小试 使用NHIBERNATE写DAL层流程和牢骚 Mono 开发 (使用.NET技术你,绝对不能忽略Mono) .NET开源项目链接 MonoRail - 前期准备 MonoRail - 简介 经典案例介绍 广州市工商局商标管理软件 Duwamish 学习Duwamish7MSDN说明及相关技术策略 Duwamish7学习笔记 Duwamish7学习笔记 Duwamish7学习笔记 Duwamish7学习笔记 Duwamish7学习笔记 Duwamish7学习笔记 Duwamish7学习笔记 NHibernate 使用NHibernateContrib中Nullables NHibernate文档翻译进度&问题收集(持续更新) NHibernate文档翻译 第3章 持久化类(Persistent Classes) NHibernate文档翻译 第5章 集合类(Collections)映射 NHibernate文档翻译 第6章 关联映射 NHibernate文档翻译 第7章 示例: Parent/Child NHibernate 1.0.1 发布了 NHibernate文档翻译完成 NHibernate文档翻译 第8章 NHibernate缓存NHibernate.Caches NHibernate文档翻译 第9章 使用AttributesNHibernate.Mapping.Attributes NHibernate文档翻译 第10章 NHibernate.Tool.hbm2net DDLNHibernate文档 1.快速起步 NHibernate中DateTime,int,bool空值处理方法 使用NHibernate进行数据持久层开发最佳实践 基于NHibernate三层结构应用程序开发初步 NHibernate.Helper Project NHibernate学习手记(1) - 对象简单CRUD操作 NHibernate学习手记(6) - 实现one2many/many2one映射 NHibernate快速指南 NHibernate之1——为什么不用DataSet? NHibernate文档翻译 第1章 体系结构 NHibernate文档翻译 第2章 ISessionFactory配置 NHibernate文档翻译 第4章 O/R Mapping基础 由为什么要学习NHibernate说开去 NHibernate 使用手迹1st NHibernate 使用手迹2nd NHibernate使用手迹(3rd) 发布:偶写NHibernate代码生成器 面向对象设计,ORM,NHIBERNATE杂谈(有感) Snake.Net Snake.Net 框架中ORM(一) Version 0.2 Beta Snake.Net 框架中ORM(二) Version 0.2 Beta Snake.Net 框架中ORM(三) Version 0.2 Beta Snake.Net网络通讯模块 序 Snake.Net网络通讯模块 - SMTP(一) Snake.Net网络通讯模块 - POP3(二) Snake.Net网络通讯模块 - IMAP4(三) Snake.Net网络通讯模块 - FTP(四) Snake.Net 框架中ORM(四) Version 0.2 Beta Snake.Net 框架中ORM(五) Version 0.2 Beta QPG平台 编写容易被维护代码(1) QPG--基本用法介绍 技术篇(1)--QPG容器基本用法 技术篇(2)--QPG容器高级用法 技术篇(3)--QPG界面分解方法介绍 技术篇(4)--基于QPG容器服务扩展 技术篇(5)--QPG数据处理方法 技术篇(6)--大话AOP 实践篇(1)--QPG之“打狗棍法” 思想篇(3)—IT运用模式轮回 思想篇(2)--归纳和演绎能力也很重要 思想篇(1)--企业需要什么样人才? 思想篇(完)----跟往事干杯 思想篇(4)---- 实战解析(完)----总结 Enterprise Library Enterprise Library2.01:Data Access Application Block学习 Enterprise Library2.02:Logging Application Block学习 Enterprise Library2.0中加密数据库连接字符串 Enterprise Library——企业库配置管理应用程序块 Enterprise Library——企业库缓存应用程序块 Enterprise Library Step By Step系列:配置应用程序块——入门篇 Enterprise Library Step By Step系列:配置应用程序块——进阶篇 Enterprise Library Step By Step系列:数据访问程序块——入门篇 Enterprise Library Step By Step系列:数据访问程序块——进阶篇 Enterprise Library Step By Step系列:安全应用程序块——入门篇 Enterprise Library Step By Step系列:安全应用程序块——进阶篇 Enterprise Library Step By Step系列:日志和监测应用程序块——入门篇 terprise Library Step By Step系列:日志和监测应用程序块——进阶篇 Enterprise Library Step By Step系列:缓冲应用程序块——入门篇 Enterprise Library Step By Step系列:缓冲应用程序块——进阶篇 Enterprise Library Step By Step系列十一:异常处理应用程序块——入门篇 Enterprise Library Step By Step系列十二:异常处理应用程序块——进阶篇 Enterprise Library Step By Step系列十三加密应用程序块——入门篇 Enterprise Library Step By Step系列十四:创建基于消息队列MSMQ异步日志 Enterprise Library Step By Step系列十五:配置应用程序块——设计篇 Enterprise Library Step By Step系列十六:使用AppSetting Application Block Composite UI Application Block 学习笔记之Commands Composite UI Application Block学习笔记之Event Broker 使用Updater Application Block实现自动更新例子 使用企业程序两点体会 Composite UI Application Block学习笔记之Smart Part 关于在服务器端使用Microsoft Exception Management Application Block Logging application block of Enterprise Library 2.0 TimeStamp of the Logging Application Block in EntLib 2.0 对 Updater Application Block v2表面行为分析及问题 (一) HTTP Downloader for Updater Application Block 2 ObjectBuilder内功心法之中国特色 一个从网页中提取天气预报信息程序(附源码) Ilungasoft Framework: 使用视图处理继承关系、Tree结构实体关系映射示例[源码] DataQuicker2快速入门-----存储过程篇 一个ASP.NET2.0小项目-BLOG Ilungasoft Framework中处理有关联关系实体 Community Server2.0专注细节一 邮件提醒按钮实现(上) DataQuickerORM缓存机制 数据框架DataQuicker2第一个版本开源下载. SVG + Javascript + ASP.NET + WebService开发楼宇管理系统 - 杂记3(完) 新数据框架DataQuicker2 Walk through Message----春田花花幼稚园信息化项目(II) SVG + Javascript + ASP.NET + WebSe

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

毕业设计方案专家

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值