为DLL签名

在VS2005前的版本可以如下操作:

1.在.NET 命令提示中输入sn -k c:\test.snk 创建一个新的随机密钥
将test.snk复制到项目的.csproj所在目录中
2.修改“AssemblyInfo.cs”文件:

[assembly: AssemblyDelaySign(false)]

[assembly: AssemblyKeyFile("..\\..\\test.snk")]


在项目中的每个类类文件添加代码激活授权功能

namespace ClassLibrary1

{

    public class Class1

    {

        [StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand, PublicKey =

         "00240000048000009400000006020000002400005253413100040000010001009f058a31a3e6a3" +

         ".........................." +

         ".........................." +

         ".........................." +

         ".......")]

        public Class1()

        {

            //

            // TODO: 在此处添加构造函数逻辑

            //

        }

    }

}


3."00240000048000009400000006020000002400005253413100040000010001009f058a31a3e6a3" +
".........................." +
".........................." +
".........................." +
"......."
这串数字就是强名称密钥的公钥了,下面是怎么得到该公钥
输入sn -p c:\test.snk c:\publicKey.snk (从 test.snk 中提取公钥并将其存储在 publicKey.snk 中)
再输入sn -tp c:\publicKey.snk (显示公钥信息)
上面这个命令就能看到PublicKey后面的字符串了,把那字符串copy下来。

在VS2005及以后的版本可以如下操作还要如下操作:

在编译器中输入命令:“输出目录”>csc /keyfile:文件地址\snk文件 /t:library /r:System.EnterpriseServices.dll 编译文件.cs。

备注:

使用私钥进行程序集签名,执行命令:

“输出目录”>csc /t:library /keyfile:文件地址\snk文件 编译文件.cs

“输出目录”>gacutil /i 编译项目.dll

程序集已成功添加到缓存中

“输出目录”>gacutil /u 编译项目.dll

找不到与以下内容匹配的程序集: 编译项目.dll

卸载的程序集数 = 0

失败次数 = 0

“输出目录”>gacutil /u 编译项目

程序集: 编译项目, Version=0.0.0.0, Culture=neutral, PublicKeyToken=........, processorArchitecture=MSIL

已卸载: 编译项目, Version=0.0.0.0, Culture=neutral, PublicKeyToken=........, processorArchitecture=MSIL

卸载的程序集数 = 1

失败次数 = 0

注意显示的公钥标记与卸载程序集时显示的PublickeyToken是一样的。

使用 sgKey.snk 密钥对为程序集签署强名称。

sn -R 编译项目.dll snk文件.snk

===========================================================
/////以上我在2008没测试成功 别的项目照样调用///////////////////////////////////////////
===========================================================
后来找到一篇文章,我想说...方法很蠢但很有效.......没办法 好像2008没有验证签名...或许有只是功能要开...我是没找到.....
文章地址:http://www.cnblogs.com/JieNet/archive/2008/06/15/1222271.html
代码:

namespace ClassLibrary1

{

    public class Class1

    {

        public Class1()

        {

            //

            // TODO: 在此处添加构造函数逻辑

            //

        }

 

        public string Insert()

        {

            if (ValidateUser()) { return "ok"; }

            else { return "faild"; }

        }

        /// <summary>

        /// 验证使用者

        /// </summary>

        /// <returns></returns>

        private static bool ValidateUser()

        {

            if (Assembly.GetEntryAssembly().GetName().FullName.Contains("PublicKeyToken=.........."))

                return true;

            return false;

        } 

    }

}












 

posted @ 2009-11-04 10:59  吥滅傳說  阅读(1392)  评论(0编辑  收藏  举报