我们可以将在应用程序范围之外创建的任何公钥分配给程序集吗

本文关键字:公钥 任何 分配 程序集 创建 应用程序 范围 我们 | 更新日期: 2023-09-27 18:28:11

我使用"sn-k MyStrongkey.snk"创建了一个强密钥,其中包含公钥和私钥。我已经使用"sn-p MyStrongKey.snk MyStrongPublicKey.snk"从中提取了公钥。

现在,当我将提取的公钥分配给类库并运行应用程序时,它会向我抛出一个错误-强名称验证失败

是否不能在应用程序范围之外创建密钥并将其分配给程序集?

感谢您的指导

我们可以将在应用程序范围之外创建的任何公钥分配给程序集吗

不能使用公钥对程序集进行完全签名。这就是您出现此错误的原因。

您必须使用密钥对MyStrongKey.snk(包含私钥)对程序集进行签名。

延迟标志

对程序集进行部分签名(使用公钥)的唯一方法是通过延迟签名。但是,为了使用部分签名的程序集,您必须将计算机配置为跳过签名验证

以下示例将.NET Framework配置为跳过开发计算机上ClassLibrary程序集的强名称签名验证:

sn -Vr ClassLibrary.dll

还可以使用sn.exe工具跳过使用特定密钥签名的所有程序集的签名验证。例如,如果您想将机器配置为跳过所有使用与ClassLibrary相同密钥延迟签名的程序集,请首先在开发机器上执行以下操作:

sn -T ClassLibrary.dll

这会打印出公钥令牌的值,这是公钥的缩短版本,看起来像这样:

Microsoft (R) .NET Framework Strong Name Utility Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved. Public key
token is b03f5f7f11d50a3a

(请注意,公钥令牌的实际值会因公钥而异。)然后,您可以执行以下命令,跳过使用该公钥令牌的任何程序集的强名称验证:

sn -Vr *,b03f5f7f11d50a3a

更多信息:http://msdn.microsoft.com/en-us/magazine/cc163583.aspx

公钥和私钥

公钥的目标是在不暴露整个签名的情况下,提供强名称签名的公开表示。

不知怎的,您可以将公钥看作读取器密钥,将私钥看作写入器密钥。

Visual Studio提供了一种对密钥对进行密码保护的方法,以避免未经授权的签名和公钥提取。但是密码存储在您的计算机上。请参阅强名称密钥密码存储在哪里?