使用强命名程序集防范篡改

CLR支持两种程序集:强命名程序集、弱命名程序集,两者的区别在于,强命名程序集是被发布者使用了自己的公钥/私钥对进行了程序集的签名,能唯一性标识程序集的发布者的程序集,并且可以使用密钥对程序集进行唯一性标识、保护和版本控制,这里所提到的保护就是我们需要一起讨论的程序集防篡改。

  首先我们一起来看个例子,这样能简单明了地说明使用强命名程序集的必要性。

  我们建立一个WinForm程序Nick.WinFormApp,添加一个登录窗体,并且在此项目内引用名为Nick.AuthProvider的程序集,用于登录的时候进行身份验证。

  

在Nick.AuthProvider程序集中添加类AccessHandler.cs,用于实现身份验证过程,代码如下  

namespace Nick.AuthProvider{    ///<summary>    /// 作者:MitnickZhou    /// 出处:http://www.cnblogs.com/mitnickzhou/    ///</summary>    public class AccessHandler    {        public static bool CheckValid(string userName, string passWord)        {            if (userName.Equals("Nick") && passWord.Equals("Zhou"))            {                return true;            }            return false;        }    }}

并在LoginForm中添加如下代码,用于显示登录结果,只有当我们在登录窗体中,输入用户名:Nick,密码:Zhou 的时候,系统才会让我们登录成功。

        private void btnLogin_Click(object sender, EventArgs e)        {            string resultMsg =                AccessHandler.CheckValid(this.txtUserName.Text, this.txtPassWord.Text).ToString();            MessageBox.Show(resultMsg);        }

  好,假如这时我们的程序已经开发完成,可以将其发布出去了,编译之后需要发布的文件如下:
  

  运行程序,输入用户名和密码,并点击登录,如我们所期望的那样,只有输入了正确的用户名和密码后,程序才会提示登录成功。那么假如说其他别有用心的人,知道了Nick.AuthProvider.dll这个程序集的作用之后,可以做什么事情呢?我们一起来看看。

  重新建立一个新的程序集,取名也叫做Nick.AuthProvider,并且添加AccessHandler的类型。  

  

  AccessHandler内的代码如下,对于任意用户名和密码,都返回验证通过。

    public class AccessHandler    {        public static bool CheckValid(string userName, string passWord)        {            return true;        }    }

时间: 2024-08-28 20:40:48

使用强命名程序集防范篡改的相关文章

第三章 共享程序集和强命名程序集

1. 概述 本章的重点是如何创建可由多个应用程序访问的程序集. 2. 名词解释 ① 公钥标记:从公钥派生的一个小的哈希值. 3. 主要内容 3.1 两种程序集,两种部署   CLR支持两种程序集:弱命名程序集 和 强命名程序集. 一个程序集可以采取两种方式来部署:私有 或 全局. 弱命名程序集只能私有部署,强命名程序集两种部署皆可. 3.2 为程序集分配强名称 强命名程序集具有四个重要组成部分: ① 一个文件名 ② 一个版本号 ③ 一个语言文化标识 ④ 一个公钥(一般用 公钥标记). 用SN.e

共享程序集和强命名程序集(下)

1.1   强命名程序集能防篡改 1.2   延迟签名. 1.3   私有部署强命名程序集 1.4   "运行时"如何解析类型引用 1.5   高级管理控制(配置) 原文地址:https://www.cnblogs.com/lzcgis/p/10251725.html

如何创建强命名程序集, 如何查看强命名程序集的PublicKeyToken

1. 在Visual Studio中的class library工程上点右键, 选择properties. 2.  选择左边的Signing选项卡. 3. 勾选Sign the assembly复选框. 在下拉列表中选择<New...>. 4. 在弹出的对话框中给snk文件起一个名字. 按OK. 5. 程序集强命名完成. 如何查看强命名程序集的public key token ========================= 有时候你需要在web.config文件中或者其他地方引用自己写的强

强命名程序集,签名,延迟签名

强命名程序集 如果一个程序集有一个唯一的标记,那么这个程序集就可以叫做强命名程序集.在.NET框架中是通过公钥/私钥加密来产生这个唯一标记的.一个强命名程序集包含四个唯一标志程序集的特性:文件名(没有扩展名),版本号,语言文化信息(如果有的话),公有秘钥. 这些信息存储在程序集的清单(manifest)中.清单包含了程序集的元数据,并嵌入在程序集的某个文件中.下面的字符串标识了二个不同的程序集文件: “MyType, Version=1.0.1.0,Culture=neutral, Public

03.共享程序集和强命名程序集

进行私有部署时,程序集放在应用程序的基目录(或者它的一个子目录)中的,这个应用程序专用的.以私有方式部署程序集,可以对程序集的命名.版本和行为进行全面的控制 CLR支持两种程序集,一种是弱命名程序集,一种是强命名程序集 强命名程序集使用发布者的公钥/私钥对进行签名,它唯一性地标识了程序集的发布者 弱命名程序集只能进行私有部署,"全局部署的程序集"是部署到一些已知的位置的程序集 强命名程序集 具有4个重要的attributes,它们共同对程序集进行唯一性标识:一个文件名.一个语言文化,一

学习 第三章CLR共享程序集和强命名程序集

CLR 支持两种程序集:弱命名程序集(weakly named assembly)和强命名程序集(strongly named assembly) 程序集可采用两种方式部署:私有和全局 弱命名程序集只能以私有方式部署 强命名程序集部署即可私有又全局. 强命名程序集具有4个重要特性:文件名(不计扩展名),版本号,语言文化,公钥 例如:"MyTypes,Vesion=1.0.8123.0,Culture=neutral,PublicKeyToken=b77a5c561934e89" 注意:

CLR 关于强命名程序集 .

如何创建强命名程序集(Strong Name Assembly)     创建一个强命名程序集首先需要获得一个用强命名实用工具   (Strong Name Utility,即SN.exe,.NET SDK自带)产生的密钥.   下面简要介绍一下SN.exe的一些用法. 要产生一个公钥/私钥对:     a)SN –k MyCompany.Keys   该命名告诉SN.exe创建一个名为MyCompany.keys的文件.MyCompany.keys文件将包含以对以二进制格式存储的公有密钥和私有

共享程序集和强命名程序集(上)

1.1   两种程序集,两种部署(待更新...) 两种程序集:弱命名程序集,强命名程序集.两者结构完全相同.区别:强命名程序集使用发布者的公钥/私钥进行签名. 部署:私有或者全局. 1.2   为程序集分配强名称 1.3   全局程序集缓存 1.4   在生成的程序集中引用强命名程序集 原文地址:https://www.cnblogs.com/lzcgis/p/10251718.html

强命名程序集组成与作用

强命名 由一个程序集的标识组成并通过公钥和数字签名(针对该程序集生成)加强的名称,其中的标识包括程序集的简单文本名称.版本号和区域性信息(如果提供的话). CLR需要支持某种机制来唯一的标识一个程序集.这就是所谓的强命名程序集..Net使用Name.Version.Culture.PublicToken四个属性来唯一标识一个程序集.强命名程序集正是使用RSA(非对称算法)生成的公钥/私钥来保证public Token的唯一性,.net在编译项目时将指定的公钥/私钥写入程序集来保证其唯一性.