我还是不太明白,强名称产生的不是一个.snk文件吗?发布的时候不是要把.snk一起发布给客户吗?怎么又来了一个公和私呢?大家帮忙呀!真的不太懂呀!

解决方案 »

  1.   

    可以向程序集分配称为强名称的加密签名,它为程序集提供名称的唯一性并防止他人借用您的程序集名称(名称欺骗)。如果您正在部署一个将被同一台计算机上的多个应用程序共享的程序集,则该程序集必须有强名称。即使只在您的应用程序中使用该程序集,使用强名称也可确保加载该程序集的正确版本。生成具有强名称的程序集的第一步是获得加密密钥对。.NET 框架 SDK 包括一个可用来生成密钥对的“强名称”工具 (Sn.exe)。由“强名称”工具生成的密钥对可以保留在文件中,您也可以将它存储在本地计算机的“加密服务提供程序”(CSP) 中。
      

  2.   

    redbb(....Dotneter....) 我还是没有太明白!能说详细一点吗?
      

  3.   

    签名包括一个公钥和一个私钥,snk仅仅在编译的时候起作用,他将assembly header用私钥加密,出了header中的保留区域,这个区域存放的是公钥。用户导入这个assembly前mscoree.dll首先会用公钥解密,然后比较保存在manifest中的hash值。snk文件组织内部编译用的,不给客户。
      

  4.   

    别人要使用你的DLL是在获得你发布的程序中使用,发布的程序里面包含了密钥
    文件也就是.snk文件,这样的话如果要使用你发布的程序的DLL,还不是一样可以使用,因为你的.snk文件要一起发布出来给别人用呀!
    ------------------------------------------------------
    晕,用这种共有/私有密钥加密的强命名程序集只是具有防篡改特性。别人当然可以用了,不能用开发出来干吗?当强命名程序集加载到GAC时,系统会利用.snk中的公有密钥来反签名那些加密的文件,并和嵌入在PE文件中RSA签名(不可仿造,因为经过私有密钥加密,私有密钥不能泄露)比较.如果不等,则程序集被别人篡改,不允许安装到GAC.如果要将程序集与开发者绑定,还必须采取另外的技术.