日期:2014-05-18  浏览次数:21407 次

C# 数字签名是干什么的,怎么用?
据我了解数字签名好像是给软件一个值判断是否有别人重写你的程序没有?不知道对不对,请大鸟说说?

百度信息如下:以电子形式存在于数据信息之中的,或作为其附件的或逻辑上与之有联系的数据,可用于辨别数据签署人的身份,并表明签署人对数据信息中包含的信息的认可。

还有用法,我了解的是用DES、RAS等进行什么非对称加密,这些加密我会,就是搞不懂数字签名和这些加密有什么关系,就是具体怎么用?

------解决方案--------------------

先利用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".

------解决方案--------------------
1L在和你扯淡呢。

参考:

http://msdn.microsoft.com/zh-cn/library/8s9b9yaz(v=vs.80).aspx

前提是你必须要有证书(这个要花钱的),否则你只能产生一个私有证书。方法是,首先调用Makecert.exe产生证书,再调用Cert2spc.exe转化成spc格式,给signtool使用
------解决方案--------------------
你不就是给可执行文件签名,如你在3L看到的图那样的么。
------解决方案--------------------
签名的作用是,文件自身可以证明自己没有被篡改,前提是,它首先用它的证书(确切说是证书链)表明自己的身份。否则篡改文件的人自己给自己颁发个证书,你只能知道这个文件对于签名的那个人是没有修改的,但是签名的人是不是篡改文件的人就不知道了。对于没有签名的文件,如果文件创建者公布了文件的散列(比如md5、sha-1)那么你也可以验证文件是否被更改(同样你要人肉证明这个md5或者sha-1等算法产生的散列来自原始发布者,而不是篡改文件的人发布的,否则验证就没有意义了),只是文件本身没有自己证明自己的功能。

故而文件签名的作用有2:(1)证书证明签名者的身份(2)哈希算法(或者叫散列算法)验证文件签名后没有被篡改。
------解决方案--------------------
如果你的文件有数字签名,打开3L的属性对话框,选择签名,点详细信息,会自动验证签名是否有效。
如果你的文件没有数字签名,需要另外的软件去计算hash。
------解决方案--------------------
此签名非彼签名。我不是和你说了么?那个人在扯淡。