All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
为Linux和Windows安装PHP和Oracle_[PHP教程]
在ASP.NET,Atlas中调用Web,Service—处理错误_[Asp.Net教程]
定义标题的最好方法_[Html教程]
.net仿照51job网站地区选择效果_[Asp.Net教程]
深入了解PHP服务器参数$_SERVER的使用_[PHP教程]
asp.net2.0网站基础之创建Web窗体
URL重写可删节日期模式---正则表达式之强力应用_.net资料_编程技术
数据库的一些常用知识_[SQL Server教程]
PHP脚本的8个技巧(4)动态创建图象_php资料_编程技术
迅速帮你解决 SQL Server 日志满问题_[SQL Server教程]
Reading number is top 10 pictures
Get girl by your hand
上传几张色图
A man's favorite things12
Plump breasts1
A man's favorite things14
小学生作文又现神作,你不得不佩服
Hunan road lawenforcement vehicle pursue overload car caused the car turn and man is died
Go to the national museum3
两张抽象画
Female model behind the bitterness, often being overcharged3
Download software ranking
asp.net技术内幕
好色的外科大夫
小黑猫大战两米大花蛇
Sora aoi, the maid, students' uniforms
Sora aoi, the nurse, uniform ,nursing assistant
Twenty piece of palm leaf
C++教程第四版
DreamWeaver8
Tram sex maniac 2 (H) rar bag9
Unix video tutorial20
delv published in(发表于) 2014/1/16 9:30:57 Edit(编辑)
保护你的DLL和Code不被别人使用_[Asp.Net教程]

保护你的DLL和Code不被别人使用_[Asp.Net教程]

保护你的DLL和Code不被别人使用_[Asp.Net教程]

保护你的DLL和Code不被别人使用。
大家做项目开发一般都是分层的,比如UI层,业务层,数据访问层。业务层引用数据访问层的DLL(比如dataAccess.dll),并使用dataAccess.dll中的方法。当项目完成并给客户用了,可有些心里BT的客户这个时候也可以请个稍微懂NET的人来引用你的dataAccess.dll并调用其中的方法搞破坏。比如可以直接使用里面的ChangePwd(string UserName,string Pwd)方法把其他用户的密码改了,这个时候就你就.......


好了,该开始说怎么保护我们的代码了:


首先我们需要把我们的程序集做成强命名的程序集。


这里我们在.NET 命令提示中输入sn -k c:\test.snk 创建一个新的随机密钥对并将其存储在 c:\test.snk 中


然后新建立类库ClassLibrary1,里面只有个类文件Class1.cs,代码如下:
复制C#代码保存代码using System;


namespace ClassLibrary1
{
public class Class1
{
public Class1()
{
}


public string Insert()
{
return "ok";
}
}
}
AssemblyInfo.cs代码:
复制C#代码保存代码//............其他的就用默认
[assembly: AssemblyKeyFile("c:\\test.snk")] // 连接上面用强命名工具SN.exe生成的文件.



接着创建个WindowApplication来调用我们的ClassLibrary1,代码:
复制C#代码保存代码private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show(new ClassLibrary1.Class1().Insert());
}
不修改WindowApplication的AssemblyInfo.cs。
在这里就可以直接运行了,不过大家都看的出来,这样是能成功调用Class1中的方法的。


现在让我们来修改下Class1.cs,代码
复制C#代码保存代码using System;
using System.Security.Permissions;


namespace ClassLibrary1
{
[StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand, PublicKey =
"00240000048000009400000006020000002400005253413100040000010001000551684edd1600" +
"8ccbdd337b1cf1490490d97fe0048c5f3629cc4f5104578499eace9b2a94115022edd620def472" +
"8b4f088291cfa77a40659afba611fdafbb7894b93a64049d439936bd0cd8dc0704625aeb735892" +
"e9eb3f910a49a2925af10515d935654d7adac5567ff6d780d23d587de0ff4d271da7b30680fa88" +
"a47a4ba4")]
public class Class1
{
public Class1()
{
}


public string Insert()
{
return "ok";
}
}
}
然后再编译后运行windowapplication调用class1中的方法就会出错。

这里的StrongNameIdentityPermissionAttribute是NET提供的CAS(Code Access Security)中的1个类,具体可参考MSDN,SecurityAction.LinkDemand 是要求直接调用方已被授予了指定的权限,这里即windowapplication要授予了权限才行,如果使用SecurityAction.Demand要求调用堆栈中的所有高级调用方都已被授予了当前权限对象所指定的权限。他们的区别是:如果windowapplication已授权访问,而还有个windowapplication2(未授权访问)通过调用windowapplication中的button1_Click方法来调用class1,这个时候如果使用SecurityAction.LinkDemand就能成功调用,而使用SecurityAction.Demand windowapplication2就不能调用,windowapplication 在这2种情况下都能调用。


说到这里大家一定再问PublicKey=后面一串那么长的字符串怎么来。PublicKey后面的字符串是你开始生成的c:\test.snk文件中保存的公钥。那怎么才能看到这个公钥了,照样是用SN.EXE。


输入sn -p c:\test.snk c:\publicKey.snk (从 test.snk 中提取公钥并将其存储在 publicKey.snk 中)


再输入sn -tp c:\publicKey.snk (显示公钥信息)
上面这个命令就能看到PublicKey后面的字符串了,还想什么啊,把那字符串copy下来啊。


最后大家一定在关心这个时候windowapplication 要怎么调用class1了,其实也简单,只要把windowapplication 的AssemblyInfo.cs修改为:
复制C#代码保存代码[assembly: AssemblyKeyFile("c:\\test.snk")]



到这里就一切OK了,大家都看到最关键的就是test.snk文件了,所以一定要保护好你自己的test.snk文件。


下面是我的代码,大家可以下载看看,在使用的时候记的要把我KEY文件夹下的test.snk copy到c盘。
不然会出错^_^。

http://www.cnblogs.com/Files/BearsTaR/Solution1.rar

来源:cnblogs







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.