日期:2014-05-19  浏览次数:20945 次

强命名保护的dll,怎么随意一个程序就可以调用.大家千万帮忙.
参考几位大虾的文章,我写了一个ClassLibrary5.dll.首先用SN工具建了一个key.snk,把公钥导出来保存.我用的是VS2005
using   System;
using   System.Security.Permissions;

namespace   ClassLibrary5
{
        public   class   SecuredClass
        {
                public   SecuredClass()
                {

                }
                [StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand,PublicKey= "0024000004800000940000000602000000240000525341310004000001000100732e542fb8dec9abd7561caafc94135a379cad08513143f315fdca109b428866e421694b4c16dee7bd3aff60814dcc7f2779662597261c94f3d587cc5516bc7aceb2c2db251597690e9038466f74dc4eaabc1c842ea43ac9d0fcfbdf42ba63e13fe9309095aab9351f0b7cf1f24d2a1f67ef00fc2c8cad7b5041966f213913b6 ")]
                private   string   getTopSecretInformation()
                {
                        return   "secret   code:000111 ";
                }
        }
}
然后又在项目-项目属性-签名里面用key.snk为程序集签名.延迟签名没选.

这样不就行了么?不是说只有同样经过签名的程序才可以访问么?
我随便建立了一个控制台应用程序.也没签名,直接就是项目-添加引用,找到ClassLibrary.dll,确定.
然后ClassLibrary5.SecuredClass   secClass   =   new     ClassLibrary5.SecuredClass();
                        Console.WriteLine(secClass.getTopSecretInformation());
                       
却能够访问.不是说可以限制别的程序访问我写的DLL组件么?
注:因为是VS2005,所以没法用[assembly:AssemblyKeyFile(@ "c:\key.key ")].
或者要用什么方式才可以限制别人访问我写的DLL呢?
大家帮帮忙.

------解决方案--------------------
在ClassLibrary5的AssemblyInfo需要指定snk文件

具体参考
dll的授权访问
ref:http://www.chenjiliang.com/Article/View.aspx?ArticleID=96&TypeID=5


VS2005,所以没法用[assembly:AssemblyKeyFile(@ "c:\key.key ")].
------------------------------
vs2005需要手动添加AssemblyInfo文件

good luck
------解决方案--------------------
强名程序集只能引用同样签了强名的程序集,这是为了避免所引用的项目没有得到验证而导致本程序集强名的验证毫无疑义。


况且,强名是保护程序集不被别人伪造、不被别人篡改、保证发布者身份的。

要知其然还要知其所以然。

没有什么东西可以保证你的代码不被别人所调用,除非你做什么授权、验证什么的。
------解决方案--------------------
动脑子想想就知道,.NET Framework就是签了强名的……谁都能调用。
------解决方案--------------------
你可以通过CAS检查调用方强名,但是这也不能解决在完全受信任环境下CAS不检查权限。