日期:2014-05-16  浏览次数:21286 次

DLL文件的publicKeyToken做什么?
看文档说,DLL文件的publicKeyToken是出于安全性考虑。

DLL编写者在编译这个dll的时候,用私钥加密dll的hashcode。别人在用这个dll的时候,用公钥解密加密后的hashcode。

解密后的hashcode与本地生成的hashcode比对,看看是不是一样。

这样说对吗?有没有更形象一点的解释?
------解决方案--------------------
很简单的道理,就是为了避免兼容性问题和安全性问题。

先说兼容性问题,程序集分为两种,一种是随着程序分发,被放在程序目录中的那种dll,这种dll不容易冲突,因为个人用个人的。但是还有一种dll,它被注册到系统中,从而被所有程序共享,这个就有问题了。因为程序的调用者需要确认这个dll是不是和它开发时候引用的那一个一致,如果不一致,则可能存在兼容性问题。

再说安全性,这个很好理解,我们假设程序中有一段逻辑是判断用户密码,如果正确则登录系统。如果有人修改了程序,去掉了这样的逻辑,无论密码是否正确,都允许登录系统。更有甚者,破解者甚至会企图编写一个类名、方法名、程序集名完全一样的程序替代掉原来的dll。

无论以上哪种情形,为了杜绝这种情况的发生,我们需要使用一种非对称签名方式对程序集加上验证机制,验证机制需要确保两点,只有作者才有权修改程序(为此,只有作者才掌握私钥),无论谁都可以验证程序集颁布后是否被篡改(所以需要一个公钥,每个人都可以得知,并且和程序验证)。
------解决方案--------------------
引用:
Quote: 引用:


会有一个用于签名的证书。


还是不太明白,这个证书是随带着exe文件一起给用户的吗?

我们平时编写程序的时候用到这些东西了吗?还是我们用到了没有注意到? 再次感谢!!


很少用到这么东西,可以使用IEDSM工具去看看manifest信息,