先利用SN.exe这个工具生成一个密匙文件aspnetpager.snk,这个文件的英文原文叫string name key file,然后用加密的算法根据aspnetpager.snk生成一个aspnetpagerPublic.snk.最后在根据 aspnetpagerPublic.snk提取一个public key token ,public key token是一个16位的数字和字母混合的数:大致流程如下:    aspnetpager.snk --根据一定的算法--> aspnetpagerPublic.snk---->public key token 
所以我们只要aspnetpager.snk和public key token就可以了,aspnetpagerPublic.snk就没什么用了.因为aspnetpagerPublic.snk的贡献做完了.实际操作如下: 
1.打开SDK Command Prompt或者VS2005中的Visual Studio 2005 Command Prompt.而不是windows的cmd 
2.输入sn -k aspnetpager.snk,得到的文件在命令提示符的当前文件夹下
3.输入sn -p aspnetpager.snk aspnetpagerPublic.snk (从aspnetpager.snk中提取公匙存入aspnetpagerPublic.snk文件)
4.输入sn -t aspnetpagerPublic.snk 得到public key token打开VS2005,找到项目,然后右击"项目名"找到"属性","属性"里面有个"Signing"(签名)的选项卡,然后钩上 "Sign the assembly"(为程序集签名),再Choose a strong name key file(选择强名称密钥文件).做完了操作,然后记得保存,编译这样你的DLL才能拖到GAC,GAC就是"全局程序集缓存",这就是为什么你的你的项目的bin文件夹下没有System.Data,你都能引用的原因,因为程序会自动去找GAC,GAC的位置在win 2003中是"c:\windows\assembly".

解决方案 »

  1.   

    前面看懂了 后面【做完了操作,然后记得保存,编译这样你的DLL才能拖到GAC,GAC就是"全局程序集缓存",这就是为什么你的你的项目的bin文件夹下没有System.Data,你都能引用的原因,因为程序会自动去找GAC,GAC的位置在win 2003中是"c:\windows\assembly".】没看懂
      

  2.   

    1L在和你扯淡呢。参考:http://msdn.microsoft.com/zh-cn/library/8s9b9yaz(v=vs.80).aspx前提是你必须要有证书(这个要花钱的),否则你只能产生一个私有证书。方法是,首先调用Makecert.exe产生证书,再调用Cert2spc.exe转化成spc格式,给signtool使用
      

  3.   

    本帖最后由 caozhy 于 2012-08-07 16:24:03 编辑
      

  4.   

    签名的作用是,文件自身可以证明自己没有被篡改,前提是,它首先用它的证书(确切说是证书链)表明自己的身份。否则篡改文件的人自己给自己颁发个证书,你只能知道这个文件对于签名的那个人是没有修改的,但是签名的人是不是篡改文件的人就不知道了。对于没有签名的文件,如果文件创建者公布了文件的散列(比如md5、sha-1)那么你也可以验证文件是否被更改(同样你要人肉证明这个md5或者sha-1等算法产生的散列来自原始发布者,而不是篡改文件的人发布的,否则验证就没有意义了),只是文件本身没有自己证明自己的功能。故而文件签名的作用有2:(1)证书证明签名者的身份(2)哈希算法(或者叫散列算法)验证文件签名后没有被篡改。
      

  5.   

    非常感谢我知道了,那怎么才能用最简单的办法看出程序被篡改了吗?【比如md5、sha-1】这些在文件的属性里吗?
      

  6.   

    如果你的文件有数字签名,打开3L的属性对话框,选择签名,点详细信息,会自动验证签名是否有效。
    如果你的文件没有数字签名,需要另外的软件去计算hash。
      

  7.   

    Quote: 引用 3 楼 gzxchaoren 的回复:

    其实我就想做成这样的,生成的程序,点属性有数字签名,如图
    请问这个大哥:这个”数字签名“选项卡怎么弄的?能否给个资料或者链接?谢谢!