如何生成密钥文件Snk
2010-06-09 11:19
在.net中,snk用于给应用程序集签名,保证应用程序集的有效性。
强命名程序集的缘由 : 目前Windows中出现的DLL Hell问题(两个不同的公司可能开发处具有相同名称的程序集,如果将相同名称的程序 集放置到同一个目录下,则会出现程序集覆盖现象,最后安装的程序集会覆盖前面的程序集,从而可能导致应用序不能正常运行)。由此看来,仅靠名称来区分程序 集是不足够的。CLR采取了强命名程序集的方式来唯一的表示程序集。强命名程序集包含四个标识:名称,版本号,语言文化标识和一个共有/私有密钥对。两种 程序集/两种部署方式:.Net支持两种程序集:弱命名程序集和强命名程序集(注:.Net框架中没有弱命名程序集,只是为了和强命名程序集相对应而
已 )。 弱命名程序集和强命名程序集在结构上是相同的。他们都采用PE文件格式,包含PE表头,CLR表头,元数据和清单表。区别在于:强命名程序集拥有一 个发布者的公钥/私钥签名对,他们用于唯一的标识程序集的发布者。通过公钥/私钥对,我们可以对程序集进行唯一的标识,安全策略和版本策略。
VS2005中,强命名的原理 :
先利用SN.exe这个工具生成一个比如 SampleKey.snk的文件,这个文件的英文原文叫string name key file,然后用加密的算法根据SampleKey.snk生成一个SampleKeyPublic.snk.最后在根据 SampleKeyPublic.snk提取一个public key token
,public key token是一个16位的数字和字母混合的数(我不敢确定是不是十六进制数):大致流程如下:
SampleKey.snk --根据一定的算法--> SampleKeyPublic.snk---->public key token
所以我们只要SampleKey.snk和public key token就可以了,SampleKeyPublic.snk就没什么用了.
实际操作 如下:
1.打开SDK Command Prompt或者VS2005中的Visual Studio 2005 Command Prompt.而不是windows的cmd
2.输入sn -k SampleKey.snk,得到的文件在命令提示符的当前文件夹下(微软叫文件夹很少叫目录,最正点是folder)
3.输入sn -p SampleKey.snk SampleKeyPublic.snk
4.输入sn -t SampleKeyPublic.snk 得到public key token
打开VS2005,找到项目,然后右击"项目名"找到"属性","属性"里面有个"签名"的选项卡,然后钩上
"为程序集签名",再"选择强名称密钥文件".做完了操作,然后记得保存,编译
分享到:
相关推荐
2. 在编译.NET项目时,通过在编译选项中指定强名称密钥文件(如`/keyfile:mykey.snk`),使编译器使用该密钥对对程序集进行签名。 使用强名称的益处包括: 1. **唯一性**:每个具有强名称的程序集都有一个全球唯一...
4. **生成密钥对**:使用sn.exe -k 命令可以生成一个新的密钥对,例如`sn -k myKey.snk`,这将创建一个名为myKey.snk的文件,其中包含了密钥对。 5. **签名程序集**:生成密钥对后,开发者可以在编译时使用Visual ...
我们可以在 Visual Studio 的命令提示符下执行以下命令来生成密钥文件: `sn -k keyfile.snk` 这将在当前目录下生成一个名为 keyfile.snk 的密钥文件。 签名程序集 接下来,我们需要将密钥文件拷贝到类库 B 的...
QBPDFCLASS.snk可能是用于代码签名的密钥文件,确保库的安全性;QBPDFCLASS.tlb是类型库,定义了库的接口供其他程序使用。 8. **PDF使用说明**:压缩包内的"PDF使用说明.txt"文件可能提供了如何使用相关工具或库...
本文将详细介绍如何使用SNK密钥文件保护你的DLL和代码,确保它们不被轻易反编译。 首先,让我们明确一些基础概念。SNK文件,也就是密钥文件,在.NET环境中常常指代强命名密钥对文件。它是一种对.NET程序集进行签名...
4. 生成强名称密钥文件,如`C:\myKey.snk`,用于给Dll签名,提高安全性。 5. 在项目属性中,确保Assembly是COM可见的,选择Release模式编译,并在Signing选项卡中引入强名称密钥文件。 6. 检查`AssemblyInfo.cs`文件...
步骤: 1.先创建类库项目,完成编码; 2....,则在D:\GACkey\GACkey.snk就会生成密钥文件; 3.关联类库文件和密钥文件,并编译生成dll文件(有两种方法); a. 在 Visual Studio .NET 解决方案资源管
- 在“新建密钥文件”对话框中,你可以输入一个文件名,例如"MyKey.snk",表示你的密钥文件的名称。 - 为了简化流程,可以选择“不要用密码保护此密钥文件”,这样就不需要为密钥文件设置访问密码。不过,这也有...
- **密钥文件**:生成密钥文件,例如`installutil.snk`,用于签名编译后的可执行文件,进一步增强隐蔽性和可信度。 ##### Demo示例 - **Demo 1**:以抓取密码为例,在不同环境下(包括安装有360套装、小红伞、...
例如,运行`sn -k MyKeyPair.snk`会创建一个名为"MyKeyPair.snk"的密钥文件。 2. **导出公钥**:如果需要与他人共享,可以导出公钥。运行`sn -p MyKeyPair.snk PublicKey.snk`,这样就可以只使用公钥而无需暴露私钥...
1. **生成密钥对**:使用`sn.exe`(Strong Name工具)创建一个密钥文件,例如`keyPair.snk`,命令是`sn -k keyPair.snk`。 2. **反汇编DLL**:使用`ildasm.exe`(IL Disassembler)将DLL文件反汇编为中间语言(IL)...
例如,`sn -k MyKeyPair.snk`命令将创建一个名为MyKeyPair.snk的密钥文件。 2. **在项目属性中设置强名称**:在Visual Studio中,打开项目属性,导航到“签名”选项卡,选择“为程序集签名”,然后浏览并选择之前...
- 在CMD中执行以下命令来生成密钥对: ```cmd sn.exe -k pri.snk ``` - 这条命令会生成一个名为`pri.snk`的私钥文件。同时,使用以下命令生成公钥文件: ```cmd sn.exe -p pri.snk pub.snk ``` 3. **将私钥...
- 使用命令行工具`sn`生成一个强名称密钥文件,例如`TestComkey.snk`。 - 在项目的签名选项中指定该强名称密钥文件。 3. **定义接口和类** - 定义一个COM接口`IEncrypt`,并为其分配唯一的`GUID`。 - 实现该...
例如,`sn -k MyKeyPair.snk`会在当前目录下创建一个名为MyKeyPair.snk的密钥文件。 2. **在项目属性中设置强名称**:在Visual Studio中,打开项目属性,导航到“签名”选项卡,选择“为 assembly签名”,然后浏览并...
如果密钥文件位于项目根目录下,则可以简化为`[assembly: AssemblyKeyFile("MKeyStudio.snk")]`。 3. **项目属性设置**:也可以通过项目属性页面中的“签名”选项卡来指定密钥文件。首先勾选“为程序集签名”复选框...
- 创建密钥文件后,VS2010会自动生成一对密钥,包括私钥和公钥。私钥保留在密钥文件中,而公钥则会被嵌入到你的程序集中。这个公钥是用于验证程序集签名的。 5. **编译项目**: - 最后一步是编译你的项目。当你...
生成密钥文件后,在项目设置中指定该密钥,编译器将使用它为程序集生成强签名。 接下来,使用`InternalsVisibleToAttribute`。假设我们有一个强签名的程序集`AssemblyA`,我们希望`AssemblyB`能访问`AssemblyA`的...
1. **生成密钥对**:使用`sn.exe (Strong Name Tool)`工具生成一个密钥文件,如`MyKey.snk`。 ``` sn -k MyKey.snk ``` 2. **在项目属性中设置强名称**:在Visual Studio中,选择项目,打开属性,导航至“签名...
- 使用 `sn.exe` 工具可以为 DLL 生成强名称密钥文件 (SNK)。这一步骤对于确保 DLL 文件的唯一性和安全性至关重要。 ```bash sn -k "D:\Perforce\1985\depot\dmo\Zeus\Zeus\Development\ui\ZeusFrad\Zeus.Frad....